1.Master

Kubernetes里的Master指的是集群控制节点,每个k8s集群需要一个master来负责整个集群的管理和控制,基本上k8s所有控制命令都发给它,它来负责具体的执行过程(高可用建议部署3台服务器)

Master 节点运行的组件:

Kube-apiserver:提供http Rest接口的关键服务进程,是k8s里所有资源增删改查等操作的唯一入口,也是集群控制的入口进程。

Kube-controller-manager:k8s里所有资源对象的自动化控制中心,可以理解为资源对象的“大总管”。

Kube-scheduler:负责资源调度(pod调度)的进程,相当于公司的调度室。

另外,在master节点上还需要启动一个etcd服务,用于存储所有资源对象的数据。

2.Node

除了master,k8s集群中的其他机器被称为Node节点,它可以是一台物理机,也可以是一台虚拟机,是集群中的负载节点,master会根据自动算法或者自定义的策略将pod调度到指定的node上工作,当node宕机时,其上的工作负载会被master自动转移到其他节点。

每个node节点上运行的进程:

Kubelet:负责pod对应的容器的创建,启停等任务,与master关系密切,实现集群管理的基本功能。

Kube-proxy:实现kubernetes service的通信与负载均衡的组件。

Docker engine:docker 引擎,负责本机的容器创建与管理。

前文k8s集群已介绍如何搭建一套集群。这里不多说。

·  [root@api-server ~]# kubectl get nodes  

·  NAME         STATUS   ROLES    AGE     VERSION  

·  api-server   Ready    master   7d20h   v1.14.1  

·  node1        Ready    <none>   7d19h   v1.14.1  

·  node2        Ready    <none>   7d17h   v1.14.1  

·  node3        Ready    <none>   4d16h   v1.14.2 

这里可以看到集群有3个node 1个master.

#kubectl get nodes用于查看集群的node信息。

#kubectl describe node $node_name可以查看更详细的node信息。比如每个pod的CPU的使用率,内存的使用率,node的内核版本,ip信息等以及发生的event都可以查看到。

3.Pod

Pod组成示意图

Pod是k8s的最重要也是最基本的概念,如图所示,每个pod都有一个特殊的被“根容器”的Pause容器。Pause容器对应的镜像属于k8s平台的一部分,以他的状态代表整个容器组的状态。Docker业务容器运行于pod中。

Kubernetes为每个Pod都分配了唯一的IP地址,称为pod IP,一个pod里的多个容器共享Pod IP。kubernetes要求底层网络支持集群内任意两个pod之间的tcp/ip直接通信,通常使用虚拟二层网络技术实现。

4.Label

Label是k8s系统中另一个重要的核心概念,label可以附加到各种对象资源上,例如可以给node打label,给pod打label,一个对象可以添加多个label,例如可以给node增加labe role: preonline 这样就代表着这是个预上线的节点,通过不通label对不同资源进行区分,方便批量更新与回滚。

5.Replication Controller

RC简单来说,定义了一个期望值,即声明了某种pod的副本数量在某时某刻都符合设定的值,如果实际pod的数量少于RC定义的预期的数量,则会自动新增一个pod来符合设定的预期。如配置文件:

apiVersion: v1

kind: ReplicationController

metadata:

name : frontend

spec :

replicas: 1

selector:

tier : frontend

template:

metadata:

labels:

app: app-demo

tie.r: frontend

spec:

containers:

name: tomcat-demo

image: tomcat

imagePullPolicy: IfNotPresent

env :

name : GET HOSTS FROM

value: dns

ports:

containerPort: 80

这里创建了个RC,命名为frontend ,预期存活含有tier:frontend的pod为1个(replicas=1),当预期少于1个时(例如发生node重启,关机等意外),将从template字段生成一个pod,生成后这个pod打上tier: frontend的标签。此时pod数量从0变为1,符合replicas=1的预期.当然此文件还声明了这个pod启用了tomcat的容器(container.image=tomcat)并暴露出80端口(ports.containerPort=80)。

6.Deployment

Deployment 其实是RC的一个升级,增加了例如升级 回滚镜像的功能,如有批量更新镜像版本,则可以使用kubectl set image deployment/$deployment_name $imager_name=$image_version 实例:kubectl set image deployment/nginx-deploy nginx=nginx:1.9.1,说明将升级nginx镜像到1.9.1版本。

apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: nginx-deployment

spec:

replicas: 3

template:

metadata:

labels:

app: nginx

spec:

containers:

-name: nginx

image: nginx:1.7.9

ports:

-containerPort: 80

睿江云官网链接:https://www.eflycloud.com/home?from=RJ0024