为了账号安全,请及时绑定邮箱和手机立即绑定

Kubernetes核心概念

本文翻译自CNCF发表的文章:《Kubernetes: Core Concepts》

原作者Tom Gallacher, YLD工程师

它不需要很难

掌握Kubernetes可能非常困难,因为互联网上散布着如此多的信息,有时很难找到并理解Kubernetes的“核心”信息,特别是当得知kubernetes.io的概念页面和文档的信息密度时。在这个“Kubernetes”博客系列的第一部分中,我们将探索Kubernetes的核心概念,以获得有关k8s的基础知识,这样我们就可以在一起揭开Kubernetes的神秘面纱了。

Kubernetes为您的团队构建一个开发和发布相关可用平台提供了基础和构建组件。用户可以通过图形用户界面以及命令式和声明式命令行界面来管理他们的Kubernetes集群,该界面旨在管理容器化的应用程序和服务的整个生命周期。

通过k8s平台,您可以伸缩扩展应用程序,执行滚动部署以及管理哪些服务应响应某些请求。它还提供了一个可扩展的框架,允许您的团队将核心kubernetes原语扩展到他的核心中!就像k8s创建自己的概念选项那样。

与大多数框架一样,其中一个缺点是它缺少许多开箱即用的特定功能或那些被归类为交钥匙的解决方案。在标准发行版中,它没有包含服务如何相互通信的方法(它甚至不包括网络组件!),当然还存在其他发行版,您也可以构建自己的发行版。

容器

容器是一个独立的,可执行的软件,包含运行它所需的一切。例如代码,库和任何外部依赖项。它确保运行的内容完全相同,即使在不同的环境中运行也是如此。这是通过将正在运行的代码与其执行上下文隔离开来实现的。

这是在Linux中通过使用名为cgroups的API来划分Linux内核的一个子集来实现的 。它提供了与操作系统的大量隔离,但没有虚拟化环境(如VMWare,KVM等)的运行时性能损失。

Pods

Pod是Kubernetes中最基本的对象。

一个Pod是容器的集合,同一个pod内的容器共享存储和网络,pod中包含如何运行容器的规范。每个pod都分配有自己的IP地址。pod中的容器共享此IP地址,端口空间,并可通过localhost找到彼此。

应将pod视为短暂的原语。

Replicaset

一个replicaset在基于提供的模板上运行n个pod。

Replicaset一般不直接使用,但是资源需要被理解,因为它是用于在Kubernetes上构建应用程序的基础构建块。

Replicaset中的pod数量可以(当被指示时)按比例放大或缩小。

服务

由于pod是短暂的(replicasets通过伸缩扩展pod的数量来强制执行此操作),因此问题出现了: 现在几乎不可能在没有复杂逻辑的情况下引用单个pod来跟踪拓扑变化。

服务(service) 通过提供基于Pods的抽象来解决这个问题,并提供一种与pod通信的可寻址方法。

服务在OSI模型中的“第4层”(TCP / UDP over IP)上运行。

Deployment

Deployment管理Replicaset,可用于在应用程序版本之间运行滚动升级。

这是最常用的资源类型,它通过单个接口提供了对Replicaset和pod的抽象。

在更新此deployment(例如,部署新版本的应用程序)的情况下,deployment控制器将创建新的replicaset并管理从旧版本到新版本的滚动升级。

从Kubernetes 1.11版本开始,deployment当前不会自动处理回滚。

ConfigMap

设计良好的应用程序应该尝试遵循12因素应用程序清单,对于应用程序的配置,应该将配置存储在“环境”中。虽然常见的安全实践告诉我们:当某些程序在出错的时候会输出环境信息,在环境中存储配置可能会导致secret意外泄露。尽管如此,配置应与构建应用程序分开存储,因为每个环境的配置都会更改。(开发,暂存,生产)。

ConfigMaps允许将配置文件作为环境变量或文件系统挂载挂载到Pod中,从而解决了这个问题。

Secret

secret与ConfigMaps非常相似,但他们的名字是“secret”[3] [4]。

Daemonset

一个 Daemonset 确保所有节点运行特定pod。这对于在所有节点上运行日志记录代理,诸如fluentd之类的程序很有用 。

也可以通过使用Taints来忽略某些节点 。

##Ingress

在大多数情况下,服务和pod具有只能从Kubernetes集群内访问的IP地址。服务与互联网流量被隔离开来。

“Ingress是一组允许入站连接到达集群服务的规则。”

它可用于负载平衡,终止TLS,提供外部可路由URL等等。入口只是另一个Kubernetes资源,但是,在大多数情况下,它需要有一个入口控制器(ingress controller), 如 Nginx 或 Træfik。


Kubernetes是一个自动化容器编排的平台,使应用程序能够在无数平台上大规模运行,这些平台可能是异构的,包含不同的处理器体系结构和操作系统,这由实现者自行决定。

使用这些核心概念,Kubernetes可以将pod安排到适当的节点上,以确保最大可能的pod密度,这由Kubernetes通过实现Bin Packing等多种算法来控制, 这使您可以实现更高的硬件利用率。


点击查看更多内容
“小礼物走一走,来慕课关注我”
赞赏支持
Tony Bai 说 去围观
Tony Bai,智能网联汽车独角兽公司先行研发部负责人,Go语言专家,资深架构师,《Go语言精进之路》作者。
评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消