您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
50、集群调度 节点亲和性(2]
发布时间:2023-01-06 22:29:22编辑:雪饮阅读()
Step1
基于昨天,我们再创建一个pod
[root@k8s-master01 affi]# cat pod4.yaml
apiVersion: v1
kind: Pod
metadata:
name: affinity
labels:
app: node-affinity-pod
spec:
containers:
- name: with-node-affinity
image: wangyanglinux/myapp:v1
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- k8s-node03
这里使用的是软策略,要让pod在节点3上面,但是我们是没有节点3的
但是这里也是运行成功的,因为是软策略咯。就是说不强制,有节点3就运行到节点3上,没有的话就随便咯
[root@k8s-master01 affi]# kubectl get pod
NAME READY STATUS RESTARTS AGE
affinity 1/1 Running 0 11s
就算清理掉,我们再次创建,还是可以的
[root@k8s-master01 affi]# kubectl delete pod --all
pod "affinity" deleted
[root@k8s-master01 affi]# kubectl create -f pod4.yaml
pod/affinity created
[root@k8s-master01 affi]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
affinity 1/1 Running 0 9s 10.224.2.204 k8s-node02 <none> <none>
可以看到运行到了节点2上了。
Step2
接着我们再次清理下pod
[root@k8s-master01 affi]# kubectl delete pod –all
然后再创建一个pod
[root@k8s-master01 affi]# cat pod5.yaml
apiVersion: v1
kind: Pod
metadata:
name: node01
labels:
app: node01
spec:
containers:
- name: with-node-affinity
image: wangyanglinux/myapp:v1
这个就是一个普通的pod
[root@k8s-master01 affi]# kubectl create -f pod5.yaml
pod/node01 created
可以看到其运行在node02节点以及标签为app=node01
[root@k8s-master01 affi]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
node01 1/1 Running 0 2m57s 10.224.2.205 k8s-node02 <none> <none>
[root@k8s-master01 affi]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
node01 1/1 Running 0 3m2s app=node01
pod名也是node01.。。
那么接下来咱们再建立一个pod
[root@k8s-master01 affi]# cat pod6.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-3
labels:
app: pod-3
spec:
containers:
- name: pod-3
image: wangyanglinux/myapp:v1
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- node01
topologyKey: kubernetes.io/hostname
这个pod我们要求了亲和性(pod亲和性),硬性、label选择为app以及node01
那么就是和上面那个普通的pod差不多了。
所以这两个pod应该是在一起的。所以我们创建看看
[root@k8s-master01 affi]# kubectl create -f pod6.yaml
pod/pod-3 created
果然在一起就是说
[root@k8s-master01 affi]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
node01 1/1 Running 0 9m46s 10.224.2.205 k8s-node02 <none> <none>
pod-3 1/1 Running 0 23s 10.224.2.206 k8s-node02 <none> <none>
就算删除了再创建也是一样的
[root@k8s-master01 affi]# kubectl delete pod pod-3
pod "pod-3" deleted
[root@k8s-master01 affi]# kubectl create -f pod6.yaml
pod/pod-3 created
[root@k8s-master01 affi]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
node01 1/1 Running 0 14m 10.224.2.205 k8s-node02 <none> <none>
pod-3 1/1 Running 0 4s 10.224.2.207 k8s-node02 <none> <none>
Step3
那么接下来我们将刚才这个亲和于step2的普通pod的这个pod删除之
[root@k8s-master01 affi]# kubectl delete -f pod6.yaml
pod "pod-3" deleted
然后再建立一个对step2的这个普通pod进行亲和性取反的一个pod
[root@k8s-master01 affi]# cat pod7.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-3
labels:
app: pod-3
spec:
containers:
- name: pod-3
image: wangyanglinux/myapp:v1
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- node01
topologyKey: kubernetes.io/hostname
然后这次创建的pod就不亲和了
[root@k8s-master01 affi]# kubectl create -f pod7.yaml
pod/pod-3 created
[root@k8s-master01 affi]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
node01 1/1 Running 0 17m 10.224.2.205 k8s-node02 <none> <none>
pod-3 1/1 Running 0 5s 10.224.1.194 k8s-node01 <none> <none>
和step2中的那个普通pod是一个在节点1,一个在节点2.。。。
Step4
我们再次将上面实验的pod-3干掉
[root@k8s-master01 affi]# kubectl delete -f pod7.yaml
pod "pod-3" deleted
这次我们创建一个亲和性的pod且硬性亲和,但label匹配为app=node02的
[root@k8s-master01 affi]# cat pod8.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-3
labels:
app: pod-3
spec:
containers:
- name: pod-3
image: wangyanglinux/myapp:v1
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- node02
topologyKey: kubernetes.io/hostname
然后创建
[root@k8s-master01 affi]# kubectl create -f pod8.yaml
pod/pod-3 created
这次发现新创建的这个pod-3就一直处于pending的状态了
[root@k8s-master01 affi]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
node01 1/1 Running 0 23m 10.224.2.205 k8s-node02 <none> <none>
pod-3 0/1 Pending 0 69s <none> <none> <none> <none>
这是因为labels没有app=node02的
[root@k8s-master01 affi]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
node01 1/1 Running 0 27m app=node01
pod-3 0/1 Pending 0 4m47s app=pod-3
但又是硬性策略。。。
那么我们强制把这个pod名为node01的这个pod的labels修改为匹配pod-3的硬性要求的labels,则这个pod-3就能running了哈
[root@k8s-master01 affi]# kubectl label pod node01 app=node02 --overwrite=true
pod/node01 labeled
[root@k8s-master01 affi]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
node01 1/1 Running 0 29m app=node02
pod-3 1/1 Running 0 6m34s app=pod-3
关键字词:集群,调度,节点,亲和,性
上一篇:49、集群调度 节点亲和性(1)
相关文章
- 49、集群调度 节点亲和性(1)
- 14、Kubernetes - 集群安装 - 配置私有仓库、集群功能
- 13、Kubernetes - 集群安装
- 12、Kubernetes - 集群安装(内核升级)
- 11、Kubernetes - 集群安装准备 - 安装软路由(koolsha
- 10、Kubernetes - 集群安装准备 - 说明
- 12_EL_获取域中存储的值_对象值(对象值、对象属性值(通
- webman-session管理-配置文件-更換session驅動為redis
- webman-session管理-配置文件-redis集群搭建(單宿主機
- workerman常用组件-channel分佈式通訊組件-channelCli