Kubernetes是CNCF旗下的一个开源软件系统,用以在集群(跨多主机)中管理容器化的应用,提供应用的部署、维护和伸缩等。应用打包为与运行环境无关的容器镜像(Kubernetes中称为Deployment),然后Kubernetes将其部署到集群中运行的主机上(通常是虚拟机),并以容器实例的形式运行,成为供用户访问的应用。
Kubernetes集群中的主机(也被称为资源,通常是虚拟机)可以分为两类,Master和Nodes。每类主机上都安装有一系列软件组件。
1.Master
一个专用的机器(虚拟机),是Kubernetes集群的control plane,用以协调调度集群中的各个Nodes的主机。通常,安装的组件如下:
1) kube-apiserver,暴露Kubernetes API供调用
对集群外部暴露Kubernetes API供调用。如响应kubectl的请求,接收Deployment配置文件,并将其中定义的对象存储在etcd中。
对集群内部,与Nodes主机上的Kubelet进程通信,调度Pods,获取Pods日志等。
2) etcd,key/value数据库
3) kube-scheduler,将新创建的pods交给选定的一个Node并启动
4) kube-controller-manager (KCM),负责管理运行各种与应用、服务等相关的Controllers
5) cloud-controller-manager (CCM),负责管理运行各种与底层Cloud Provider相关的Controllers
由Cloud Provider实现,独立于Kubernetes,但以扩展插件的形式集成到Kubernetes。Cloud Provider通过实现CCM,能够方便地将自己的Cloud集成到Kubernetes集群。
如果Cloud不提供自己的CCM,Kubernetes集群中的kube-apiserver,KCM和Kubelet都需要与Cloud交互。而通过CCM,就可以隔离Kubernetes与Cloud的直接交互,从而摆脱与Cloud的锁定。事实上,CCM通过各种Controllers将kube-apiserver,KCM和Kubelet与Cloud相关的操作整合为一个集成点,从而使得Kubernetes与Cloud无关。
一个Controller就是一个进程。但是为了方便管理,将所有的Controllers打包作为一个进程运行。
目前提供CCM的Cloud提供商:
2.Nodes
若干个机器(虚拟机),实际运行业务应用的负载主机。通常,安装的组件如下:
1) Kubelet
一个代理组件,与Master的kube-apiserver通信,作为Master管理Node的代理,确保运行在该Node上的Pod能够被纳入的Kubernetes集群。
2) kube-proxy
屏蔽Node底层网络环境的差异,为Kubernetes的服务提供统一的虚拟IP抽象层。
3) 容器运行时环境,如Docker, rkt, runc等
说明:Kubernetes集群中不存在创建Node的问题,因为作为Node的物理机或VM,是由云提供的。但是,这些外部云提供者提供的Node,需要在Kubernetes集群中声明,并通过Master上的Node Controller进行管理控制。
参考链接:
https://kubernetes.io
https://github.com/kubernetes/kubernetes
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands