node亲和性
配置节点关联性yaml文件
api版本: v1
kind: 吊舱
元数据:
name: tomcat-测试
命名空间: 的默认值
标签:
app: tomcat
规格:
集装箱:
– name: tomcat-java
端口:
– 集装箱港口: 8080
image: 先超/tomcat-8.5-jre8:v1
imagePullPolicy: 如果不存在
亲和力:
节点亲和力:
忽略所需的计划正在运行:
节点选择器术语:
– 匹配表达式:
– key: 节点角色.kubernetes.io/node1
运营商: 存在
pod亲和性
设置pod 关联性的yaml 文件通常需要指示您想要兼容的pod 的信息。以下是两个yaml 文件的信息。
api版本: v1
kind: 吊舱
元数据:
第一个名字是:
标签:
首先是app:
规格:
集装箱:
– name: 我的应用程序
image: ikubernetes/myapp:v1
imagePullPolicy: 如果不存在
api版本: v1
kind: 吊舱
元数据:
名称: 秒
标签:
app: 秒
规格:
集装箱:
– name: 我的应用程序
image: ikubernetes/myapp:v1
imagePullPolicy: 如果不存在
亲和力:
Pod 亲和力:
忽略优先级计划正在运行:
-重量: 80
podAffinityTerm:
标签选择器:
匹配表达式:
– key:应用程序
与操作员:
value: [\’第一个\’]
TopologyKey: kubernetes.io/主机名
检查两个pod 是否在同一节点上,并验证它们确实在同一节点上。
topologyKey的作用就是通过检查这个标签来判断两个节点是否相同。例如,确定亲和性时,可以查看kubernetes.io/hostname 标签,看到一个是节点1,另一个是节点2。
获取ubectl 节点–show-labels
姓名状态角色年龄版本标签
Master Ready 控制平面,Master 8d v1.23.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
节点1 就绪节点1 8d v1.23.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1, kubernetes .io /os=linux,node-role.kubernetes.io/node1=,region=us-west
节点2 就绪无8d v1.23.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=操作系统
反亲和性
配置另一个pod 永远不会成为其他pod 的节点,并设置podAntiAffinity 字段。
api版本: v1
kind: 吊舱
元数据:
名称: 秒
标签:
app: 秒
规格:
集装箱:
– name: 我的应用程序
image: ikubernetes/myapp:v1
imagePullPolicy: 如果不存在
亲和力:
podAntiAffinity:
忽略所需的计划正在运行:
-labelSelector:
匹配表达式:
– key:应用程序
与操作员:
value: [\’第一个\’]
TopologyKey: kubernetes.io/主机名
现在,如果将每个节点的标签设置为a=b,并设置topologyKey:a,由于反亲和性规则,将无处放置新的pod。
容忍污点
配置反亲和性后,您可能会遇到Pod 无法调度到任何节点并由于其他默认规则的存在而被挂起的困境。在这种情况下,您可以使用tolerations 字段。常见的污染节点包括高负载节点、特殊用途节点、维护节点等。例如,不同的受污染节点具有不同的级别和值。
NoSchedule 仅影响新安排的pod(拒绝放置)。另一方面,NoExecute 会影响已部署的Pod(它们无法正常运行)。
kubectl 污点节点节点名称key=high-load:PreferNoSchedule
最好不要安装,因为负载高。
kubectl 污点节点名称环境=test:NoSchedule
请勿部署用于测试
kubectl 污点节点节点名称专用=database:NoExecute
数据库节点(特殊用途),不部署
但是,您可以通过在yaml 文件中设置允许的值来部署它。
api版本: v1
kind: 吊舱
元数据:
名称: 秒
标签:
app: 秒
规格:
集装箱:
– name: 我的应用程序
image: ikubernetes/myapp:v1
imagePullPolicy: 如果不存在
公差范围:
– key: 节点角色.kubernetes.io/master
运营商: 存在
效果: 无时间表
亲和力:
podAntiAffinity:
忽略所需的计划正在运行:
-labelSelector:
匹配表达式:
– key:应用程序
与操作员:
value: [\’第一个\’]
TopologyKey: kubernetes.io/主机名
这个yaml的含义是增加对key等于master的不可调度节点的容忍度。这允许您在主节点上创建新的Pod(不推荐)。
如果您查看其他Kubernetes 控制器,您会发现它们具有一些关键功能并且都是关于容错性的。
kubectl 获取守护进程集kube-proxy -o yaml -n kube-system 1.yaml
[root@master yam_files]# cat 1.yaml
apiVersion: 应用程序/v1
kind:恶魔套装
元数据:
注释:
deprecated.daemonset.template. Generation: \’1\’
创建时间戳: \’2024-06-15T12:35:00Z\’
第: 代1
标签:
k8s-app: kube-代理
name: kube-proxy
命名空间: kube系统
资源版本:\’3287\’
uid: 7a0b2c38-272a-4ed9-aec5-6c2cd793064a
规格:
修订历史限制: 10
选择器:
匹配标签:
k8s-app: kube-代理
模板:
元数据:
创建时间戳: null
标签:
k8s-app: kube-代理
规格:
集装箱:
– 命令:
– /usr/local/bin/kube-proxy
– –config=/var/lib/kube-proxy/config.conf
– –主机名覆盖=$(NODE_NAME)
环境:
– 名称: NODE_NAME
起价:
现场参考号:
api版本: v1
fieldPath: 规范.nodeName
image:registry.aliyuncs.com/google_containers/kube-proxy:v1.23.1
imagePullPolicy: 如果不存在
name: kube-proxy
资源: {}
安全上下文:
特权: 正确
TerminationMessagePath: /dev/termination-log
TerminationMessagePolicy: 文件
卷安装:
-mountPath: /var/lib/kube-proxy
name: kube-proxy
-mountPath: /run/xtables.lock
name: xtables-lock
-mountPath: /lib/模块
name:库模块
readOnly: 真
dnsPolicy: 集群优先
主机网络: 正确
节点选择器:
kubernetes.io/os: Linux
priorityClassName: 系统节点关键
总是重启策略:
调度程序名称: 默认调度程序
securityContext: {}
serviceAccount: kube-proxy
服务帐户名称: kube-proxy
宽限期结束秒数: 30
公差范围:
– 运营商: 存在
给节点加污点
[root@master yam_files]# kubectl get pods -n kube-system -owide
名称就绪状态重启年龄IP 节点指定节点就绪门
calico-kube-controllers-677cd97c8d-7s9nz 1/1 运行0 8d 10.244.166.129 节点1 无无
calico-node-h6hzf 1/1 运行0 8d 100.64.252.90 主站无无
calico-node-mvgpv 1/1 运行0 8d 100.64.147.209 节点2 无无
calico-node-vd7q7 1/1 运行0 8d 100.64.212.7 节点1 无无
coredns-6d8c4cb4d-6r5tl 1/1 运行0 8d 10.244.166.131 节点1 无无
coredns-6d8c4cb4d-gnwtr 1/1 运行0 8d 10.244.166.130 节点1 无无
etcd-master 1/1 运行0 8d 100.64.252.90 主站无无
kube-apiserver-master 1/1 运行0 8d 100.64.252.90 主控无无
kube-controller-manager-master 1/1 运行0 8d 100.64.252.90 主控无无
kube-proxy-4v78m 1/1 运行0 8d 100.64.212.7 节点1 无无
kube-proxy-g8c56 1/1 运行0 8d 100.64.252.90 主控无无
kube-proxy-ln8gd 1/1 运行0 8d 100.64.147.209 节点2 无无
kube-scheduler-master 1/1 运行0 8d 100.64.252.90 主控无无
[root@master yam_files]# kubectl 污点节点node1 a=b:NoExecute
节点/节点1 被污染
[root@master yam_files]# kubectl get pods -n kube-system -owide
名称就绪状态重启年龄IP 节点指定节点就绪门
calico-kube-controllers-677cd97c8d-jbbz5 0/1 ContainerCreating 0 4s 无node2 无无
calico-node-h6hzf 1/1 运行0 8d 100.64.252.90 主站无无
calico-node-mvgpv 1/1 运行0 8d 100.64.147.209 节点2 无无
calico-node-vd7q7 1/1 运行0 8d 100.64.212.7 节点1 无无
coredns-6d8c4cb4d-6r5tl 1/1 终止0 8d 10.244.166.131 节点1 无无
coredns-6d8c4cb4d-8fxqf 0/1 ContainerCreating 0 4s 无节点2 无无
coredns-6d8c4cb4d-gnwtr 1/1 终止0 8d 10.244.166.130 节点1 无无
coredns-6d8c4cb4d-n5mrk 1/1 运行0 4s 10.244.219.66 主站无无
etcd-master 1/1 运行0 8d 100.64.252.90 主站无无
kube-apiserver-master 1/1 运行0 8d 100.64.252.90 主控无无
kube-controller-manager-master 1/1 运行0 8d 100.64.252.90 主控无无
kube-proxy-4v78m 1/1 运行0 8d 100.64.212.7 节点1 无无
kube-proxy-g8c56 1/1 运行0 8d 100.64.252.90 主控无无
kube-proxy-ln8gd 1/1 运行0 8d 100.64.147.209 节点2 无无
kube-scheduler-master 1/1 运行0 8d 100.64.252.90 主控无无
如果你在节点1上添加noExecute污点,你会看到calico的pod被转移到其他节点,并且一些pod直接停止运行。
root@master yam_files]# kubectl get pods -n kube-system -owide
名称就绪状态重启年龄IP 节点指定节点就绪门
calico-kube-controllers-677cd97c8d-jbbz5 1/1 运行0 2 分12 秒10.244.104.14 节点2 无无
calico-node-h6hzf 1/1 运行0 8d 100.64.252.90 主站无无
calico-node-mvgpv 1/1 运行0 8d 100.64.147.209 节点2 无无
calico-node-vd7q7 1/1 运行0 8d 100.64.212.7 节点1 无无
coredns-6d8c4cb4d-8fxqf 1/1 运行0 2 分12 秒10.244.104.15 节点2 无无
coredns-6d8c4cb4d-n5mrk 1/1 运行0 2 分12 秒10.244.219.66 主站无无
etcd-master 1/1 运行0 8d 100.64.252.90 主站无无
kube-apiserver-master 1/1 运行0 8d 100.64.252.90 主控无无
kube-controller-manager-master 1/1 运行0 8d 100.64.252.90 主控无无
kube-proxy-4v78m 1/1 运行0 8d 100.64.212.7 节点1 无无
kube-proxy-g8c56 1/1 运行0 8d 100.64.252.90 主控无无
kube-proxy-ln8gd 1/1 运行0 8d 100.64.147.209 节点2 无无
kube-scheduler-master 1/1 运行0 8d 100.64.252.90 主控无无
最后,可以看到calico的pod被转移到节点2,coredns被转移到master和节点2,但是kubeproxy仍然留在节点1上。如果您检查yaml 文件,您将看到容差已结束。
消除节点污点
写入kubectl节点node1。
污染: a=b: 不执行
[root@master yam_files]# kubectl 污点节点node1 a=b:NoExecute-
#【单主节点k8s部署】以上关于pod亲和/反亲和的相关内容来源于网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91972.html