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

Shela ·
更新时间:2024-11-10
· 569 次阅读

前言

从上一篇看来,我们已经对于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
增加副本数量

kubectl scale deployment --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

查看部署创建的复制集合

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           80:30857/TCP   5m33s

这里原有的服务就是将nginx 应用80端口暴露到虚拟机30857 端口下

更新应用

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

更新镜像

vi Dockerfile
FROM nginx
RUN echo '

Update Kubernetes

' > /usr/share/nginx/html/index.html
重新打包

docker build -t mynginx:v1 .

更换部署镜像
$ kubectl.exe set image 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 检查更新结果 $ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 45h mynginx NodePort 10.111.8.25 80:30857/TCP 125m

获取到暴露出的端口号:30857

回滚

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

小结

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

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


作者:Marc1999



弹性 学习笔记 学习 k8s kubernetes 容器 Docker

需要 登录 后方可回复, 如果你还没有账号请 注册新账号