视频来源:B站《(2022版)最新、最全、最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:(2022版)一套教程搞定k8s安装到实战 | 汇总_COCOgsta的博客-CSDN博客
NodeAffinity:节点亲和力
- RequiredDuringSchedulingIgnoredDuringExecution:硬亲和力,既支持必须部署在指定的节点上,也支持必须不部署在指定的节点上。
- PreferredDuringSchedulingIgnoredDuringExecution:软亲和力,尽量部署在满足条件的节点上,或者是尽量不要部署在被匹配的节点。
PodAffinity:Pod亲和力
-
A应用B应用C应用,将A应用根据某种策略尽量或者部署在一块。Label
- A:app=a B:app=b
- RequiredDuringSchedulingIgnoredDuringExecution:将A应用和B应用部署在一块
- PreferredDuringSchedulingIgnoredDuringExecution:尽量将A应用和B应用部署在一块
PodAntiAffinity:Pod反亲和力
-
A应用B应用C应用,将A应用根据某种策略尽量或不部署在一块。Label
- RequiredDuringSchedulingIgnoredDuringExecution:不要将A应用与与之匹配的应用部署在一块
- PreferredDuringSchedulingIgnoredDuringExecution:尽量。。。
给节点打上label
kubectl label node k8s-node01 kubernetes.io/e2e-az-name=e2e-az1 kubectl label node k8s-node02 kubernetes.io/e2e-az-name=e2e-az2 kubectl label node k8s-node01 another-node-label-key=another-node-label-value kubectl label node k8s-master01 another-node-label-key=another-node-label-value 复制代码
编辑Deployment
spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/e2e-az-name operator: In values: - e2e-az1 - e2e-az2 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value 复制代码
In:部署在满足多个条件的节点上
NotIn:不要部署在满足这些条件的节点上
Exists:部署在具有某个存在key为指定的值的Node节点上
DoesNotExist:和Exists相反
Gt:大于指定的条件(条件为number,不能为string)
Lt:小于指定的条件
编辑Deployment,修改pod亲和性
spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: region operator: In values: - beijing topologyKey: kubernetes.io/hostname 复制代码
编辑Deployment,修改namspace的pod亲和性
spec: # 把demo-nginx和kube-system namespace下的符合label为k8s-app=calico-kube-controllers的Pod部署在同一个节点上(拓扑域) affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: k8s-app operator: In values: - calico-kube-controllers # 如果写了namespace的字段,但是留空,它是匹配所有namespace下的指定label的Pod,如果写了namespace并且制定了值,就是匹配指定namespace下的指定label的Pod。 # 如果没有写namespace,匹配当前namespace namespaces: - kube-system topologyKey: kubernetes.io/hostname 复制代码
topologyKey:拓扑域,首先说明一点,不同的key不同的value是属于不同的拓扑域。
kube-system->k8s-app=calico-kube-controllers
拓扑域划分演示:
kubectl label node k8s-master01 k8s-node01 jigui=1 kubectl label node k8s-master02 k8s-node02 jigui=2 kubectl label node k8s-master03 jigui=3 kubectl edit deploy demo-nginx spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoreDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - demo-nginx topologyKey: jigui 复制代码
扩展到4个pod,其中3个可以找到部署节点,最后一个处于pending状态,因为配置了3个拓扑域,最后一个找不到部署节点
配置为软亲和力
spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoreDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - demo-nginx topologyKey: jigui 复制代码
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/147743.html