Kubernetes Operation Skills

网友投稿 656 2022-10-23

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

Kubernetes Operation Skills

一、根据申明文件查看资源

root@k8s-master-01:~# kubectl get -f deploymen.yaml NAME READY UP-TO-DATE AVAILABLE AGEmydeployment   3/3     3            3           12h

二、查看资源的指定列信息

root@k8s-master-01:~# kubectl get pod -o custom-columns=NAME:metadata.name,STATUS:status.phaseNAME STATUSmydeployment-67b99bd8d7-754g2 Runningmydeployment-67b99bd8d7-cdhqf Runningmydeployment-67b99bd8d7-cjgrv Running

三、deployent的更新

3.1 replace

root@k8s-master-01:~# kubectl replace -f deploymen.yaml deployment.apps/mydeployment replacedroot@k8s-master-01:~# kubectl get pod -l app=myapp -L app NAME READY STATUS RESTARTS AGE APPmydeployment-67b99bd8d7-jvdf6 1/1 Running 0 66s myappmydeployment-67b99bd8d7-kfjq8 1/1 Running 0 66s myappmydeployment-67b99bd8d7-kltfj 1/1 Terminating 0 66s myappmydeployment-6d6dc5fb4b-m2wnb 0/1 ContainerCreating 0 1s myappmydeployment-6d6dc5fb4b-x66cg 1/1 Running 0 8s myapp

root@k8s-master-01:~# kubectl replace -f deploymen.yaml --forcedeployment.apps "mydeployment" deleteddeployment.apps/mydeployment replacedroot@k8s-master-01:~# kubectl get pod -l app=myapp -L app NAME READY STATUS RESTARTS AGE APPmydeployment-67b99bd8d7-jvdf6 1/1 Running 0 6s myappmydeployment-67b99bd8d7-kfjq8 1/1 Running 0 6s myappmydeployment-67b99bd8d7-kltfj 1/1 Running 0 6s myappmydeployment-d79f57d9d-9dc26 0/1 Terminating 0 38s myappmydeployment-d79f57d9d-sw59p 0/1 Terminating 0 38s myappmydeployment-d79f57d9d-vzxpl 0/1 Terminating 0 38s myapp

Tips:deployment类型资源replace时默认会逐个更新,第一个Pod处于running状态后再更新第二个Pod,依次类推,也就是滚动更新;当使用--force选项时,会立即将旧资源全部删除,再应用新的配置文件创建新的资源。

3.2 patch

root@k8s-master-01:~# kubectl get deployment/mydeployment -o custom-columns=NAME:metadata.name,Replicas:status.availableReplicas,minReadySeconds:spec.minReadySecondsNAME Replicas minReadySecondsmydeployment 3 5

root@k8s-master-01:~# kubectl patch deployment/mydeployment -p '{"spec":{"minReadySeconds": 10}}'deployment.apps/mydeployment patchedroot@k8s-master-01:~# kubectl get deployment/mydeployment -o custom-columns=NAME:metadata.name,Replicas:status.availableReplicas,minReadySeconds:spec.minReadySecondsNAME Replicas minReadySecondsmydeployment 3 10

Tips:patch命令的格式为JSON格式,可以对任何属性值做修改,修改minReadySeconds参数不会触发Pod重新创建。

3.3 set

root@k8s-master-01:~# kubectl set image deployment/mydeployment myapp=ikubernetes/myapp:v2deployment.apps/mydeployment image updated

root@k8s-master-01:~# kubectl get pod -l app=myapp NAME READY STATUS RESTARTS AGEmydeployment-67b99bd8d7-mdnmz 1/1 Running 0 6smydeployment-67b99bd8d7-nsjxd 1/1 Running 0 18smydeployment-6d6dc5fb4b-2wkr5 0/1 Terminating 0 11mmydeployment-6d6dc5fb4b-m2wnb 1/1 Running 0 11mmydeployment-6d6dc5fb4b-x66cg 1/1 Running 0 11m

