Kubernetes 1.20.5实验记录--Pod资源调度

Kubernetes 1.20.5实验记录–Pod资源调度

1.1 nodeSelector

1、添加节点标签:

kubectl label node worker1 disktype=ssd

在这里插入图片描述

2、查看节点标签:

kubectl get node --show-labels

在这里插入图片描述

3、创建Deployment:

文件nodeselector.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodeselector
spec:
  replicas: 6
  selector:
    matchLabels:
      run: nodeselector
  template:
    metadata:
      labels:
        run: nodeselector
    spec:
      containers:
      - name: nodeselector
        image: nginx
      nodeSelector:
        disktype: ssd
kubectl apply -f nodeselector.yaml

在这里插入图片描述

4、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Pod选择在标签为disktype=ssd的节点上运行

5、删除Deployment:

kubectl delete -f nodeselector.yaml

在这里插入图片描述

6、删除节点标签:

kubectl label node worker1 disktype-

在这里插入图片描述

7、查看节点标签:

kubectl get node --show-labels

在这里插入图片描述

1.2 nodeAffinity

1.2.1 硬亲和

1、创建Deployment:

文件nodeaffinity-required.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodeaffinity-required
spec:
  replicas: 6
  selector:
    matchLabels:
      run: nodeaffinity-required
  template:
    metadata:
      labels:
        run: nodeaffinity-required
    spec:
      containers:
      - name: nodeaffinity-required
        image: nginx
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/hostname
                operator: NotIn
                values:
                - worker1
kubectl apply -f nodeaffinity-required.yaml

在这里插入图片描述

2、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Pod选择在hostname不是worker1的节点上运行

3、删除Deployment:

kubectl delete -f nodeaffinity-required.yaml

在这里插入图片描述

1.2.2 软亲和

1、添加节点标签:

kubectl label node worker1 select=prefer

在这里插入图片描述

2、查看节点标签:

kubectl get node --show-labels

在这里插入图片描述

3、创建Deployment:

文件nodeaffinity-preferred.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodeaffinity-preferred
spec:
  replicas: 6
  selector:
    matchLabels:
      run: nodeaffinity-preferred
  template:
    metadata:
      labels:
        run: nodeaffinity-preferred
    spec:
      containers:
      - name: nodeaffinity-preferred
        image: nginx
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: select
                operator: In
                values:
                - prefer
kubectl apply -f nodeaffinity-preferred.yaml

在这里插入图片描述

4、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Pod优先选择在标签为select=prefer的节点上运行

5、删除Deployment:

kubectl delete -f nodeaffinity-preferred.yaml

在这里插入图片描述

6、删除节点标签:

kubectl label node worker1 select-

在这里插入图片描述

7、查看节点标签:

kubectl get node --show-labels

在这里插入图片描述

1.3 podAffinity

1.3.1 硬亲和

1、创建Pod:

kubectl run -it busybox --image=busybox --labels="run=busybox"

在这里插入图片描述

2、查看Pod状态:

kubectl get pod -o wide -l run=busybox

在这里插入图片描述

3、创建Deployment:

文件podaffinity-required.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: podaffinity-required
spec:
  replicas: 6
  selector:
    matchLabels:
      run: podaffinity-required
  template:
    metadata:
      labels:
        run: podaffinity-required
    spec:
      containers:
      - name: podaffinity-required
        image: nginx
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: run
                operator: In
                values:
                - busybox
            topologyKey: kubernetes.io/hostname
kubectl apply -f podaffinity-required.yaml

在这里插入图片描述

4、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Pod选择在带有run=busybox标签Pod运行的节点上运行

5、删除Deployment:

kubectl delete -f podaffinity-required.yaml

在这里插入图片描述

6、删除Pod:

kubectl delete pod busybox

在这里插入图片描述

1.3.2 软亲和

1、创建Pod:

kubectl run -it busybox --image=busybox --labels="run=busybox"

在这里插入图片描述

2、查看Pod状态:

kubectl get pod -o wide -l run=busybox

在这里插入图片描述

3、创建Deployment:

文件podaffinity-preferred.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: podaffinity-preferred
spec:
  replicas: 6
  selector:
    matchLabels:
      run: podaffinity-preferred
  template:
    metadata:
      labels:
        run: podaffinity-preferred
    spec:
      containers:
      - name: podaffinity-preferred
        image: nginx
      affinity:
        podAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: run
                  operator: In
                  values:
                  - busybox
              topologyKey: kubernetes.io/hostname
kubectl apply -f podaffinity-preferred.yaml

在这里插入图片描述

