kubectl get pods -o wide
create pod --apiserver–etcd(存储相关信息)
sheduler–apiserver(查看是否有新的pod创建) --etcd(读取pod)-- 调度算法 ,把pod调度到某个节点上面去
kubelet–apiserver–读取etcd拿到分配给当前节点pod–dokcer创建容器
resources:
requests:
memory: “64mi”
cpu: “250m”
根据request找到足够node节点进行调度
apiVersion:v1
kind:Pod
metadata:
name:pod-example
spec:
nodeSelector: //标签选择器
env_role:dev
containers:
- name:nginx
image:nginx:1.15
过程:
首先对节点创建标签kubectl label node 节点名称 env_role=prod/dev
,可以使用nodeSelector进行选择。
kubectl get nodes //查看节点信息
kubectl label node k8s-node01 env_role=dev //将第一个slave节点打上dev标签
kubectl get nodes k8s-node01 --show-labels //查看节点的标签信息
nodeAffinity(更强大),和nodeSelector基本一致,根据节点上标签约束来决定Pod调度到哪些节点上。
有两类:
In , NotIn, Exists, Gt, Lt, DoesNotExist
nodeSelect和nodeAffinity:将pod调度到某些节点上,都是pod里面的属性,调度时实现
Taint污点:节点不做普通分配调度。不是pod的属性,是节点里的属性
kubectl describe node k8s-master |grep Taint
污点值有三个:
*** NoSchedule***:一定不会被调度
** PreferNoSchedule**:尽量不被调度
** NoExecte**:不会调度,并且驱逐Node已有的pod到其他节点中
kubectl taint node [node名称] key=value:污点三个值
kubectl get pods //查看pods
kubectl create deployment [名字] --image=[镜像]
kubectl create deployment web --image=nginx // 创建一个pod里面是一个nginx容器
kubectl get pods -o wide //查看pod信息
kubectl get deployments //以检查 Deployment 是否已创建,可以查看信息
kubectl scale deployment web[名称] --replicas=5 //多创建5个pods
删掉deployment创建的pods
kubectl delete deployment ngix
打上污点
kubectl taint node k8s-node01 env_dev=yes:NoSchedule //给node1添加污点
kubectl describe node k8s-node01 |grep Taint //查看node1节点污点信息
kubectl create deployment nginx --image=nginx //创建deployment的pod
kubectl get pods -o wide // 查看创建的pod信息
kubectl get deployments //以检查 Deployment 是否已创建,可以查看信息
kubectl scale deployment nginx --replicas=5 //再创建5个副本
再次查看pods信息发现pod都分配到node2节点上,为不是node1节点,这就是污点的作用。
kubectl describe node k8s-node01 |grep Taint //查看节点污染信息
Taints: env_dev=yes:NoSchedule
kubectl taint node k8s-node01 env_dev:NoSchedule- //为节点删除污点
kubectl describe node k8s-node01 |grep Taint // 再次查看节点污染信息