Tips:set可以修改的属性值很少,一般用来修改镜像,更新时也是滚动更新。

3.4 scale

root@k8s-master-01:~# kubectl scale deployment/mydeployment --replicas=4deployment.apps/mydeployment scaled

3.5 rollout

root@k8s-master-01:~# kubectl get deployment/mydeployment -o custom-columns=NAME:metadata.name,Replicas:status.availableReplicas,minReadySeconds:spec.minReadySeconds,RollingStrategy:spec.strategy.type,maxSurge:spec.strategy.rollingUpdate.maxSurge,maxUnavailable:spec.strategy.rollingUpdate.maxUnavailableNAME Replicas minReadySeconds RollingStrategy maxSurge maxUnavailablemydeployment 4 10 RollingUpdate 1 0

Tips:deployment默认的更新策略为rolling update滚动更新。maxSurge:指升级过程中存在Pod数量最多比期望数量超出的个数;maxUnavailable指升级过程中正常可用的Pod副本数最多不能低于期望值得个数。

#暂停滚动升级root@k8s-master-01:~# kubectl rollout pause deployment/mydeploymentdeployment.apps/mydeployment paused#继续滚动升级root@k8s-master-01:~# kubectl rollout resume deployment/mydeploymentdeployment.apps/mydeployment resumed#查看滚动升级的状态root@k8s-master-01:~# kubectl rollout status deployment/mydeploymentWaiting for deployment "mydeployment" rollout to finish: 1 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 1 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 1 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 2 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 2 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 2 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 2 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 3 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 3 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 3 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 3 out of 4 new replicas have been updated...Waiting for deployment "mydeployment" rollout to finish: 1 old replicas are pending termination...Waiting for deployment "mydeployment" rollout to finish: 1 old replicas are pending termination...Waiting for deployment "mydeployment" rollout to finish: 1 old replicas are pending termination...deployment "mydeployment" successfully rolled out

3.6 rollout undo(回滚)

#回滚到上一个版本root@k8s-master-01:~# kubectl rollout undo deployment/mydeploymentdeployment.apps/mydeployment rolled back

#回滚到指定的历史版本root@k8s-master-01:~# kubectl rollout history deployments mydeploymentdeployment.apps/mydeployment REVISION CHANGE-CAUSE1 kubectl patch deployment/mydeployment --patch={"spec":{"minReadySeconds": 10}} --record=trueroot@k8s-master-01:~# kubectl rollout undo deployment/mydeployment --to-revision=5deployment.apps/mydeployment rolled back

Tips:为了便于回滚操作,需要在每次更新deployment是使用"--record"选项保存版本升级历史。

四、资源标签与标签选择器

