美文网首页
备战CKA每日一题——第6天

备战CKA每日一题——第6天

作者: 小E的私房菜 | 来源:发表于2020-03-11 09:13 被阅读0次

    第6题:Deployment 资源的更新:


    题目:按照以下方式创建部署:
    • 名称:nginx-app
    • 使用1.11.9-alpine版本的容器nginx
    • deploymnet应该包含3个副本
    • 使用新版本1.12.0-alpine部署应用程序,执行滚动更新并记录更新。
    • 将更新回滚到前一个版本1.11.9-alpine

    解题思路:

    本题考的是滚动更新,从1.11版rolling-update开始已弃用(请参阅CHANGELOG-1.11.md),改用rollout
    常用操作:

    kubectl set image deployment/frontend www=image:v2   # Rolling update "www" containers of "frontend" deployment, updating the image
    kubectl rollout history deployment/frontend          # Check the history of deployments including the revision 
    kubectl rollout undo deployment/frontend             # Rollback to the previous deployment
    kubectl rollout undo deployment/frontend --to-revision=2   # Rollback to a specific revision
    kubectl rollout status -w deployment/frontend        # Watch rolling update status of "frontend" deployment until completion
    kubectl rollout restart deployment/frontend          # Rolling restart of the "frontend" deployment
    
    
    # deprecated starting version 1.11
    kubectl rolling-update frontend-v1 -f frontend-v2.json   # (deprecated) Rolling update pods of frontend-v1
    kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2  # (deprecated) Change the name of the resource and update the image
    kubectl rolling-update frontend --image=image:v2         # (deprecated) Update the pods image of frontend
    kubectl rolling-update frontend-v1 frontend-v2 --rollback        # (deprecated) Abort existing rollout in progress
    
    cat pod.json | kubectl replace -f -       # Replace a pod based on the JSON passed into std
    
    # Force replace, delete and then re-create the resource. Will cause a service outage.
    kubectl replace --force -f ./pod.json
    
    # Create a service for a replicated nginx, which serves on port 80 and connects to the containers on port 8000
    kubectl expose rc nginx --port=80 --target-port=8000
    
    # Update a single-container pod's image version (tag) to v4
    kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
    
    kubectl label pods my-pod new-label=awesome                      # Add a Label
    kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq       # Add an annotation
    kubectl autoscale deployment foo --min=2 --max=10                # Auto scale a deployment "foo"
    

    具体可参考:https://kubernetes.io/docs/reference/kubectl/cheatsheet/

    解题步骤:
    • 步骤1:初始化deployment:
    sudo kubectl run nginx-app --image=nginx:1.11.9-alpine --generator=run-pod/v1 --dry-run -o yaml > nginx-app.yaml
    

    然后修改yaml文件:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        run: nginx-app
      name: nginx-app
      namespace: ns-ehj
    spec:
      replicas: 3
      selector:
        matchLabels:
          run: nginx-app
      template:
        metadata:
          labels:
            run: nginx-app
        spec:
          containers:
          - image: nginx:1.11.9-alpin
            name: nginx-app
    
    nginx-app

    此时我们来先看下nginx的版本:
    运行如下指令进入容器的TTY:

    sudo kubectl exec -it nginx-app-5b95d7d76c-6kcjp -n ns-ehj -- /bin/sh
    
    nginx -v
    • 步骤2:使用新版本1.12.0-alpine部署应用程序,执行滚动更新并记录更新,我们可以直接运行kubectl set指令:
    sudo kubectl set image deployment/nginx-app nginx-app=nginx:1.12.0-alpine -n ns-ehj
    
    此时可以发现,pod name已经全部改变,说明pod重建了。 升级image 我们进入到某个容器下看下nginx的版本: 更新后的nginx版本
    • 步骤3:将更新回滚到前一个版本1.11.9-alpine:
    sudo kubectl rollout undo deployment/nginx-app -n ns-ehj
    
    我们再来看下nginx的版本: 回滚后的Pod 可以看到nginx回到了以前的版本: nginx -v
    最后可以导出deployment的spec:
    sudo kubectl get deployment/nginx-app -n ns-ehj -o=custom-columns=NAME:spec > 7.txt
    

    相关文章

      网友评论

          本文标题:备战CKA每日一题——第6天

          本文链接:https://www.haomeiwen.com/subject/uesgdhtx.html