在學習完上一講mac 上學習k8s系列(26)ReplicationController、ReplicaSet、StatefulSet中的ReplicationSet後,學習Depolyment就非常容易了。它只是在RS中增加了如下功能:1,可以查看Deployment的升級詳細進度和狀態2,可以使用回滾操作回滾到之前的任一版本3,每一次對Deployment的操作,都能夠保存下來4,對於每一次升級都能夠隨時暫停和啟動。整體來說就是運維更方便了。Job和CronJob對應的是任務和周期性任務。還是基於前面創建的apple:5678鏡像來學習,由於該鏡像沒有裝bash,所以學習Job的時候使用的是apline:3.13
1,Deployment
apiVersion: apps/v1kind: Deployment metadata: name: apple-deployment spec: replicas: 3 selector: #標籤選擇器 matchLabels: app: apple template: metadata: labels: app: apple spec: containers: - name: apple-app image: apple:5678 ports: - containerPort: 5678中間遇到的問題
% kubectl apply -f deployment/Deployment.yamlerror: error validating "deployment/Deployment.yaml": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false原因:我們創建deployment的時候必須指定selector
% kubectl apply -f deployment/Deployment.yamldeployment.apps/apple-deployment created查看下我們的deployment和pod
% kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGEapple-deployment 3/3 3 3 87s% kubectl get pods NAME READY STATUS RESTARTS AGEapple-app 1/1 Running 18 102dapple-deployment-fb8cfb965-bnjhr 1/1 Running 0 106sapple-deployment-fb8cfb965-fftd8 1/1 Running 0 106sapple-deployment-fb8cfb965-zznjr 1/1 Running 0 106s當然,我們也可以更新鏡像和回滾鏡像
kubectl set image deployment/apple-deployment apple-app=gorse_server:latestdeployment.apps/apple-deployment image updated% kubectl rollout history deployment/apple-deployment deployment.apps/apple-deployment REVISION CHANGE-CAUSE1 <none>2 <none>更新鏡像後我們發現有兩個版本的deployment,可以回滾掉剛才的更新
% kubectl rollout undo deployment/apple-deploymentdeployment.apps/apple-deployment rolled back當然我們也可以縮放我們的pod數量
% kubectl scale deployment apple-deployment --replicas 1deployment.apps/apple-deployment scaled2,Job
apiVersion: batch/v1kind: Jobmetadata: name: alpine-jobspec: template: metadata: name: alpine-job spec: restartPolicy: Never containers: - name: counter image: alpine:3.13 command: - "bin/sh" - "-c" - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"這裡需要注意的是Job的RestartPolicy僅支持Never和OnFailure兩種,不支持Always。
% kubectl apply -f deployment/job.yamljob.batch/alpine-job created3,CronJob
apiVersion: batch/v1kind: CronJobmetadata: name: alpine-cronjobspec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: restartPolicy: OnFailure containers: - name: alpine-cronjob image: alpine:3.13 args: - "bin/sh" - "-c" - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"CronJob裡面多了個schedule 它的配置和crontab配置一樣。可以用來執行周期性的任務。