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

不背锅运维一文搞清楚应用发布到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

娱乐圈的残酷真相,在小沈阳身上体现得淋漓尽致2009年,春晚不差钱播完,小沈阳一夜爆火。红了之后,他的商演报价,从500块钱直接涨到10万。后来,因为太火,价格再次节节攀升,在东北,身价甚至超过了刘德华。小沈阳在之后的8个月母乳的营养有人说母乳在6个月后,就没营养了,所以要添加辅食或奶粉。母乳在6个月以后就没有营养了,清透如水,宝宝就像喝水一样吃不饱,尤其一岁以后,所以要加奶粉或1岁就不必再继续母乳喂养了。还有渭南市妇幼保健院第一次拥抱分娩预演课受好评来源渭南日报通讯员孙慧璞2月14日,市妇幼保健院孕妇学校举办第一次拥抱分娩预演课程,广受准父母的好评。产房专家通过线上线下相结合的方式,向准父母介绍产房环境人员开展的特色服务,还详我不是赢家,但没输在起跑线上别让孩子输在起跑线上,就因为这句话,许多父母花钱又花精力,甚至焦头烂额,苦不堪言。有的把孩子送进高价学校,有的不惜血本抢购学区房,有的为孩子请家教,有的替孩子报读五花八门的辅导班,星际争霸夺冠有多难?李培楠0。37胜率夺冠,感动无数中国网友近日中国电竞选手李培楠在2023IEM卡托维兹站星际2夺冠的事件可以说引发了不小的热议,相信大家也都有了一个了解,回顾李培楠此次的夺冠历程绝对算得上是一个奇迹,李培楠入围积分倒数,筑牢儿童智能手表监管防火墙近年来,儿童智能手表的功能不断延伸,除了定位接打电话外,还可以微聊视频通话拍照发好友圈留言评论等,甚至内置益智游戏,又有支付功能,俨然一部微型智能手机。不少家长担心,孩子通过智能手氨基丁酸对儿童长高真有效吗?氨基丁酸对儿童长高真有效吗?氨基丁酸通常指氨基丁酸,被添加在某些青少年饮品中起到促进身体发育的作用,在对儿童长高方面,有研究表明存在一定效果,但具体效果因人而异。氨基丁酸通过刺激垂白家口往事(二)白家口地区大约相当于苏联的西伯利亚地区,企业数量不多,虽然也有省企,但是毕竟都是些小企业,最大也就是处级单位,而且是当时认为比较低端的一些建筑企业。顺着沣惠北路一路向南,越过陇海线武则天背后的成功男人唐高宗李治,开疆扩土不输秦皇汉武!一个成功女人的背后,必然有一个低调的成功男人。大唐高宗李治作为唯一的女皇帝,成功女性的代表,我认为老公说的对!大周皇帝武则天武则天,中国唯一女皇帝,风华绝代,万众瞩目,女儿身登上帝诗鬼李贺只活了27岁,短短四句诗,却惊艳了千年27岁突然暴毙,难道李贺之死,另有蹊跷?据说那首惊艳了千年的诗文里竟发现蛛丝马迹。。李贺之死诡谲可怖公元816年河南府福昌县昌谷乡,一个只有两床破棉絮和一堆旧书籍的杂乱茅屋内,二十浅谈汉朝时期近乎无敌的匈奴,是怎样处理周边国家关系的?引言中国自古以来就是一个地大物博的多民族国家。长期以来,天南海北的各少数民族求同存异,在人文风俗和传统文化上大放异彩,共同描绘了一幅华夏大地锦绣山河的画卷。其中有一支生活在北方广袤
学历高不一定能力强,学历低不一定能力差,你认同吗?学历是读出来的,能力是实践出来的。我做了10年hr,明确告诉大家逻辑思维技术工作,学历强的一定比学历差的强喝酒销售后勤领域,学历差和强的差不多。我的本意是学历差做销售类可能成才,高92年,稳定工资5600,外快每个月13万不固定,理财收入每月1。3万,极度不自信,该怎么调整?我身边有不少90后的朋友,鉴于我对他们的了解,你的情况属于比较好的。大多数的90后,没有你收益高,收入渠道也没有你全面。你完全要有自信!当然,你还可以进一步的提升自己。可以从以下几我是内蒙古人,想带孩子去广州玩,请问大家广州几月份天气最舒适?11至12月份。不冷不热,穿单衣,最多加个外套11月后到次年春节前是广州最舒适的日子,不冷不热少雨。广州的美食很多,烧鹅和盐焗乳鸽一定要吃。你是内蒙人建议你游览广州市外再到周边的海父母没有能力给孩子买房是不是很失败?农村父母和下岗工人能把孩子送上大学,己是呕心沥血家徒四壁了,如果认为他们没能力买房是人生的失败,其子女都不会承认是这样的,别人家务事只要父子母女认可理解,谁又敢烂嘴烂舌乱喷什么。再胎动在拱是胎儿在做什么?胎动在拱是胎儿在干嘛,有遇到这种情况的吗?我遇到过这种情况,特别是怀二宝的时候,感觉我家二宝的胎动跟大宝的完全不一样,怀大宝时感觉胎动就是快速且连续得鼓小包,而怀二宝时更多就是感觉柳州一日游可以选择去哪玩?可以去三江游玩。因为三江侗族是全国七个侗族自治县中侗族人口最多的一个县,境内侗族风情浓郁,交通便利,非常适合自驾游。上午驱车参观程阳八寨,周边青山绿树环境优美,首先看看程阳风雨桥雄为没有社保的父母买什么保险好?感谢邀请,更感谢楼主的提问。楼主你好,如果已经快到退休年龄,我们国家规定的退休年龄男性60周岁,女性是50周岁,如果已经过了这个年龄,或者快到这个年龄的话。那么再去购买职工社保,实通过什么方式能尽早知道自己是不是有肝硬化?大家好,我是龙医生。我来从专业角度回答这个问题,如果对我的医学科普感兴趣,敬请点击右上角关注!谢谢!一个人如果要尽早知道自己是不是有肝硬化,最准确的方式是做肝穿,也就是肝脏组织穿刺小米手机现在好用吗?如果想换小米手机,有哪些推荐?如果小米不好用,就没人会没天没日抹黑了文小伊评科技现阶段各个头部品牌的手机在体验上是没啥大的问题的。而且小米的MIUI系统在一票国产安卓定制系统中依旧可以算得上是佼佼者,在UI设计哪些疾病可以通过共用洗衣机传播?大家好,我是波波医生,现在在疾控中心从事性病艾滋病丙肝等传染病防治工作,随着生活水平的提高,洗衣机几乎成了家家户户的必需品,给我们生活带来了很多便利,同时我们也不能忽视其作为传播媒女童遭性侵后,对生理心理的伤害程度以及对成年后造成的影响有多大?初二时班里转来一个女生,长得非常漂亮,很有气质。那个年纪的小女孩大多是正在发育中,比较含胸驼背的,有些脸上会有油腻腻的长痘,或者有黑头之类的。但是她不一样。头发是自然的黑长直,脸上