大天使之剑
作者大天使之剑·2019-06-13 11:00
售前技术支持·杭州才云科技

K8s系列之扩缩容与灰度发布

字数 5218阅读 4077评论 1赞 3

扩容和缩容

[root@master ~]# kubectl scale --replicas=5 deployment myapp
deployment.extensions/myapp scaled
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 48m
myapp-848b5b879b-6kqp2 1/1 Running 0 14m
myapp-848b5b879b-f99n4 1/1 Running 0 36s
myapp-848b5b879b-gcx2r 1/1 Running 0 36s
myapp-848b5b879b-hd5l4 1/1 Running 0 36s
myapp-848b5b879b-vg8sm 1/1 Running 0 14m
nginx-deploy-5b595999-xgh9r 1/1 Running 0 36m
[root@master ~]# kubectl scale --replicas=3 deployment myapp
deployment.extensions/myapp scaled
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 48m
myapp-848b5b879b-6kqp2 1/1 Running 0 14m
myapp-848b5b879b-f99n4 1/1 Running 0 49s
myapp-848b5b879b-hd5l4 0/1 Terminating 0 49s
myapp-848b5b879b-vg8sm 1/1 Running 0 14m
nginx-deploy-5b595999-xgh9r 1/1 Running 0 37m
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 49m
myapp-848b5b879b-6kqp2 1/1 Running 0 15m
myapp-848b5b879b-f99n4 1/1 Running 0 1m
myapp-848b5b879b-vg8sm 1/1 Running 0 15m
nginx-deploy-5b595999-xgh9r 1/1 Running 0 37m

mn7oq7vb0j

mn7oq7vb0j

滚动升级(以灰度的方式)

实现命令: kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N
[options]
[root@master ~]# kubectl describe pod myapp-848b5b879b-6kqp2
Name: myapp-848b5b879b-6kqp2
Namespace: default
Priority: 0
PriorityClassName: <none>
Node: node1/192.168.100.238
Start Time: Wed, 26 Sep 2018 16:34:16 +0800
Labels: pod-template-hash=4046164356
run=myapp
Annotations: <none>
Status: Running
IP: 10.244.1.4
Controlled By: ReplicaSet/myapp-848b5b879b
Containers:
myapp:
Container ID: docker://01867440a77bfe62a4ccfce559104852d79a5885505a78370ae2c1bfe2f08f4c
Image: ikubernetes/myapp:v1
Image ID: docker-pullable://ikubernetes/myapp@sha256:9c3dc30b5219788b2b8a4b065f548b922a34479577befb54b03330999d30d513
Port: <none>
Host Port: <none>
State: Running

找到容器名

[root@master ~]# kubectl set image deployment myapp myapp=ikubernetes/myapp:v2
deployment.extensions/myapp image updated

查看滚动升级的进度

[root@master ~]# kubectl rollout status deployment myapp
Waiting for deployment "myapp" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "myapp" rollout to finish: 1 old replicas are pending termination...
deployment "myapp" successfully rolled out

这时在客户端查看访问myapp的版本号

Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

知道滚动升级完成,则所有的版本都改为v2。查看pods名称则会发现pods名称都改变了。

未升级前

[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 49m
myapp-848b5b879b-6kqp2 1/1 Running 0 15m
myapp-848b5b879b-f99n4 1/1 Running 0 1m
myapp-848b5b879b-vg8sm 1/1 Running 0 15m
nginx-deploy-5b595999-xgh9r 1/1 Running 0 37m

升级后

[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 56m
myapp-74c94dcb8c-btnq2 1/1 Running 0 4m
myapp-74c94dcb8c-fxxpr 1/1 Running 0 4m
myapp-74c94dcb8c-gv2bz 1/1 Running 0 3m
nginx-deploy-5b595999-xgh9r 1/1 Running 0 45m

若滚动升级发现有问题需要回滚,怎么办呢?

kubectl rollout undo (TYPE NAME | TYPE/NAME) [flags] [options]

若未指定版本,则回滚至上一次更新的状态

[root@master ~]# kubectl rollout undo deployment myapp
deployment.extensions/myapp
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 1h
myapp-74c94dcb8c-btnq2 1/1 Running 0 8m
myapp-74c94dcb8c-fxxpr 1/1 Running 0 8m
myapp-74c94dcb8c-gv2bz 1/1 Running 0 8m
myapp-848b5b879b-zjzf9 0/1 ContainerCreating 0 8s
nginx-deploy-5b595999-xgh9r 1/1 Running 0 49m

在客户端上查看灰度状态

Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

因为生产环境中肯定不会去简单的run一个服务出来,这样做不到完全定制,所以这里只是简单去讨论k8s的一些特性。k8s还支持自动扩缩容,这部分需要监控系统,基于资源使用率进行弹性扩展,这里先不去研究。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

3

添加新评论1 条评论

wuwenpinwuwenpin软件开发工程师南京
2019-06-13 18:43
感谢分享!
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广