转载-K8S动态更新pod镜像

作者:神秘网友 发布时间:2021-02-26 10:20:12

转载-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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载-K8S动态更新pod镜像 相关文章

  1. vue中动态样式的写法

    !-- 内联样式,跟一般css添加样式相似, 多了一个绑定,样式添加通过数组方式,数组中以字符串显示 --div id="box" :class="['one','two']"{{mg}}/div!--数组中添加三元表达式,只有为true时候才起作用 -- !-- 下边这种在变换样式的时候采用 需要另外在data

  2. 如何生成干净可阅读的汇编代码

    转载:如何生成干净可阅读的汇编代码 - 泰晓科技 (tinylab.org) 新版 gcc 默认开启了几个选项,导致学习汇编语言,尤其是入门的同学,很难。 以如下代码为例: $ cat demo.c #include stdio.h int main(void) { int i; char buffer[64]; i = 1; buffer[0] =

  3. IO多路复用之select总结(转载)

    1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种

  4. 动态最小生成树 题解(线段树+归并排序)

    题目链接 题目思路 看到单点修改,区间查询其实很容易想到线段树 但是这个线段树有点特殊 线段树的每个节点代表这个区间的最小生成树的所有边,用vector存 那么每个节点最多n-1条边 你每次合并使用类似归并排序就是\(O(n)\) 如果暴力合并就是\(O(nlogn)\) 那

  5. Quartz设置动态Job

    在日常开发中,经常会遇到要设置动态job,这里做下记录。 首先建立一个QuartzManager的管理类 1 @Component("quartzManager") 2 public class QuartzManager { 3 4 //private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory(); 5 6 p

  6. DevExpress WinForms帮助文档:表单控件 - 动态更新添加到初始表单的自定义控件

    点击获取DevExpress完整版下载 DevExpress技术交流群3:700924826欢迎一起进群讨论 在此示例中,自定义进度栏控件被添加到启动屏幕。 该示例显示如何通过从启动画面管理器发送命令来动态更新此进度栏控件。启动画面由启动画面管理器在单独的线程中显示,可以

  7. MyBatis从入门到入土——动态SQL

    这是mybatis系列第10篇,没看前文的建议先去【Java冢狐】公众号中查看前文,方便理解和掌握。在上一篇中重点介绍了延迟加载、鉴别器以及继承的相关知识。 在这篇文章中我们介绍mybatis一个比较强大的功能。这个功能就是动态sql,尤其是在处理sql的拼接这块简

  8. JavaScript中this的指向

    转载地址: https://note.youdao.com/ynoteshare1/index.htmlid=b2fab3b044aa90033395df0c8c9ca3a4type=note 引子 在JavaScript中 this 的指向总是让人很困惑,它到底指的啥为了彻底弄清它,我们就来探讨一下吧。 this 在不同的执行环境,不同的用法下会有所

  9. [THUWC2022]某科学的动态仙人掌

    [THUWC2022]某科学的动态仙人掌 2月24日的模拟赛上的一道题 直接计数是肯定没法计数的,考试的时候我当时在一直想能不能类似于区间合并,想了好久感觉根本不行,就 不会了 ,听完题解之后发现这道题十分的nb,lxlnb 居然整体没法考虑,那就考虑一下每个点对他

  10. 动态代理最全详解系列[5]-Cglib动态代理源码分析

    上一篇我们对Cglib动态代理进行了代码测试,这一篇文章我们看下Cglib实现动态代理的原理,其实分析动态代理弄懂两件事就行:代理类怎么生成的、代理类方法如何调用的被代理类方法。 1 代理类的生成 首先代理类对象是调用 enhancer.create() 生成的,其中会调

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词