kubernetes集群编排——k8s调度

nodename

vim nodename.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx

spec:
  containers:
  - name: nginx
    image: nginx
  nodeName: k8s2

  nodeName: k8s2 #找不到节点pod会出现pending,优先级最高

kubectl apply -f nodename.yaml

kubectl get pod -o wide

回收

kubectl delete -f nodename.yaml

nodeselector

vim nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd
kubectl label  nodes k8s4 disktype=ssd

kubectl label  nodes k8s3 disktype=ssd
kubectl apply -f nodeselector.yaml

回收

kubectl delete -f nodeselector.yaml

nodeaffinity

vim nodeaffinity.yaml
apiVersion: v1
kind: Pod
metadata:
  name: node-affinity
spec:
  containers:
  - name: nginx
    image: nginx
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
           nodeSelectorTerms:
           - matchExpressions:
             - key: disktype
               operator: In
               values:
                 - ssd
                 - fc

      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: kubernetes.io/hostname
            operator: NotIn
            values:
            - k8s3
kubectl apply -f nodeaffinity.yaml
kubectl describe  pod node-affinity

kubernetes集群编排——k8s调度_第1张图片

回收

kubectl delete -f nodeaffinity.yaml

podaffinity

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

kubectl get pod -o wide

kubernetes集群编排——k8s调度_第2张图片

回收

kubectl delete -f podaffinity.yaml

podantiaffinity

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

kubectl get pod -o wide

kubernetes集群编排——k8s调度_第3张图片

回收

kubectl delete -f podantiaffinity.yaml

pod反亲和倾向满足

vim poda.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-affinity
spec:
 replicas: 3
 selector:
  matchLabels:
   app: nginx
 template:
  metadata:
   labels:
    app: nginx
  spec:
   tolerations:
   - effect: NoSchedule
     operator: Exists
   - effect: NoExecute
     operator: Exists
   containers:
   - name: nginx
     image: nginx
   affinity:
     podAntiAffinity:
       preferredDuringSchedulingIgnoredDuringExecution:
       - weight: 100
         podAffinityTerm:
           labelSelector:
             matchExpressions:
             - key: app
               operator: In
               values:
               - nginx
           topologyKey: kubernetes.io/hostname

     nodeAffinity:
       requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: disktype
                operator: In
                values:
                  - ssd
                  - sata
kubectl apply -f poda.yaml

kubectl get pod -o wide

kubernetes集群编排——k8s调度_第4张图片

回收

kubectl delete -f poda.yaml

Taints

vim taint.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
kubectl apply -f taint.yaml

kubectl get pod -o wide

设置taint

kubectl taint node k8s3 k1=v1:NoSchedule

kubectl describe nodes  k8s3 |grep Tain

kubectl scale deployment web --replicas 6

kubectl get pod -o wide

kubernetes集群编排——k8s调度_第5张图片

kubectl taint node k8s3 k1=v1:NoExecute

kubectl describe nodes  k8s3 |grep Tain

kubectl get pod -o wide

kubernetes集群编排——k8s调度_第6张图片

回收

kubectl delete  -f taint.yaml

设置 tolerations

vim taint.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 6
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      tolerations:
      - operator: Exists
        effect: NoSchedule
      containers:
      - image: nginx
        name: nginx
kubectl apply -f taint.yaml

kubectl get pod -o wide

kubernetes集群编排——k8s调度_第7张图片

回收

kubectl delete -f taint.yaml

容忍所有taints

vim taint.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 6
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      tolerations:
      - operator: Exists
      containers:
      - image: nginx
        name: nginx
kubectl apply -f taint.yaml

kubectl get pod -o wide

kubernetes集群编排——k8s调度_第8张图片

回收

kubectl delete -f taint.yaml

删除taints

kubectl taint  node k8s3 k1-

cordon、drain、delete

kubectl create deployment demo --image nginx --replicas 3

kubectl get pod -o wide

kubectl cordon k8s3

kubectl get node

kubernetes集群编排——k8s调度_第9张图片

kubectl scale deployment demo --replicas 6

kubectl get pod -o wide

kubernetes集群编排——k8s调度_第10张图片

kubectl drain k8s3 --ignore-daemonsets

kubectl get pod -o wide

kubernetes集群编排——k8s调度_第11张图片

kubectl delete nodes k8s3

kubectl get node

kubernetes集群编排——k8s调度_第12张图片

k8s3节点重启kubelet服务重新加入集群

[root@k8s3 ~]# systemctl restart kubelet

[root@k8s2 node]# kubectl get node

kubernetes集群编排——k8s调度_第13张图片

你可能感兴趣的:(kubernetes集群编排,kubernetes,容器,云原生)