在学习完上一讲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: Deploymentmetadata:name: apple-deploymentspec:replicas: 3selector: #标签选择器matchLabels:app: appletemplate:metadata:labels:app: applespec:containers:- name: apple-appimage: apple:5678ports:- 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 deploymentNAME READY UP-TO-DATE AVAILABLE AGEapple-deployment 3/3 3 3 87s
% kubectl get podsNAME 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-deploymentdeployment.apps/apple-deploymentREVISION 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 scaled
2,Job
apiVersion: batch/v1kind: Jobmetadata:name: alpine-jobspec:template:metadata:name: alpine-jobspec:restartPolicy: Nevercontainers:- name: counterimage: alpine:3.13command:- "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 created
3,CronJob
apiVersion: batch/v1kind: CronJobmetadata:name: alpine-cronjobspec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:restartPolicy: OnFailurecontainers:- name: alpine-cronjobimage: alpine:3.13args:- "bin/sh"- "-c"- "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"
CronJob里面多了个schedule 它的配置和crontab配置一样。可以用来执行周期性的任务。


文章转载自golang算法架构leetcode技术php,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




