Kubernetes及其Master/Node节点

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

  • Node Controller
  • Replication Controller
  • Endpoints Controller
  • Service Account & Token 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无关。

  • Node Controller
  • Route Controller
  • Service Controller
  • Volume Controller

一个Controller就是一个进程。但是为了方便管理,将所有的Controllers打包作为一个进程运行。

目前提供CCM的Cloud提供商:

  • Digital Ocean
  • Oracle
  • Azure
  • GCE
  • AWS

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

你可能感兴趣的:(Kubernetes)