4、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Pod优先选择在带有run=busybox标签Pod运行的节点上运行

5、删除Deployment:

kubectl delete -f podaffinity-preferred.yaml

在这里插入图片描述

6、删除Pod:

kubectl delete pod busybox

在这里插入图片描述

1.4 podAntiAffinity

1、创建Pod:

kubectl run -it busybox --image=busybox --labels="run=busybox"

在这里插入图片描述

2、查看Pod状态:

kubectl get pod -o wide -l run=busybox

在这里插入图片描述

3、创建Deployment:

文件podantiaffinity-required.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: podantiaffinity-required
spec:
  replicas: 6
  selector:
    matchLabels:
      run: podantiaffinity-required
  template:
    metadata:
      labels:
        run: podantiaffinity-required
    spec:
      containers:
      - name: podantiaffinity-required
        image: nginx
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: run
                operator: In
                values:
                - busybox
            topologyKey: kubernetes.io/hostname
kubectl apply -f podantiaffinity-required.yaml

在这里插入图片描述

4、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Pod选择不在带有run=busybox标签Pod运行的节点上运行

5、删除Deployment:

kubectl delete -f podantiaffinity-required.yaml

在这里插入图片描述

6、删除Pod:

kubectl delete pod busybox

在这里插入图片描述

1.5 nodeFailover

1、查看节点状态:

kubectl get node

在这里插入图片描述

2、创建Deployment:

文件nodefailover.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodefailover
  labels:
    run: nodefailover
spec:
  replicas: 6
  selector:
    matchLabels:
      run: nodefailover
  template:
    metadata:
      labels:
        run: nodefailover
    spec:
      containers:
      - name: nodefailover
        image: nginx
kubectl apply -f nodefailover.yaml

在这里插入图片描述

3、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

4、Worker2故障:

kubectl get node

在这里插入图片描述

5、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Worker1上创建新Pod,故障节点Pod状态为Terminating

6、Worker2恢复:

kubectl get node

在这里插入图片描述

7、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Worker2恢复后,删除Terminating状态的Pod

8、删除Deployment:

kubectl delete -f nodefailover.yaml

在这里插入图片描述

1.6 Taints

1、添加节点污点:

kubectl taint node worker2 node-role.kubernetes.io=worker2:NoSchedule

在这里插入图片描述

Worker2标识为不可调度

2、查看节点污点:

kubectl describe node worker2

在这里插入图片描述

3、创建Deployment:

文件taints.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: taints
spec:
  replicas: 6
  selector:
    matchLabels:
      run: taints
  template:
    metadata:
      labels:
        run: taints
    spec:
      containers:
      - image: nginx
        name: taints
kubectl apply -f taints.yaml

在这里插入图片描述

4、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Pod在非Worker2节点运行

5、删除Deployment:

kubectl delete -f taints.yaml

在这里插入图片描述

6、删除节点污点:

kubectl taint node worker2 node-role.kubernetes.io-

在这里插入图片描述

1.7 Tolerations

1、添加节点污点:

kubectl taint node worker1 node-role.kubernetes.io=worker1:NoSchedule

Worker1标识为不可调度

在这里插入图片描述

2、查看节点污点:

kubectl describe node worker1

在这里插入图片描述

3、创建Deployment:

文件no-tolerations.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tolerations
  labels:
    run: tolerations
spec:
  replicas: 6
  selector:
    matchLabels:
      run: tolerations
  template:
    metadata:
      labels:
        run: tolerations
    spec:
      containers:
      - name: tolerations
        image: nginx
kubectl apply -f no-tolerations.yaml

在这里插入图片描述

4、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Pod在非Worker1节点运行

5、删除Deployment:

kubectl delete -f no-tolerations.yaml

在这里插入图片描述

6、创建Deployment:

文件tolerations.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tolerations
  labels:
    run: tolerations
spec:
  replicas: 6
  selector:
    matchLabels:
      run: tolerations
  template:
    metadata:
      labels:
        run: tolerations
    spec:
      containers:
      - name: tolerations
        image: nginx
      tolerations:
      - key: node-role.kubernetes.io
        operator: Equal
        value: worker1
        effect: NoSchedule
kubectl apply -f tolerations.yaml

在这里插入图片描述

Deployment包含tolerations配置

7、查看Pod状态:

kubectl get pod -o wide

在这里插入图片描述

Pod可在Worker1节点运行

8、删除Deployment:

kubectl delete -f tolerations.yaml

在这里插入图片描述

9、删除节点污点:

kubectl taint node worker1 node-role.kubernetes.io:NoSchedule-

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值