ASP.NET Core 借助 K8S 玩转容器编排 (3)

执行以下命令创建 ReplicaSet,并观察自动创建的pod实例。

$ kubectl create -f k8s-net-replicaset.yaml replicaset.apps "k8s-net-replicaset" created $ kubectl get rs NAME DESIRED CURRENT READY AGE k8s-net-replicaset 3 3 3 8s $ kubectl get pod NAME READY STATUS RESTARTS AGE k8s-net-pod 1/1 Running 61 12h k8s-net-replicaset-bxw9c 1/1 Running 0 35s k8s-net-replicaset-k6kf7 1/1 Running 0 35s $ kubectl delete po k8s-net-replicaset-bxw9c pod "k8s-net-replicaset-bxw9c" deleted $ kubectl get po NAME READY STATUS RESTARTS AGE k8s-net-pod 1/1 Running 61 12h k8s-net-replicaset-bxw9c 0/1 Terminating 0 2m k8s-net-replicaset-k6kf7 1/1 Running 0 2m k8s-net-replicaset-xvb9l 1/1 Running 0 6s

从上面看到,k8s-net-replicaset以k8s-net-pod为模板创建了额外两个pod副本,当我们尝试删除其中一个副本后,再次查看pod列表,replicaset会自动帮我们重新创建一个pod。
那我们尝试把刚创建的k8s-net-replicaset暴露为Service,看看实际运行是什么效果吧。依次执行以下命令:

$ kubectl expose replicaset k8s-net-replicaset --type=LoadBalancer --port=8091 --target-port=80 --name k8s-net-rs -service service "k8s-net-rs-service" exposed $ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE k8s-net-rs-service LoadBalancer 10.99.134.237 localhost 8091:32641/TCP 8s k8s-net-service NodePort 10.104.21.80 <none> 80:30000/TCP 12h kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 12h

然后浏览器访问:8091/,尝试多次刷新浏览器,显示效果如下,我们发现ReplicaSet已帮我们做好了负载均衡。

负载均衡效果

假如现在网站访问量剧增,3个实例任然无法有效支撑,可以不停止应用的情况下做到水平伸缩吗?Of course, Yes!
仅需执行kubectl scale命令进行扩展即可。

$ kubectl get pod NAME READY STATUS RESTARTS AGE k8s-net-replicaset-g4n6g 1/1 Running 0 13m k8s-net-replicaset-lkrf7 1/1 Running 0 13m k8s-net-replicaset-tf992 1/1 Running 0 13m $ kubectl scale replicaset k8s-net-replicaset --replicas=6 replicaset.extensions "k8s-net-replicaset" scaled $ kubectl get pod NAME READY STATUS RESTARTS AGE k8s-net-replicaset-cz2bs 0/1 ContainerCreating 0 3s k8s-net-replicaset-g4n6g 1/1 Running 0 13m k8s-net-replicaset-lkrf7 1/1 Running 0 13m k8s-net-replicaset-pjl9m 0/1 ContainerCreating 0 3s k8s-net-replicaset-qpn2l 0/1 ContainerCreating 0 3s k8s-net-replicaset-tf992 1/1 Running 0 13m

从以上的输出可以看,我们一句命令就扩展pod实例到6个,是不是很简单?!

你可能又问了,我现在访问高峰过了,我怎么快速缩放应用呢?啊,和上面一样的,你把--replicas参数改小点就是了,就像这样kubectl scale replicaset k8s-net-replicaset --replicas=3。

7. 最后

本文从使用docker创建image,到使用k8s创建第一个pod,到暴露第一个Service,再到使用ReplicaSet 进行容器伸缩,基本串通了k8s的核心基础概念,从而对k8s有了基础的认知,希望对你的K8S之路有所帮助。

由于篇幅有限,笔者也是初玩,k8s的很多功能并未一一罗列,那就留着下次分享吧。
如果要问我,k8s有什么好书推荐,首推《Kubernetes In Action》,国内已经有中文版了,翻译的不错!
本文示例代码已上传至GitHub: K8S.NET.Demo

参考资料
雨夜朦胧 - Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfydg.html