暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mac 上学习k8s系列(27)Deployment Job CronJob

       在学习完上一讲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/v1
    kind: 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.yaml
      error: 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.yaml
        deployment.apps/apple-deployment created

        查看下我们的deployment和pod

          % kubectl get deployment                     
          NAME READY UP-TO-DATE AVAILABLE AGE
          apple-deployment 3/3 3 3 87s
             % kubectl get pods                           
            NAME READY STATUS RESTARTS AGE
            apple-app 1/1 Running 18 102d
            apple-deployment-fb8cfb965-bnjhr 1/1 Running 0 106s
            apple-deployment-fb8cfb965-fftd8 1/1 Running 0 106s
            apple-deployment-fb8cfb965-zznjr 1/1 Running 0 106s

            当然,我们也可以更新镜像和回滚镜像

              kubectl set image deployment/apple-deployment apple-app=gorse_server:latest
              deployment.apps/apple-deployment image updated
                % kubectl rollout history deployment/apple-deployment 
                deployment.apps/apple-deployment
                REVISION CHANGE-CAUSE
                1 <none>
                2 <none>

                更新镜像后我们发现有两个版本的deployment,可以回滚掉刚才的更新

                  %  kubectl rollout undo deployment/apple-deployment
                  deployment.apps/apple-deployment rolled back

                  当然我们也可以缩放我们的pod数量

                    % kubectl scale deployment apple-deployment --replicas 1
                    deployment.apps/apple-deployment scaled

                    2,Job 

                      apiVersion: batch/v1
                      kind: Job
                      metadata:
                      name: alpine-job
                      spec:
                      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.yaml
                        job.batch/alpine-job created

                        3,CronJob

                          apiVersion: batch/v1
                          kind: CronJob
                          metadata:
                          name: alpine-cronjob
                          spec:
                          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配置一样。可以用来执行周期性的任务。





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

                          评论