DOCKER 学习笔记9 Kubernetes (K8s) 弹性伸缩容器 下

DOCKER 学习笔记9 Kubernetes (K8s) 弹性伸缩容器 下

前言

从上一篇看来,我们已经对于Kubernetes ,通过minikube 建立集群,而后使用kubectl 进行交互,对Deployment 部署以及服务的暴露等。这节,将学习弹性的将服务部署到多个节点上。

检查

检查部署情况 kubectl get deployments

$ kubectl get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
mynode   1/1     1            1           10m
  • READY 显示当前/所需副本的比率
  • UP-TO-DATE 最新显示已更新以达到所需状态的副本数
  • 显示应用程序有多少副本可供用户使用。
  • AGE 启动时间

kubectl get nodes 检查当前可用节点数

$ kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   39m   v1.17.2

image.png

增加副本数量

kubectl scale deployment <name> --replicas=?

将部署的副本数量调节至指定大小

mrc@mrc-linux:~$ kubectl scale deployment mynode --replicas=4
deployment.apps/mynode scaled

kubectl 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

image.png

查看部署创建的复制集合

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 端口下

image.png

更新应用

在 Kubernetes 中,这些是通过滚动更新(Rolling Updates)完成的。 滚动更新 允许通过使用新的实例逐步更新 Pod 实例,零停机进行 Deployment 更新。新的 Pod 将在具有可用资源的节点上进行调度。

image.png

image.png

更新镜像


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=newimage
  • deployment 表示需要修改的应用实例
  • oldimage 原本的镜像名称
  • newimage 新的镜像名称
$ kubectl.exe set image deployment/mynginx mynginx=mynginx:v1                                                                                                                                                                                deployment.apps/mynginx image updated

查看POD

kubectl.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

image.png

检查更新结果

$ 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

image.png

回滚

其实回滚和更新是一个操作,是需要将镜像版本进行修改即可完成回滚

小结

到这里,基本上docker 学习就先到一段落吧,从最开始的docker 入门开始,到接触到编排 compose 以及建立虚拟机 docker-machine 再到使用官网的docker swarm 进行集群的创建,任务的部署。走过很大段的一条路。最后我们尝试着接触一些企业里面流行的生产化容器编排 k8S

革命尚未成功,同志任需努力!

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×