• 转载-K8S动态更新pod镜像


    转载:https://www.jianshu.com/p/8c2eafc46104

    kubernetes集群中镜像有三种更新方式,无论哪一种都属于滚动式更新,在更新过程中服务不会中断

    1. 编辑已存在的yaml文件,使用apply命令更新

      以nginx镜像为例,查看现有nginx版本

      [root@k8s-node2 .ssh]# curl -I 10.10.10.4:88
      
       
       
      [root@k8s-master ~]# vim nginx-deploy.yaml
      

      编辑文件,把版本更改成1.11

       
       

      执行apply命令

      [root@k8s-master ~]# kubectl apply -f nginx-deploy.yaml
      
       
       

      查看更新发布过程

      [root@k8s-master ~]# kubectl rollout status deploy nginx-test
      

      访问验证

      [root@k8s-node1 ssh]# curl -I 10.10.10.4:88
      
       
       

      查看更新发布历史

       
       

      回滚历史版本

      [root@k8s-master ~]# kubectl rollout undo deploy nginx-test --to-     revision=7
      
       
       
    1. 直接编辑deployment内容

      查看deploy

      [root@k8s-master ~]# kubectl get deploy
      
       
       

      编辑deploy

      [root@k8s-master ~]# kubectl edit deploy nginx-test
      

      直接修改相关内容即可自动更新

       
       
    1. 使用kubectl set命令
      [root@k8s-master ~]# kubectl set image deploy nginx-test nginx=nginx:1.11
      

    # 查看集群信息
    $ kubectl cluster-info
    
    # kubeadm会自动检查当前环境是否有上次命令执行的“残留”。如果有,必须清理后再行执行init。我们可以通过”kubeadm reset”来清理环境,以备重来
    $ kubeadm reset
    
    # 获取nodes节点
    $ kubectl get nodes
    
    # 删除node节点
    $ kubectl delete node c7
    
    # 获取pods
    $ kubectl get pods --all-namespaces
    
    # 查看某个pod的状态
    $ kubectl describe pod kube-dns -n kube-system
    
    # 重新生成 token kube1
    $ kubeadm token generate
    $ kubeadm token create <generated-token> --print-join-command --ttl=24h
    
    kubectl apply -f kubernetes-dashboard.yaml 
    kubectl delete -f kubernetes-dashboard.yaml 
    # 我们发现deployment的create和apply命令都带有一个–record参数,这是告诉apiserver记录update的历史。
    # 通过kubectl rollout history可以查看deployment的update history:
    kubectl apply -f deployment-demo-v0.2.yaml --record
    kubectl rollout history deployment deployment-demo
    # Deployment下Pod的回退操作异常简单,通过rollout undo即可完成。
    # rollout undo会将Deployment回退到record中的上一个revision(见上面rollout history的输出中有revision列):
    kubectl rollout undo deployment deployment-demo
    
    # 更新svc
    kubectl replace -f xxx.yaml
    # 强制更新svc
    kubectl replace -f xxx.yaml --force
    kubectl edit
    
    # 查看详细信息(包含错误信息)
    kubectl describe pod kube-dns -n kube-system
    kubectl describe deployment deployment-demo
    
    kubectl logs kubernetes-dashboard-67589f8d6b-l7tfd -n kube-system
    kubectl delete pod prometheus-tim-3864503240-rwpq5 -n kube-system
    
    kubectl get deployment --all-namespaces
    kubectl get svc  --all-namespaces
    kubectl get pod  -o wide  --all-namespaces
    
    kubectl exec nginx-9d85d49b7-7knw6 env
    kubectl describe svc/nginx
    kubectl get all
    kubectl get rs
    kubectl get rc
    kubectl get deployments
    
    kubectl get svc,ep
    # k8s的LVS方案,内置了nginx
    kubectl get ingress
    
    # kubernetes在kubectl cli工具中仅提供了对Replication Controller的rolling-update支持,通过kubectl -help,我们可以查看到下面的命令usage描述:
    kubectl rolling-update [metadata.name] --update-period=10s -f xxx.yaml
    kubectl rolling-update hello-rc –image=index.tenxcloud.com/tailnode/hello:v2.0
    
    # 升级镜像版本
    kubectl -n default set image deployments/gateway gateway=192.168.31.149:5000/dev/core-gateway:latest
    
    
    #如果在升级过程中出现问题(比如长时间无响应),可以CTRL+C结束再使用kubectl rolling-update hello-rc –-rollback进行回滚,但如果升级完成后出现问题(比如新版本程序出core),此命令无能为力,需要使用同样方法“升级”为旧版本
    
    # kubernetes Deployment是一个更高级别的抽象,就像文章开头那幅示意图那样,Deployment会创建一个Replica Set,用来保证Deployment中Pod的副本数。
    # 由于kubectl rolling-update仅支持replication controllers,因此要想rolling-updata deployment中的Pod,你需要修改Deployment自己的manifest文件并应用。
    # 这个修改会创建一个新的Replica Set,在scale up这个Replica Set的Pod数的同时,减少原先的Replica Set的Pod数,直至zero。
    # 而这一切都发生在Server端,并不需要kubectl参与。
    
    # busybox
    kubectl exec busybox -- nslookup kube-dns.kube-system
    
    kubectl apply -f kubernetes-dashboard.yaml -f account.yaml
    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
    
    # [Kubernetes Dashboard token失效时间设置](https://blog.csdn.net/u013201439/article/details/80930285)
    kubectl edit deployment kubernetes-dashboard -n kube-system
    
    kubectl expose deployment springboot-demo-deployment --type=NodePort
    minikube service springboot-demo-deployment --url
    curl $(minikube service springboot-demo-deployment --url)/hello
    
    # configMap
    kubectl get configmap nginx-config
    kubectl get configmap nginx-config -o yaml
    kubectl edit configmap env-config
    # curl -s https://paste.ubuntu.com/p/ZmyxsHB7Xt/ |sed -n '/api/,/true/p' | sed  's@true@"true"@' | kubectl  create -f -  
    
    # 将名为foo中的pod副本数设置为3
    kubectl scale --replicas=3 rs/foo
    # 将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3
    kubectl scale --replicas=3 -f foo.yaml
    # 如果当前副本数为2,则将其扩展至3。
    kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
    # 设置多个RC中Pod副本数量。
    kubectl scale --replicas=5 rc/foo rc/bar rc/baz
    
    # 默认情况下,为了保证 master 的安全,master 是不会被调度到 app 的。你可以取消这个限制通过输入
    $ kubectl taint nodes --all node-role.kubernetes.io/master-
    
    # 修改kube-proxy访问apiserver指向keepalived的虚拟ip
    kubectl get configmap -n kube-system kube-proxy -o yaml > kube-proxy-cm.yaml
    sed -i "s#server:.*#server: https://${vip}:6443#g" kube-proxy-cm.yaml
    kubectl apply -f kube-proxy-cm.yaml --force
    kubectl delete pod -n kube-system -l k8s-app=kube-proxy
    
    kubernetes的想法是将实例紧密包装到尽可能接近100%。 所有的部署应该与CPU /内存限制固定在一起。 所以如果调度程序发送一个pod到一台机器,它不应该使用交换。 设计者不想交换,因为它会减慢速度。
    
    所以关闭swap主要是为了性能考虑。
    
    当然为了一些节省资源的场景,比如运行容器数量较多,可添加kubelet参数 --fail-swap-on=false来解决。
    
    
    关闭swap
    
    swapoff -a
    再把/etc/fstab文件中带有swap的行删了,没有就无视



    作者:GoGooGooo
    链接:https://www.jianshu.com/p/8c2eafc46104
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    使用remove_constants工具查看Oracle是否使用绑定变量
    v$sqlarea,v$sql,v$sqltext这三个视图提供的sql语句有什么区别?
    Cardinality (基数)
    分区表操作
    递归连接查询
    解决Android应用安装快完毕时提示签名冲突,android签名文件生成(转)
    Oracle的Numer类型与C,C#数据类型对应关系
    Spring学习(四)——使用Spring JDBC访问数据库
    Spring学习(三)——集成 Velocity
    Spring学习(二)——使用Gradle构建一个简单的Spring MVC Web应用程序
  • 原文地址:https://www.cnblogs.com/yaohuimo/p/14451431.html
Copyright © 2020-2023  润新知