目录
1.pod创建流程
kubernetes Pod创建 的 工作流:
第一步:
kubectl 向api server 发起一个create pod 请求
第二步:
api server接收到pod创建请求后,不会去直接创建pod,而是生成一个包含创建信息的yaml。
第三步:
apiserver 将刚才的yaml信息写入etcd数据库。到此为止仅仅是在etcd中添加了一条记录, 还没有任何的实质性进展。
第四步:
scheduler 查看 k8s api ,类似于通知机制。
首先判断:pod.spec.Node == null?
若为null,表示这个Pod请求是新来的,需要创建;因此先进行调度计算,找到最“闲”的node。
然后将信息在etcd数据库中更新分配结果:pod.spec.Node = nodeA (设置一个具体的节点)
ps:同样上述操作的各种信息也要写到etcd数据库中中。
第五步:
kubelet 通过监测etcd数据库(即不停地看etcd中的记录),发现api server 中有了个新的Node;
如果这条记录中的Node与自己的编号相同(即这个Pod由scheduler分配给自己了);
则调用node中的docker api,创建container。
2.k8s资源清单配置
一、资源类型
1、工作负载型资源
这些资源就是K8S中承载具体的工作的一些资源,常见的类型有:Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjon,...
2、服务发现及均衡型资源
这种类型的资源主要和服务相关,负责服务发现,调度等,常见的类型有:Service,Ingress,...
3、配置与存储相关资源:
这类型的资源主要和存储相关,常见类型有:Volume,CSI,ConfigMap,Secret,DownwardAPI,...
4、集群级资源
这类型资源主要提供集群的管理相关的功能,常见类型有:Namespace,Node,Role,ClusteRole,RoleBinding,ClusterRoleBinding
5、元数据型资源
这类型的资源主要提供元数据相关的功能,常见类型有:HPA,PodTemplate,LimitRange, ....
二、创建资源配置清单
K8S中的APIServer在创建资源时采用JSON格式的数据,我们可以通过使用yaml格式的配置文件来提供配置,然后K8S内部自动帮我们转换为JSON格式,然后再提交。
资源配置清单关键字
, 在一个配置清单中,有五个一级字段及多个下级字段组成,我们先来看下这几个一级字段:
1. apiVersion:[group]/version
APIServer使用分组来管理api,在创建资源配置清单的时候要指定此api属于哪个组,属于core组的资源,在定义时可以省略组名,使用kubectl api-server
命令可以来获取api版本。
2、kind:资源类型
kind字段用来指定要管理的资源类型,资源类型如上所述。
3、metadata:元数据
metadata字段用来指定部分元数据,其有多个二级字段:
name:资源名称,在同一个类别中这个名称必须是唯一的
namespace:名称空间,资源所属