执行以下命令创建 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,看看实际运行是什么效果吧。依次执行以下命令:
然后浏览器访问:8091/,尝试多次刷新浏览器,显示效果如下,我们发现ReplicaSet已帮我们做好了负载均衡。
假如现在网站访问量剧增,3个实例任然无法有效支撑,可以不停止应用的情况下做到水平伸缩吗?Of course, Yes!
仅需执行kubectl scale命令进行扩展即可。
从以上的输出可以看,我们一句命令就扩展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集群