从上一篇看来,我们已经对于Kubernetes ,通过minikube 建立集群,而后使用kubectl 进行交互,对Deployment 部署以及服务的暴露等。这节,将学习弹性的将服务部署到多个节点上。
检查检查部署情况 kubectl get deployments
$ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE mynode 1/1 1 1 10mREADY 显示当前/所需副本的比率
UP-TO-DATE 最新显示已更新以达到所需状态的副本数
显示应用程序有多少副本可供用户使用。
AGE 启动时间
kubectl get nodes 检查当前可用节点数
$ kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 39m v1.17.2 增加副本数量kubectl scale deployment <name> --replicas=?
将部署的副本数量调节至指定大小
mrc@mrc-linux:~$ kubectl scale deployment mynode --replicas=4 deployment.apps/mynode scaledkubectl get pods 可以查看当前POD 的数量
$ kubectl get pods NAME READY STATUS RESTARTS AGE mynode-5479db549c-6n6wt 1/1 Running 0 31m mynode-5479db549c-hvpnr 1/1 Running 0 4m39s mynode-5479db549c-mzmht 1/1 Running 0 4m39s mynode-5479db549c-zwg6k 1/1 Running 0 4m39s 查看部署创建的复制集合kubectl get rs
$ kubectl get rs NAME DESIRED CURRENT READY AGE mynode-5479db549c 4 4 4 10h我们扩容到了四个,所以这里展示的有四个
查看服务状态 $ kubectl get service mynginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mynginx NodePort 10.111.8.25 <none> 80:30857/TCP 5m33s这里原有的服务就是将nginx 应用80端口暴露到虚拟机30857 端口下
更新应用在 Kubernetes 中,这些是通过滚动更新(Rolling Updates)完成的。 滚动更新 允许通过使用新的实例逐步更新 Pod 实例,零停机进行 Deployment 更新。新的 Pod 将在具有可用资源的节点上进行调度。
更新镜像 vi Dockerfile FROM nginx RUN echo '<h1>Update Kubernetes</h1>' > /usr/share/nginx/html/index.html 重新打包docker build -t mynginx:v1 .
更换部署镜像 $ kubectl.exe set image deployment <deployment> oldimage=newimagedeployment 表示需要修改的应用实例
oldimage 原本的镜像名称
newimage 新的镜像名称
$ kubectl.exe set image deployment/mynginx mynginx=mynginx:v1 deployment.apps/mynginx image updated 查看PODkubectl.exe get pods
我们会发现多出来两个POD ,当然这两个POD 是新的,将要替换掉原来老旧的POD
$ kubectl.exe get pods NAME READY STATUS RESTARTS AGE mynginx-54fdcfb5dd-h7wwl 1/1 Running 0 11s mynginx-54fdcfb5dd-jk4n4 1/1 Running 0 9s mynginx-54fdcfb5dd-m9x45 1/1 Running 0 9s mynginx-54fdcfb5dd-wbrpz 1/1 Running 0 11s mynginx-6579cc57f7-pkvgv 0/1 Terminating 0 39m mynginx-6579cc57f7-zlwzj 0/1 Terminating 0 64m 检查更新结果 $ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 45h mynginx NodePort 10.111.8.25 <none> 80:30857/TCP 125m获取到暴露出的端口号:30857
回滚其实回滚和更新是一个操作,是需要将镜像版本进行修改即可完成回滚
小结到这里,基本上docker 学习就先到一段落吧,从最开始的docker 入门开始,到接触到编排 compose 以及建立虚拟机 docker-machine 再到使用官网的docker swarm 进行集群的创建,任务的部署。走过很大段的一条路。最后我们尝试着接触一些企业里面流行的生产化容器编排 k8S
革命尚未成功,同志任需努力!