范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

不背锅运维一文搞清楚应用发布到k8s集群的基本流程

  1. 使用yaml文件创建资源对象❝
  每种资源的apiVersion和kind可通过 kubectl api-resources 命令进行查看
  ❞  tantianran@test-b-k8s-master:~$ kubectl api-resources | grep Deployment deployments                       deploy       apps/v1                                true         Deployment tantianran@test-b-k8s-master:~$
  goweb-demo.yaml  apiVersion: v1 kind: Namespace metadata:   name: test-a --- apiVersion: apps/v1 kind: Deployment metadata:   name: goweb-demo   namespace: test-a spec:   replicas: 10   selector:     matchLabels:       app: goweb-demo   template:     metadata:       labels:         app: goweb-demo     spec:       containers:       - name: goweb-demo         image: 192.168.11.247/web-demo/goweb-demo:20221229v3 --- apiVersion: v1 kind: Service metadata:   name: goweb-demo   namespace: test-a spec:   ports:   - port: 80     protocol: TCP     targetPort: 8090   selector:     app: goweb-demo   type: NodePort ❝
  关于标签的主要作用:标记、过滤、关联(主要体现在deployment、pod、service,3者标签保持一致),可设定多个标签,建议设定至少2个标签,一个为项目标签,一个为应用标签。
  ❞
  关于创建、更新和删除的命令  # 只用于创建 kubectl create -f xxx.yaml  # 创建和更新(需要yaml文件里的字段支持更新,并不是所有字段都支持更新) kubectl apply -f xxx.yaml  # 卸载 kubectl delete -f xxx.yaml 2. 编写yaml的套路分享套路1:可以直接手写,但容易出错  套路2:参考官方示例,然后改成自己的  套路3:通过命令行来获取,也是有2个方式,一是利用尝试运行(--dry-run)的机制再配合-o来输出一个yaml文件),二是通过get来得到yaml文件,得到yaml文件后再自行修改
  下面演示通过create来得到yaml  # 在kubectl级别上进行验证 kubectl create deployment web1 --image=nginx --replicas=5 --dry-run=client  # 指的是提交到apiserver进行验证 kubectl create deployment web1 --image=nginx --replicas=5 --dry-run=server  # 下面来一个deployment的例子,得到其他资源的yaml也是这个套路 tantianran@test-b-k8s-master:~$ kubectl create deployment web1 --image=nginx --replicas=5 --dry-run=client -o yaml apiVersion: apps/v1 kind: Deployment metadata:   creationTimestamp: null   labels:     app: web1   name: web1 spec:   replicas: 5   selector:     matchLabels:       app: web1   strategy: {}   template:     metadata:       creationTimestamp: null       labels:         app: web1     spec:       containers:       - image: nginx         name: nginx         resources: {} status: {}  # 还可以配合重定向输出到yaml文件 kubectl create deployment web1 --image=nginx --replicas=5 --dry-run=client -o yaml > test.yaml
  下面演示通过get命令来得到yaml文件,使用-o来指定yaml的格式输出,其他资源也是这个套路  kubectl get pods -n test-a -o yaml
  编写yaml的时候,字段名太多记不住或者想不起来怎么办?可以使用explain来查看字段层级  # 找第一级 kubectl explain deployment  # 找第二级 kubectl explain deployment.spec  # 再比如查pod相关的 kubectl explain pods.spec.containers 3. 应用生命周期管理❝
  deployment是最常用的k8s工作负载控制器(Workload Controllers),是k8s的一个抽象概念,用于更高级层次对象,部署和管理Pod,卡控制器还有DaemonSet、StatefulSet等。
  ❞  3.1 Deployment
  「Deployment主要功能:」  管理Pod和ReplicaSet  具有上线部署、副本设定、滚动升级、回滚等功能
  「Deployment应用场景:」  网站、API、微服务
  「Pod与控制器的关系图:」
  「应用生命周期管理流程:」
  3.2 应用部署的基本流程❝
  部署->升级->回滚->删除
  ❞  3.2.1 部署# 推荐的方式 kubectl apply -f xxx.yaml  # 或者 kubectl create deployment web --image=nginx --replicas=3
  在本示例中,部署的是我自己使用go语言写的一个很简单的web demo
  访问一下看看
  3.2.2 升级❝
  所谓的升级,其实就是更新镜像,且有3种方式,自动触发滚动升级
  ❞  # 方式1:直接修改yaml文件中的镜像,然后apply kubectl apply -f xxx.yaml # 方式2:使用命令设置deployment使用的镜像 kubectl set image deployment/web nginx=nginx1.17 # 使用系统编辑器打开进行编辑 kubectl edit deployment
  「发布方式有3种:」  滚动发布、蓝绿发布、灰度发布(金丝雀、A/B测试、冒烟测试。灰度发布是最复杂的方式,发布的方式是为了避免上线后出现的问题。)
  「K8S默认是滚动升级:」  滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。
  「滚动升级在k8s中的实现:」  它是通过1个Deployment和2个ReplicaSet来实现的,滚动更新一次只升级一小部分pod,成功后,再升级一部分pod,最终完成所有Pod升级,整个过程始终有Pod在运行,从而保证了业务的连续性。
  「ReplicaSet:」  副本集,主要维护Pod副本数量,不断对比当前Pod数量于期望Pod数量。「ReplicaSet用途:」  Deployment每次发布都会创建一个RS(ReplicaSet的缩写)作为记录,用于实现滚动升级和回滚
  可以查看deployment的详情,详情里其实是记录了升级的过程  kubectl get deployment -n test-a kubectl describe deployment goweb-demo -n test-a
  查看ReplicaSet(RS)记录(初次的部署和后续升级都会新创建一个RS,升级多少次就会创建多少个)  tantianran@test-b-k8s-master:~$ kubectl get rs -n test-a NAME                    DESIRED   CURRENT   READY   AGE goweb-demo-6fbb74fdbb   0         0         0       41m goweb-demo-7b6649f789   20        20        20      32m # 此处DESIRED和CURRENT以及READY字段有值的话,表示是当前正在使用的RS goweb-demo-8665796599   0         0         0       24h  # 查看正在使用的RS的详情 kubectl describe rs goweb-demo-7b6649f789 -n test-a ❝
  注意:升级后,旧的RS会被保留,主要用于后面回滚使用,且每次只能有一个RS在使用。
  ❞
  「当新版的镜像已经做好需要滚动更新的时候,那就要修改deployment中指定的镜像,修改的方式有2种:使用命令和直接修改yaml文件」 方式1:使用命令 # 命令格式 kubectl set image deployment  = -n   # 例子 # step 1:获取deployment kubectl get deployment -n test-a  # step 2:查看deployment详情 kubectl describe deployment goweb-demo -n test-a ... Pod Template:   Labels:  app=goweb-demo   Containers:    goweb-demo: # 容器名字     Image:        192.168.11.247/web-demo/goweb-demo:20221229v3 # 镜像     Port:              Host Port:         Environment:       Mounts:          Volumes:         ...  # step 3:设置deployment的镜像 kubectl set image deployment goweb-demo goweb-demo=192.168.11.247/web-demo/goweb-demo:20221229v3 -n test-a
  方式2:直接修改yaml(推荐)  apiVersion: apps/v1 kind: Deployment metadata:   name: goweb-demo # deployment名称   namespace: test-a spec:   replicas: 50 # 副本   selector:     matchLabels:       app: goweb-demo   template:     metadata:       labels:         app: goweb-demo     spec:       containers:       - name: goweb-demo         image: 192.168.11.247/web-demo/goweb-demo:20221229v3 # 镜像
  「水平扩缩容,也就是修改副本的数量,也有2种方式,命令和修改yaml文件」 方式1:命令 kubectl scale deployment goweb-demo --replicas=5 -n test-a
  方式2:修改yaml文件中的replicas参数,再apply  apiVersion: apps/v1 kind: Deployment metadata:   name: goweb-demo   namespace: test-a spec:   replicas: 5 #修改副本数量 ... ... 3.2.3 回滚❝
  当应用发布失败,需要回滚时。
  ❞
  查看发过有哪些版本  # 查看历史 kubectl rollout history deployment -n test-a deployment.apps/goweb-demo  REVISION  CHANGE-CAUSE 4          6          8          9           # 通过命令修改deployment的镜像进行升级时,后面加--record参数,再查看历史后就会记录这条命令 kubectl set image deployment goweb-demo goweb-demo=192.168.11.247/web-demo/goweb-demo:20221229v2 -n test-a --record Flag --record has been deprecated, --record will be removed in the future deployment.apps/goweb-demo image updated  # 上面加了--record参数,再查看历史,可以看到记录的这条命令 kubectl rollout history deployment -n test-a  deployment.apps/goweb-demo  REVISION  CHANGE-CAUSE 4          6          9          10        kubectl set image deployment goweb-demo goweb-demo=192.168.11.247/web-demo/goweb-demo:20221229v2 --namespace=test-a --record=true # 就是这里
  查看版本号和RS的对应关系,以及和镜像的对应关系  # 查看RS tantianran@test-b-k8s-master:~$ kubectl get rs -n test-a NAME                    DESIRED   CURRENT   READY   AGE goweb-demo-6fbb74fdbb   0         0         0       5h15m goweb-demo-7b6649f789   0         0         0       5h6m goweb-demo-8665796599   0         0         0       29h goweb-demo-b98869456    5         5         5       4h22m # 当前使用的RS  # 查看当前使用的RS详情 tantianran@test-b-k8s-master:~$ kubectl describe rs goweb-demo-b98869456 -n test-a ... Annotations:    deployment.kubernetes.io/desired-replicas: 5                 deployment.kubernetes.io/max-replicas: 7                 deployment.kubernetes.io/revision: 11 # 这个11就是当前版本号                 deployment.kubernetes.io/revision-history: 7,9 # 历史版本                 kubernetes.io/change-cause:                   kubectl set image deployment goweb-demo goweb-demo=192.168.11.247/web-demo/goweb-demo:20221229v3 --namespace=test-a --record=true Controlled By:  Deployment/goweb-demo Replicas:       5 current / 5 desired Pods Status:    5 Running / 0 Waiting / 0 Succeeded / 0 Failed Pod Template:   Labels:  app=goweb-demo            pod-template-hash=b98869456   Containers:    goweb-demo:     Image:        192.168.11.247/web-demo/goweb-demo:20221229v3 # 使用的镜像     Port:              Host Port:     ...  # 查看历史版本 tantianran@test-b-k8s-master:~$ kubectl rollout history deployment -n test-a deployment.apps/goweb-demo  REVISION  CHANGE-CAUSE 4          6          10        kubectl set image deployment goweb-demo goweb-demo=192.168.11.247/web-demo/goweb-demo:20221229v2 --namespace=test-a --record=true 11        kubectl set image deployment goweb-demo goweb-demo=192.168.11.247/web-demo/goweb-demo:20221229v3 --namespace=test-a --record=true # 这个REVISION是11
  通过过滤来获取到发布版本和对应的镜像  # 过滤revision和Image tantianran@test-b-k8s-master:~$ kubectl describe $(kubectl get rs -o name -n test-a | grep "goweb-") -n test-a | grep -E "revision:|Image:"                 deployment.kubernetes.io/revision: 4     Image:        192.168.11.247/web-demo/goweb-demo:20221229v1                 deployment.kubernetes.io/revision: 10     Image:        192.168.11.247/web-demo/goweb-demo:20221229v2                 deployment.kubernetes.io/revision: 6     Image:        192.168.11.247/web-demo/goweb-demo:20221228v1                 deployment.kubernetes.io/revision: 11     Image:        192.168.11.247/web-demo/goweb-demo:20221229v3 tantianran@test-b-k8s-master:~$   # 过滤更详细的,过滤revision、Image、Name、Replicas tantianran@test-b-k8s-master:~$ kubectl describe $(kubectl get rs -o name -n test-a | grep "goweb-") -n test-a | grep -E "revision:|Image:|Name:|Replicas:" Name:           goweb-demo-6fbb74fdbb                 deployment.kubernetes.io/revision: 4 Replicas:       0 current / 0 desired     Image:        192.168.11.247/web-demo/goweb-demo:20221229v1  Name:           goweb-demo-7b6649f789                 deployment.kubernetes.io/revision: 10 Replicas:       0 current / 0 desired     Image:        192.168.11.247/web-demo/goweb-demo:20221229v2  Name:           goweb-demo-8665796599                 deployment.kubernetes.io/revision: 6 Replicas:       0 current / 0 desired     Image:        192.168.11.247/web-demo/goweb-demo:20221228v1  Name:           goweb-demo-b98869456                 deployment.kubernetes.io/revision: 11 Replicas:       5 current / 5 desired     Image:        192.168.11.247/web-demo/goweb-demo:20221229v3
  只回滚到上一个版本  tantianran@test-b-k8s-master:~$ kubectl rollout undo deployment goweb-demo -n test-a deployment.apps/goweb-demo rolled back
  回滚到指定的历史版本  # 查看当前正在使用哪个版本 tantianran@test-b-k8s-master:~$ kubectl describe $(kubectl get rs -o name -n test-a | grep "goweb-") -n test-a | grep -E "revision:|Replicas:"                 deployment.kubernetes.io/revision: 4 Replicas:       0 current / 0 desired                 deployment.kubernetes.io/revision: 14 # 当前正在使用的版本,版本号14,且副本是5 Replicas:       5 current / 5 desired # 副本数量                 deployment.kubernetes.io/revision: 6 Replicas:       0 current / 0 desired                 deployment.kubernetes.io/revision: 13 Replicas:       0 current / 0 desired  # 假设要回滚到最初的版本,也就是版本号是4 tantianran@test-b-k8s-master:~$ kubectl rollout undo deployment goweb-demo --to-revision=4 -n test-a deployment.apps/goweb-demo rolled back tantianran@test-b-k8s-master:~$  3.2.4 删除(当项目需要下线时)# 如果该项目是直接编写yaml的,可这样删除(下线) kubectl delete -f goweb-demo.yaml  # 如果该项目的命名空间、deployment、service是用命令的,那就需要手动删除下线 kubectl delete deployment goweb-demo -n test-a kubectl delete svc goweb-demo -n test-a kubectl delete ns test-a 最后❝
  如需要go开发的web demo源码的朋友可私信我,一起交流,感谢!
  ❞
  本文转载于(喜欢的盆友关注我们):https://mp.weixin.qq.com/s/jBJTLYvXkCtd__yO4Ap9UA

