Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用。而且Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台上运行,也可以直接部署在物理主机上。
举个例子:
Kubernetes概念(角色)组成
Kubernetes组成
相较于OpenStack中的组件:
Kubectl
一个命令行工具,将接收到的命令,格式化后,发送给kube-apiserver,作为对整个平台操作的入口。
Kube-apiserver
作为整个系统的控制入口,以RESTAPI的形式公开。它可以横向扩展在高可用架构中。
Kube-controller-manager
用来执行整个系统中的后台任务,它其实是多个控制进程的合体。大致包括如下:
Node Controller 负责整个系统中node up或down的状态的响应和通知
Replication Controller 负责维持Pods中的正常运行的pod的个数
Endpoints Controller 负责维持Pods和Service的关联关系
Service Account & Token Controllers 负责为新的命名空间创建默认的账号和API访问Token
Kube-scheduler
负责监视新创建的Pods任务,下发至未分配的节点运行该任务
Kube-proxy
kube-proxy运行在每个节点上,它负责整个网络规则的连接与转发,使kubernetes中的service更加抽象化
Kubelet
kubelet运行在每个节点上,作为整个系统的agent,监视着分配到该节点的Pods任务,(通过apiserver或者本地配置文件),负责挂载Pods所依赖的卷组,下载Pods的秘钥,运行Pods中的容器(通过docker),周期获取所有容器的可用状态,通过导出Pod和节点的状态反馈给REST系统
大概可以用以下这幅图来表示:
Pod
一组共享上下文的应用程序叫做一个pod,在上下文中,程序也可以应用单独的cgroup隔离。一个pod的模型就是一组运行指定应用的容器环境(逻辑主机),他可以容纳一个或多个应用程序,但是在一个容器世界里,这表现的相对较耦合。它们会运行在相同的物理主机或虚拟主机上
pod中的上下文是结合Linux命令空间来定义的,这里包含:
pod namespace(pod中的应用程序可以看到其他的进程)
network namespace(应用程序获得相同的IP和端口空间)
ipc namespace(pod中应用程序可以使用SystemV IPC或者POSIX消息队列来通信)
uts namespace(pod中的应用程序共享主机名)
资源共享和通信
pod中所有的应用程序使用相同的网络命名空间,应用程序间可以使用localhost来发现其他程序及通信。每一个pod都有一个IP地址,用来和其他物理节点及跨网络的容器进行通信。
pod作为部署的最小单位,支持水平扩展和复制.