目录
一、nodeselector节点选择器
我们先创建一个普通的deploy资源,设置为10个副本,查看创建的pod;
# 如果集群只有2个节点,可以将master节点也作为work节点
[root@k8s1 deploy]# kubectl taint nodes --all node-role.kubernetes.io/master:noschedule-
# 创建deploy资源
[root@k8s1 deploy]# cat deploy.yaml
apiversion: apps/v1
kind: deployment
metadata:
name: dm01
spec:
#声明设置升级策略
strategy:
#设置升级的策略类型,类型有两种;
#第一种:recreate:先停止所有pod,再批量创建新的pod;生产环境不建议使用,因为用户在此时会访问不到服务;
#第二种:rollingupdate:滚动更新,即实现部分更新,逐渐替换掉原有的pod,也就是默认的策略;
type: rollingupdate
#如果设置了滚动更新rollingupdate类型,还需要设置更新的策略;
rollingupdate:
#在原有pod副本数量的基础上,多启动pod的数量(也就是说,更新过程中同时可以存在2+副本数个pod,新旧版本一起)
maxsurge: 2
#在升级的过程中最大不可访问的pod的数量(也就是说,pod副本数-1的数量可以被访问)
maxunavailable: 1
replicas: 10
selector:
matchlabels:
k8s: oslee
template:
metadata:
name: pod01
labels:
k8s: oslee
spec:
containers:
- name: c1
image: registry.cn-hangzhou.aliyuncs.com/oslee-dockerhub/nginx:1.27-alpine3.19
ports:
- containerport: 80
[root@k8s1 deploy]# kubectl apply -f deploy.yaml
deployment.apps/dm01 created
我们发现,其是随机创建在,k8s1和k8s2节点上的;
那么我们有没有方法,让pod根据我们自己的想法,创建在我们想要的节点上呐?
接下来,我们就学习,关于pod调度的节点选择器,nodeselector
二、nodeselector的使用
通过标签让pod创建在我们想要的节点上;
# 查看节点标签
[root@k8s1 deploy]# kubectl get nodes --show-labels
name status roles age version labels
k8s1 ready control-plane,master 4d v1.23.17 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s1,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s2 ready <none> 4d v1.23.17 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s2,kubernetes.io/os=linux
# 给节点打标签
[root@k8s1 deploy]# kubectl label node k8s1 node=k8s1 os=lee
node/k8s1 labeled
[root@k8s1 deploy]# kubectl label node k8s2 node=k8s2 os=lee
node/k8s2 labeled
# 编辑deploy资源
[root@k8s1 deploy]# cat deploy.yaml
apiversion: apps/v1
kind: deployment
metadata:
name: dm01
spec:
#声明设置升级策略
strategy:
#设置升级的策略类型,类型有两种;
#第一种:recreate:先停止所有pod,再批量创建新的pod;生产环境不建议使用,因为用户在此时会访问不到服务;
#第二种:rollingupdate:滚动更新,即实现部分更新,逐渐替换掉原有的pod,也就是默认的策略;
type: rollingupdate
#如果设置了滚动更新rollingupdate类型,还需要设置更新的策略;
rollingupdate:
#在原有pod副本数量的基础上,多启动pod的数量(也就是说,更新过程中同时可以存在2+副本数个pod,新旧版本一起)
maxsurge: 2
#在升级的过程中最大不可访问的pod的数量(也就是说,pod副本数-1的数量可以被访问)
maxunavailable: 1
replicas: 10
selector:
matchlabels:
k8s: oslee
template:
metadata:
name: pod01
labels:
k8s: oslee
spec:
nodeselector:
# 根据标签调度到节点k8s1上,如果使用os=lee两个节点都有,就是两个节点都调度
node: k8s1
containers:
- name: c1
image: harbor.oslee.com/oslee-private/my-nginx:v2
ports:
- containerport: 80
[root@k8s1 deploy]# kubectl apply -f deploy.yaml
deployment.apps/dm01 created
发表评论