概念
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着,包括将一个容器保持持续,关闭或者其他。
背景和价值
首先了解 k8s的前世今生,k8s是 Kubernetes的缩写,原因是因为 K 和 s 之间有八个字母,以此来简写的。最开始是由 Mesos最先开始的集群的管理和部署,然后 k8s 才慢慢介入进来。
最开始,PaaS(平台即服务)需要大量的运维工程师,当用户买定产品,运维工程师需要为用户安装相应的运营环境,由于不同的配置环境,运营工程师承担着极大的压力。后来包括虚拟机等产出,运维工程师可以将整个系统和环境带给用户,再到后面,docker的出现解决的不同APP以及其对应的不同配置环境的封装技术,有较高的安全性能,利用宿主机的硬件设备,大打算建了对于内存的需要。
然而这依旧存在着问题,就是由于容器化,不同封装环境中的调用会麻烦,并且,不同物理机运营着不同的运营环境,如果只是多台物理机,只需要将端口对接好就可以完成集群(虽然这样的容器占有率很高),但由于容器化,形成映射关系,转换就需要较高的时间处理,而且一台物理机上可能运行着多个运行,大大增加的集群管理的难度,k8s便因此应运而生了。
功能
k8s的功能主要有:
自动化容器的部署和复制
随时扩展或收缩容器规模
将容器组织成组,并且提供容器间的负载均衡
很容易地升级应用程序容器的新版本
提供容器弹性,如果容器失效就替换它
原理
Master 和 Nobe
在集群的管理中,k8s 会把其中一个机器作为 Master 来运行着着众多管理相关的进程,例如kube-scheduler,用于Pob调度(主要是为新创建的pod在集群中寻找最合适的node,并将pod调度到Node上), kube-apiserver,给资源对象删改增减接口,kube-controller-manager,k8s的管理中心等。
其余的部分为工作节点Nobe, master 和 nobe 的关系如下图所示:
Kubernetes Master
Master指的是集群控制节点。每个K8s集群里需要有一个Ms节点负责整个集群的管理和控制。Kubernetes Master提供集群的独特视角,并且拥有一系列组件。
Node
每个节点都运行如下Kubernetes关键组件。
(1) Kubelet:与Master节点协作,是主节点的代理,负责Pod对应容器的创建,启动,停止等任务。默认情况下Kubelet会向Master注册自己。Kubelet定期向主机点汇报加入集群的Node的各类信息。
(2) Kube-proxy:Kubernetes Service使用其将链接路由到Pod,作为外部负载均衡器使用,在一定数量的Pod之间均衡流量。比如,对于负载均衡Web流量很有用。
(3) Docker或Rocket:Kubernetes使用的容器技术来创建容器。
Pod
上文一直在提到pod这个概念,那么就详细讲一下pod。
Pod是所有业务类型的基础,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。Kubernetes不只是支持Docker容器,它也支持其他容器。Pod 的上下文可以理解成多个linux命名空间的联合:
PID 命名空间(同一个Pod中应用可以看到其它进程)
网络 命名空间(同一个Pod的中的应用对相同的IP地址和端口有权限)
IPC 命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信)
UTS 命名空间(同一个Pod中的应用共享一个主机名