k8s固定pod在某一节点, node添加Label

本文介绍如何在Kubernetes中将MySQL容器固定到特定节点运行,通过为节点添加标签并更新部署配置文件实现节点亲和性设置。

基本信息

服务器: kubernetes-master-1, kubernetes-node-1, kubernetes-node-2

容器: mysql-master

配置文件: MySQL.yml

###### 省略 ######
spec:
  replicas: 1
  selector:
    matchLabels:
      name: mysql-master
  template:
    metadata:
      labels:
        name: mysql-master
    spec:
      containers:
        - name: mysql-master
          image: XXXX
          imagePullPolicy: IfNotPresent
###### 省略 ######

现在希望mysql-master能共固定在kubernetes-node-1上;

 

master-1服务器上操作

查看现有node及label:  kubectl get node --show-labels

添加label: kubectl label nodes <node-name> <label-key>=<label-value> 

kubectl label nodes kubernetes-node-1 name=node-1

删除label: kubectl label nodes <node-name> <label-key>

修改Label的值: kubectl label nodes <node-name> <label-key>=<label-value> --overwrite
 

添加之后查看现有node及label: 

 

修改配置文件: vim MySQL.yml

###### 省略 ######
spec:
  replicas: 1
  selector:
    matchLabels:
      name: mysql-master
  template:
    metadata:
      labels:
        name: mysql-master
    spec:
      nodeSelector:
          name: "node-1"  # <label-key>: <label-value> 
      containers:
        - name: mysql-master
          image: XXXX
          imagePullPolicy: IfNotPresent
###### 省略 ######

重新应用一下: kubectl apply -f MySQL.yml

完成

在Kubernetes中,Node Affinity(节点亲和性)是种调度约束,用于控制Pod可以调度到哪些节点上。通过设置Node Affinity,你可以指定Pod应该或不应该被调度到特定的节点上。 在YAML文件中,你可以通过`affinity`字段来定义Node Affinity规则。以下是个示例,展示了如何在Pod的YAML配置中添加Node Affinity: ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod 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 containers: - name: my-container image: my-image ``` 在这个例子中,`requiredDuringSchedulingIgnoredDuringExecution`部分定义了硬性要求,即Pod必须被调度到具有特定标签的节点上。在这个例子中,Pod只能被调度到标签`kubernetes.io/e2e-az-name`值为`e2e-az1`或`e2e-az2`的节点上。 `preferredDuringSchedulingIgnoredDuringExecution`部分则定义了偏好设置,即调度器会尽量满足这些条件,但如果没有符合条件的节点Pod仍然可以被调度。在这个例子中,调度器会尝试将Pod调度到标签`another-node-label-key`值为`another-node-label-value`的节点上,但如果没有这样的节点Pod也可以被调度到其他节点上。 通过这种方式,你可以灵活地控制Pod的调度策略,以满足不同的业务需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值