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