秋日如画!黄埔靓了!满城尽开勒杜鹃金秋十月广州黄埔区4。7万米勒杜鹃在街头竞相绽放心心心阳光下的勒杜鹃格外鲜艳黄埔现有66座立体桥均种植勒杜鹃包括天桥立交桥匝道桥及隧道桥长度共计47200米揽月桥人行天桥结合周边自这么近那么美周末到河北(99)王母山层林尽染秋意浓头条带你乐享河北这么近那么美周末到河北河北文旅看图识景这么近那么美周末到河北千树万树的红叶,愈到深秋,愈加红艳远远看去,就像火焰在滚动。轻轻踩在落叶上,沙沙作响,是秋天美妙的音乐。山西这几个地方红叶美呆了正是红叶漫山时山西这11个地方的红叶美呆了!眼下这个季节,正是山西赏红叶最合适的季节。推荐山西9个赏红叶的好去处!保存下来,选个周末,约上三五好友去感受大自然的美丽吧!停车坐爱枫林直径110米重达3500吨,中国首座多元场景人行天桥在四川成都益州大道和交子大道的十字路口,中国首座多元场景人行天桥交子之环,与高达218米的天府国际金融中心双子塔交相呼应交子之环直径90米,外直径达110米,桥面周长约300米,桥东楮岛村有一片海草房,有一百多年历史了,现成了旅游的好去处东楮岛村位于山东荣城市石岛宁津街道办事处下辖村。东楮岛村,又名楮岛,楮岛。属荣成石岛宁津街道办事处,位于石岛湾省级旅游度假区的北侧,距石岛港20公里,有着优美的自然环境浓郁的地方民16000超大花海!福清这个地方颜值爆表有一个地方,可赏万平花海,观斑斓秋色,任云卷云舒。有一个地方,可遇满眼芳华,感自然之生机,任时光静静流淌。这里,正以花之名发出赏秋的邀请!别等了!带上孩子,约起朋友!去市民休闲公园海南首次在旺季发放旅游消费券秋冬游海南最高可省一半钱没有冬天的海南岛,椰风海韵更醉人,进入10月,海南将迎来传统旅游旺季。为激发海南岛内外游客旅游消费热情,吸引更多游客进岛休闲度假享受旺季海南美景,高效精准统筹疫情防控和经济社会发展知名导演拍床戏到崩溃,这电影让我笑不活了导演李安,简直要让我笑不活了hhhh咱就说,他执导的电影色戒被观众奉为神作,里面的三场激情戏,更是经典到一次又一次被拎出来解读。然而从台前来到幕后,在志云饭局上谈起当时拍摄时的情形元宇宙等于永生第二人生?开虚拟奶茶店也赚钱风口上的元宇宙,究竟是什么?直到现在依然是一个脑洞大开的概念它是虚拟时空的集合,由增强现实(AR)虚拟现实(VR)和互联网组成,实际效果类似我们看的网游小说主角戴上VR设备进入一个毛晓彤杨玏领衔主演电影以年为单位的恋爱海报,太甜蜜了?1。以年为单位海报首度曝光在本次发布的以年为单位海报中,可以看到很多细节。这张海报以杨玏饰演的男主陆川作为切入点,木子(毛晓彤饰)站在男生身后,双手紧握,表情淡然,木子表情平静,但使用好的网络电视盒子不用出门就可以看电影,赶快试一下那时候网络电视盒子不盛行,在大家伙还在看有线电视时候,小编就开始使用网络电视盒子,所以在用网络电视盒子方面小编是很有发言权的,小编踩过的雷也不少,但是这些年使用了网络电视盒子也积攒
525万,无悬念回归湖人!被紫金军寄予厚望,但你也面临离队危机在佩林卡承诺会重新为湖人打造一支争冠球队之后,湖人毫无疑问在这个休赛期给人一种雷声大雨点小的感觉,在交易得到贝弗利之前,湖人甚至没有做出任何有价值的运作。不过,最终一切都证明,湖人梅西接班人渐入佳境!今晨用风骚助攻扳平比分,队友穆帅齐夸赞北京时间今天凌晨,在意甲第3轮一场强强对话中,尤文坐镇主场迎战罗马。上半场尤文优势明显,弗拉霍维奇任意球破门,桑德罗远射打偏,洛卡特利进球被吹。中场休息时,穆帅告诉球员,为他们的表刘国梁,有了新身份WTT世界乒乓球职业大联盟(WTT世界乒联)26日宣布,任命现任WTT理事会主席刘国梁为董事会成员。WTT世界乒联表示,刘国梁此次就任WTT董事会成员,将利用自身丰富的经验,进一步恭喜姆巴佩!大巴黎强援来了,1亿变2200万,皇马捡漏失败8月28日凌晨,转会专家罗马诺指出,巴黎圣日耳曼和那不勒斯达成一致,即将引进法比安鲁伊斯。据报道,法比安鲁伊斯将和大巴黎签约5年,而他的固定转会费只有2200万欧元,绝对是超值。早利物浦以90击败伯恩茅斯利物浦在周六以90击败伯恩茅斯,追平了英超历史上最大的胜利纪录。路易斯迪亚兹和罗伯托菲尔米诺梅开二度,最终比分让利物浦成为第四支以90优势获胜的英超球队。利物浦在开场的三场比赛中都真相大白!欧洲豪门拒绝C罗,朗尼克在背后搞鬼,球迷小人夏日生活打卡季大家都知道葡萄牙巨星C罗想要离队,不过欧洲豪门都拒绝了他,现在终于真相大白了,原来是郎尼克在背后搞鬼,球迷们纷纷表示,球王实在是太难了,得罪了一个小人,现在没有豪门球湖记官宣揭秘!贝弗利做出决定,欧文180度大转弯,威少有三下家随着篮网闹剧的结束,休赛期俨然进入了另外一种画面。不过大家需要注意的是,新的签约和交易就要开始了。杜兰特让整个自由市场陷入停滞,这是大家公认的事情。不过篮网之后,就要看湖人的戏了。现役10大小前锋强如塔图姆仅排第五,维金斯第九,伦纳德第三在NBA里随着时代的变化,各个位置的球星们在球权和战术地位上也在悄然之间发生着变化,在90年代之前是中锋的时代,因此在90年代联盟有着四大中锋这四人分别是奥拉朱旺奥尼尔尤因和上将罗意甲最新积分榜AC米兰2球完胜登顶,尤文战平罗马继续不败今天凌晨,意甲联赛第3轮激战多场,AC米兰主场馆20击败博洛尼亚,登顶积分榜,莱奥和吉鲁分别破门,新援德凯特拉雷送助攻尤文主场11战平罗马,两队继续不败,弗拉霍维奇和亚伯拉罕分别破波黑男篮双加时9690击败法国队,努尔基奇戈贝尔犯满8月28日凌晨,男篮世界杯欧洲区预选赛第二阶段K组比赛,波黑队与法国队的比赛,首节波黑一度领先18分,法国队在第三节一度领先12分,结果被波黑打了200攻击波,波黑第四节一度领先1奥哈拉杰拉德是英超最伟大中场,超过兰帕德ampampamp斯科尔斯ampampamp德布劳内直播吧9月23日讯热刺名宿杰米奥哈拉今天作客talkSPORT电台,并谈到了杰拉德。奥哈拉说道对我来说,杰拉德是英超历史最佳中场,我对阵过斯科尔斯,对阵过杰拉德,也对阵过兰帕德。在