Pod高级控制器

Pod高级控制器

  • ReplicaSet
  • Deployment
  • DaemonSet
  • Job
  • CronJob
ReplicaSet
$ cat rs-pod.yaml apiVersion: apps/v1kind: ReplicaSetmetadata:  name: rs-examplespec:  replicas: 2  selector:    matchLabels:      app: rs-demo  template:    metadata:      labels:        app: rs-demo    spec:      containers:      - name: myapp        image: myapp:v1        ports:        - name: http          containerPort: 80
$ kubectl apply -f rs-pod.yaml replicaset.apps/rs-example created
$ kubectl get podNAME               READY   STATUS    RESTARTS   AGErs-example-4r7rl   1/1     Running   0          4srs-example-hngbv   1/1     Running   0          4s# 批改其中一个pod的标签,replicaset控制器会主动保护正本数量,如果标签不存在的会变成独立pod$ kubectl label pods rs-example-4r7rl app= --overwritepod/rs-example-4r7rl labeled$ kubectl get pod --show-labels                       NAME               READY   STATUS    RESTARTS   AGE   LABELSrs-example-4r7rl   1/1     Running   0          37s   app=rs-example-54589   1/1     Running   0          9s    app=rs-demors-example-hngbv   1/1     Running   0          37s   app=rs-demo

Deployment
$ cat myapp-deploy.yaml apiVersion: apps/v1kind: Deploymentmetadata:  name: myapp-deployspec:  replicas: 3  selector:    matchLabels:      app: myapp  template:    metadata:      labels:        app: myapp    spec:      containers:      - name: myapp        image: myapp:v1        ports:        - containerPort: 80          name: http
# 通过Deployments创立pod$ kubectl apply -f myapp-deploy.yaml --recorddeployment.apps/myapp-deploy created# 查看deployment状态$ kubectl get deploymentsNAME           READY   UP-TO-DATE   AVAILABLE   AGEmyapp-deploy   3/3     3            3           11s$ kubectl describe deployments myapp-deployName:                   myapp-deployNamespace:              defaultCreationTimestamp:      Tue, 21 Jul 2020 22:19:16 +0800Labels:                 <none>Annotations:            deployment.kubernetes.io/revision: 1                        kubectl.kubernetes.io/last-applied-configuration:                          {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{"kubernetes.io/change-cause":"kubectl apply --filename=myapp-deploy...                        kubernetes.io/change-cause: kubectl apply --filename=myapp-deploy.yaml --record=trueSelector:               app=myappReplicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailableStrategyType:           RollingUpdateMinReadySeconds:        0RollingUpdateStrategy:  25% max unavailable, 25% max surgePod Template:  Labels:  app=myapp  Containers:   myapp:    Image:        myapp:v1    Port:         80/TCP    Host Port:    0/TCP    Environment:  <none>    Mounts:       <none>  Volumes:        <none>Conditions:  Type           Status  Reason  ----           ------  ------  Available      True    MinimumReplicasAvailable  Progressing    True    NewReplicaSetAvailableOldReplicaSets:  <none>NewReplicaSet:   myapp-deploy-76c6f7d88 (3/3 replicas created)Events:  Type    Reason             Age   From                   Message  ----    ------             ----  ----                   -------  Normal  ScalingReplicaSet  24s   deployment-controller  Scaled up replica set myapp-deploy-76c6f7d88 to 3  # 查看变更历史$ kubectl rollout history deployment/myapp-deploydeployment.apps/myapp-deployREVISION  CHANGE-CAUSE1         kubectl apply --filename=myapp-deploy.yaml --record=true

DaemonSet
$ cat filebeat-ds.yaml apiVersion: apps/v1kind: DaemonSetmetadata:  name: filebeat-ds  labels:    app: filebeatspec:  selector:    matchLabels:      app: filebeat  template:    metadata:      labels:        app: filebeat      name: filebeat    spec:      containers:      - name: filebeat        image: store/elastic/filebeat:7.6.2        env:        - name: REDIS_HOST          value: db.ilinux.io:6379        - name: LOG_LEVEL          value: info          $ kubectl apply -f filebeat-ds.yaml$ kubectl get daemonsetNAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGEfilebeat-ds   1         1         1       1            1           <none>          4m13s$ kubectl get pods     NAME                READY   STATUS    RESTARTS   AGEfilebeat-ds-nrzbn   1/1     Running   0          4m15s# 更新DaemonSet对象$ kubectl set image daemonsets filebeat-ds filebeat=store/elastic/filebeat:7.6.0

Job
$ cat job-example.yamlapiVersion: batch/v1kind: Jobmetadata:  name: job-examplespec:  template:    spec:      containers:      - name: myjob        image: busybox        command: ["/bin/sh", "-c", "sleep 120"]      restartPolicy: Never      $ kubectl apply -f job-example.yaml$ kubectl get jobsNAME          COMPLETIONS   DURATION   AGEjob-example   0/1           66s        66s$ kubectl describe jobs job-example Name:           job-exampleNamespace:      defaultSelector:       controller-uid=9aad5c45-d165-4824-9982-16a0e746babdLabels:         controller-uid=9aad5c45-d165-4824-9982-16a0e746babd                job-name=job-exampleAnnotations:    kubectl.kubernetes.io/last-applied-configuration:                  {"apiVersion":"batch/v1","kind":"Job","metadata":{"annotations":{},"name":"job-example","namespace":"default"},"spec":{"template":{"spec":...Parallelism:    1Completions:    1Start Time:     Tue, 07 Apr 2020 22:51:27 +0800Pods Statuses:  1 Running / 0 Succeeded / 0 FailedPod Template:  Labels:  controller-uid=9aad5c45-d165-4824-9982-16a0e746babd           job-name=job-example  Containers:   myjob:    Image:      busybox    Port:       <none>    Host Port:  <none>    Command:      /bin/sh      -c      sleep 120    Environment:  <none>    Mounts:       <none>  Volumes:        <none>Events:  Type    Reason            Age   From            Message  ----    ------            ----  ----            -------  Normal  SuccessfulCreate  94s   job-controller  Created pod: job-example-ftrb9  $ kubectl get pod -wNAME                READY   STATUS    RESTARTS   AGEjob-example-ftrb9   1/1     Running   0          104sjob-example-ftrb9   0/1     Completed   0          2m7s

并行性Job
$ cat job-multi.yamlapiVersion: batch/v1kind: Jobmetadata:  name: job-multispec:  completions: 5  template:    spec:      containers:      - name: myjob        image: alpine        command: ["/bin/sh", "-c", "sleep 20"]      restartPolicy: OnFailure      $ kubectl apply -f job-multi.yaml$ kubectl get pod -wNAME              READY   STATUS      RESTARTS   AGEjob-multi-5tcbs   0/1     Completed   0          2m17sjob-multi-bv6cg   0/1     Completed   0          3m43sjob-multi-nnskm   0/1     Completed   0          2m45sjob-multi-qp7nq   0/1     Completed   0          3m11sjob-multi-xz6dn   0/1     Completed   0          110s