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

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

接力贷重出江湖?南宁房贷年龄调至80岁!中介有银行实行,需子女担保本文来源时代周报作者特约记者陆晶琳为了落实因城施策,推进房地产销售,南宁部分银行出招了。近日,有消息称广西南宁房贷年龄期限可延长至80岁,时代周报记者向南宁一些房产中介求证后了解到国家税务总局3月1日起,6项税务证明事项实行告知承诺制转让满五唯一住房,申报免征个税将房屋土地从个人名下转至个体工商户名下,申报免征契税取得特定用途车辆,申报免征车购税3月1日起,这些税务证明事项将从证明改为承诺,使纳税人获得更多便利研究人员发现3000年前青藏高原奶制品消费证据第二次青藏科考队人类活动历史及其影响分队日前在我国综合类学术期刊ScienceBulletin(科学通报)上发表联合署名文章称,科考队员在西藏自治区日喀则市南木林县共塘遗址检测到3realme10Pro可口可乐定制版发布,背部设计让人喜爱realme10Pro可口可乐定制版发布,这个手机使用了撞色设计思路,并且屏幕边框比普通版窄了。撞色设计,摄像头区域竖向是黑色,然后剩余的部分是红色的。镜头部分是红色的边框,所以这贵州发现2。5亿年前化石库2月11日,记者从中国地质大学(武汉)获悉,该校宋海军教授团队主导,与多个国内和国际科研机构联合研究成果中生代一个新的特异埋藏化石库贵阳生物群,揭示现代类型海洋生态系统在科学杂志发老照片110年前的延安,三秦锁钥之地,和现在完全不一样延安,位于陕西省,钟灵毓秀,历史悠久。延安地理位置重要,被誉为三秦锁钥,五路襟喉。延安是红色革命根据地,延安精神代代传。菲德克克拉普1914年,美国石油地质学家菲德克克拉普来到延安光棍老哥25年前埋6瓶茅台,无儿无女打算自己喝,如今酒咋样了?有自己的藏品酒是每个喜欢喝酒的人的一大幸事,因为能够值得收藏的白酒还是比较贵的,很多人对此有心无力啊。我国最值得收藏的白酒还得是茅台酒了,有很多人对于收藏茅台酒达到了比较痴狂的地步幼儿颈部多房囊肿迅速增长交大一附院儿外科专家完美剥离阳光讯(记者郑亚雷)近日,西安交大一附院儿科成功为一名幼儿实施颈部巨大多房囊肿切除术,术后幼儿恢复良好。半年前,父母无意间发现一岁多的小叮当左颈部有一个乒乓球大小包块。虽然不疼也不(环境)火山覆雪静谧壮美初春时节,五大连池世界地质公园仍被积雪覆盖,静谧壮美。五大连池世界地质公园位于黑龙江省黑河市,地处小兴安岭山地向松嫩平原的过渡地带,境内有14座火山和5个主要火山堰塞湖,拥有保存完辽宁大连污染海滩变身网红打卡地图片由受访单位提供近日,许多大连市民欣喜地发现,高新区七贤岭森林公园一处海滩经过污染治理后,变身网红打卡地,随着气候的转暖,来此游嬉运动拍照的人流骤增。记者从高新区生态环境分局了解通海秀山梅桩笑迎客近段时间,伴着和煦的春风,通海秀山公园数百盆梅桩竞相开花吐蕊,一片春意盎然的景象,吸引不少游客前来欣赏。走进秀山公园玉皇阁,只见一盆盆梅桩,褐色的树干苍劲嶙峋,有种经历了风霜的沧桑
韦布与哈勃的对比,这篇可能讲得最清楚韦布空间望远镜经常被称为哈勃空间望远镜的替代者,但我们更愿意称其为继任者。哈勃望远镜的科学贡献促使我们着眼于更长的波段,从而可以在科研上获得更进一步的成果。船底座星云在可见光波段(将售2500元的iPhoneSE3,可能不是你想要的小屏旗舰,缺点太致命随着高通和联发科处理器的发布。在接下来的一段时间里,将会迎来国内手机发布的小高潮。现在手机厂商也开始认识到了用户对于小屏旗舰手机的需求。去年魅族凭借魅族18手机收割了一波小屏用户。法外狂徒的个人手册1法外狂徒LOL里外号男枪,对就是那个拿散弹枪那个看着很潇洒男玩家的最爱。格雷福斯小时候生活在比尔吉沃特的码头货仓小巷里,他很快就学会了打斗偷窃,还有许多受用多年的手艺。他总是能找到定了!LPL春季赛元旦后开赛,从揭幕到最后冠军,一共四大看点大家好,我是燃烧。2021年马上结束,今年LPL获得的所有荣誉也将成为历史,新年新气象,在经历了冬转之后,LPL焕然一新,即将踏上新的征程。昨天官方正式公布了2022年春季赛的开赛野蔷薇测评纯洁之花上的染血尖刺作为少有的日式社会派推理剧本,野蔷薇在故事内核上颇有白夜行的风味,再加上经典的本格推理与密室谜题,野蔷薇可以说是为玩家献上了一场彻头彻尾的东野圭吾式烧脑狂欢。尽管野蔷薇的主题是未成格斗游戏的春天,再也不会来1hr2007年,日本东京。全世界格斗游戏的最高舞台斗剧拳皇98项目决赛赛场。一个18岁的中国少年站在台上,局促的接过话筒,犹豫了一下后问旁边的翻译我要怎么说?翻译回答就说今天一定散文雪落冬深文温筱鸿进入数九日,天下雪了我想,这似乎是深冬时节到来时最恰当的语言表达吧?那些不顾寒冷的孩子们在雪地里你追我赶,玩的是不亦乐乎!路过的我,当见到此番情形的时,心里也是美滋滋的,好象突然回小屏旗舰春天要来了,小米和魅族成用户首选不知道大家发现没有,以往人们换手机第一想到的手机品牌就是苹果,而现在大家想到的都是国产品牌。如今的国产品牌无论是在工艺还是性能方面丝毫都不比苹果的差。像前段时间,小米12系列正式发从红极一时的草根歌手到无人问津,旭日阳刚最后还是走到了今天2011年的央视春晚,有个组合吸引了所有人的视线。有人说,他们必须上春晚,因为中国有两亿农民工兄弟,让全国人都能听到打工者的心声!这个组合就是旭日阳刚。这一年,他们靠着春天里火遍大7年前,因吃奶太用力,被妈妈用剪刀戳伤脸的男婴,现状让人欣喜菲菲,你得再生个二胎,你第一胎是闺女,不生第二胎说不过去啊。对着刚刚生产完的儿媳婆婆立马催生起二胎来。儿媳头胎生了女儿月子还没出呢,婆婆就想着让媳妇生二胎菲菲,你放心你尽管生,生出369和Knigt直播SOLO惜败被嘲讽左手一句话把369搞破防你不如Zoom前段时间可以说是369的至暗时刻了,在德杯被主播单杀恰逢纪录片不破不立出现,剧情中TES全员与369坐而论道,369舌战群儒,新圣经一个赛季练习不出一个纳尔也横空出世。也引起了网上