[单master节点k8s部署]pod亲和性/反亲和性(k8s 反亲和)

[单master节点k8s部署]pod亲和性/反亲和性node亲和性
设置node亲和性的yaml文件 
apiVersion: v1
kind: Pod
metadata:name: tomcat-testnamespace: def

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

(0)
CSDN的头像CSDN
上一篇 2024年6月24日
下一篇 2024年6月24日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注