#根据标签的取值赛选资源root@k8s-master-01:~# kubectl get pod -l app=myappNAME READY STATUS RESTARTS AGEmydeployment-d79f57d9d-92bqw 1/1 Running 0 2m28smydeployment-d79f57d9d-clpjd 1/1 Running 0 2m29smydeployment-d79f57d9d-fbdz6 1/1 Running 0 2m28s#已知标签,查看标签的取值root@k8s-master-01:~# kubectl get pod -L appNAME READY STATUS RESTARTS AGE APPmydeployment-d79f57d9d-92bqw 1/1 Running 0 2m35s myappmydeployment-d79f57d9d-clpjd 1/1 Running 0 2m36s myappmydeployment-d79f57d9d-fbdz6 1/1 Running 0 2m35s myapp#显示标签以及标签取值root@k8s-master-01:~# kubectl get pod --show-labelsNAME READY STATUS RESTARTS AGE LABELSmydeployment-d79f57d9d-92bqw 1/1 Running 0 2m51s app=myapp,pod-template-hash=d79f57d9dmydeployment-d79f57d9d-clpjd 1/1 Running 0 2m52s app=myapp,pod-template-hash=d79f57d9dmydeployment-d79f57d9d-fbdz6 1/1 Running 0 2m51s app=myapp,pod-template-hash=d79f57d9d#添加标签root@k8s-master-01:~# kubectl label pods/mydeployment-d79f57d9d-92bqw env=productpod/mydeployment-d79f57d9d-92bqw labeledroot@k8s-master-01:~# kubectl get pod --show-labelsNAME READY STATUS RESTARTS AGE LABELSmydeployment-d79f57d9d-92bqw 1/1 Running 0 4m11s app=myapp,env=product,pod-template-hash=d79f57d9dmydeployment-d79f57d9d-clpjd 1/1 Running 0 4m12s app=myapp,pod-template-hash=d79f57d9dmydeployment-d79f57d9d-fbdz6 1/1 Running 0 4m11s app=myapp,pod-template-hash=d79f57d9droot@k8s-master-01:~# kubectl get pod -L app,envNAME READY STATUS RESTARTS AGE APP ENVmydeployment-d79f57d9d-92bqw 1/1 Running 0 4m27s myapp productmydeployment-d79f57d9d-clpjd 1/1 Running 0 4m28s myapp mydeployment-d79f57d9d-fbdz6   1/1     Running   0          4m27s   myapp   #修改原标签值root@k8s-master-01:~# kubectl label pods/mydeployment-d79f57d9d-92bqw env=product app=tomcat --overwritepod/mydeployment-d79f57d9d-92bqw labeledroot@k8s-master-01:~# kubectl get pods/mydeployment-d79f57d9d-92bqw --show-labelsNAME READY STATUS RESTARTS AGE LABELSmydeployment-d79f57d9d-92bqw 1/1 Running 0 8m32s app=tomcat,env=product,pod-template-hash=d79f57d9d#标签选择器的逻辑组合使用root@k8s-master-01:~# kubectl get pod -l "env!=product" -L envNAME READY STATUS RESTARTS AGE ENVmydeployment-d79f57d9d-clpjd 1/1 Running 0 14m devmydeployment-d79f57d9d-fbdz6 1/1 Running 0 14m testroot@k8s-master-01:~# kubectl get pod -l "env in (product,dev)" -L envNAME READY STATUS RESTARTS AGE ENVmydeployment-d79f57d9d-92bqw 1/1 Running 0 15m productmydeployment-d79f57d9d-clpjd 1/1 Running 0 15m dev#节点选择器root@k8s-master-01:~# kubectl label nodes k8s-master-01 role=masternode/k8s-master-01 labeledroot@k8s-master-01:~# kubectl label nodes k8s-master-02 role=masternode/k8s-master-02 labeledroot@k8s-master-01:~# kubectl get nodes -l role=master -L roleNAME STATUS ROLES AGE VERSION ROLEk8s-master-01 Ready 48d v1.20.8 masterk8s-master-02 Ready 48d v1.20.8 master

五、Pod与容器的exec操作

root@k8s-master-01:~# kubectl get pod/mydeployment-d79f57d9d-92bqw -o custom-columns=NAME:metadata.name,STATUS:status.phase,CONTAINER:.spec.containers[0].name --sort-by NAMENAME STATUS CONTAINERmydeployment-d79f57d9d-92bqw Running myapp

root@k8s-master-01:~# kubectl exec -it mydeployment-d79f57d9d-92bqw -c myapp bin/shkubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead./ # ip a1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever2: tunl0@NONE: mtu 1480 qdisc noop state DOWN qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.04: eth0@if13: mtu 1480 qdisc noqueue state UP link/ether 5a:d4:fe:2c:43:09 brd ff:ff:ff:ff:ff:ff inet 172.16.151.135/32 brd 172.16.151.135 scope global eth0       valid_lft forever preferred_lft forever

Tips:如果Pod包含多个容器,需要使用选项-c CONTAINER_NMAE指定容器。

上一篇:ST维维:公司股票4月11日停牌一天,12日复牌并撤销其他风险警示
下一篇:第一观察 | 7年·14年·100年——从三个时间维度读懂这场总结表彰大会的深意
相关文章

 发表评论

暂时没有评论,来抢沙发吧~