K8s资源对象管理+(升级、回滚、扩容、缩容)

网友投稿 206 2022-10-28

K8s资源对象管理+(升级、回滚、扩容、缩容)

一、资源创建

一)、资源创建的方式之一,命令的方式创建资源,理解命令运行之后的动作,通过查看资源的方式,总结Pod名称的由来。

[root@master ~]# kubectl run test --image=nginx:latest --replicas=5 //基于httpd的镜像创建一个deployment类型的控制组,名称为test,并指定副本数量为5 [root@master ~]# kubectl get deployments. //查看deployment控制器 NAME READY UP-TO-DATE AVAILABLE AGE test 5/5 5 5 6m26s //可以看到deployment的name是我们指定的test [root@master ~]# kubectl get replicasets. //查看replicasets这个控制器 NAME DESIRED CURRENT READY AGE test-66cbf74d74 5 5 5 7m50s //可以看到replicasets的NAME就是在deployment的NAME后面追加了一串ID号 [root@master ~]# kubectl get pod -o wide //查看pod的详细信息 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-66cbf74d74-2j9jr 1/1 Running 0 2m8s 10.244.1.2 node02 test-66cbf74d74-54p95 1/1 Running 0 2m8s 10.244.2.4 node01 test-66cbf74d74-5pkjs 1/1 Running 0 2m8s 10.244.2.2 node01 test-66cbf74d74-lcmdl 1/1 Running 0 2m8s 10.244.2.3 node01 test-66cbf74d74-wh574 1/1 Running 0 2m8s 10.244.1.3 node02 //可以看到该pod的NAME就是在上面replicasets的后面又追加了一段ID

也可以使用以下方法,查看控制器的详细信息!方法如下:

[root@master ~]# kubectl describe deployments. test //查看名为test控制器的详细信息

[root@master ~]# kubectl describe replicasets. test //查看replicasets控制器的详细信息

二、解决客户端无法访问k8s内部pod所运行的服务

当k8s集群创建pod完成后,集群内部是可以访问pod所提供的服务的,方法如下:

[root@master ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-66cbf74d74-2j9jr 1/1 Running 0 22m 10.244.1.2 node02 test-66cbf74d74-54p95 1/1 Running 0 22m 10.244.2.4 node01 test-66cbf74d74-5pkjs 1/1 Running 0 22m 10.244.2.2 node01 test-66cbf74d74-lcmdl 1/1 Running 0 22m 10.244.2.3 node01 test-66cbf74d74-wh574 1/1 Running 0 22m 10.244.1.3 node02 [root@master ~]# curl -I 10.244.1.2 HTTP/1.1 200 OK Server: nginx/1.19.1 Date: Wed, 12 Aug 2020 10:47:40 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 07 Jul 2020 15:52:25 GMT Connection: keep-alive ETag: "5f049a39-264" Accept-Ranges: bytes //这里显示内部访问是没有问题的

注:集群内部访问是没有问题,但是此时除了集群内部,外部是访问不到的,这就很伤脑筋了。不过好在k8s提供了完美的解决方案,实现过程如下:

[root@master ~]# kubectl run web --image=nginx:latest --port=80 --replicas=2 //创建一个名为web的deployment的资源对象,并映射容器的80端口到宿主机 [root@master ~]# kubectl expose deployment web --name=service --port=80 --type=NodePort //创建一个service(名称可以自定义),将部署web资源对象的80端口映射出来 [root@master ~]# kubectl get svc service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service NodePort 10.111.15.250 80:31293/TCP 2s //可以看出将部署的服务端口映射到了宿主机的31293端口

三、搭建私有仓库,并自定义镜像

仓库选择registry或者是Harbor都可以,为了简单起见。这里搭建registry私有仓库,方法如下:

[root@master ~]# docker run -tid --name registry -p 5000:5000 --restart always registry:latest [root@master ~]# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --insecure-registry 192.168.45.129:5000 [root@master ~]# scp /usr/lib/systemd/system/docker.service node01:/usr/lib/systemd/system/docker.service [root@master ~]# scp /usr/lib/systemd/system/docker.service node02:/usr/lib/systemd/system/docker.service //将更改完的配置文件复制到另外两台worker节点上 [root@master ~]# systemctl daemon-reload [root@master ~]# systemctl restart docker.service //另外两台worker主机也需重启docker服务

[root@master ~]# mkdir v{1,2,3} [root@master ~]# cd v1 [root@master v1]# echo -e "FROM nginx:latest\nADD index.html /usr/share/nginx/html/" > Dockerfile [root@master v1]# echo -e "hello bjq:v1" > index.html [root@master v1]# docker build -t 192.168.45.129:5000/nginx:version1 . [root@master v1]# cp Dockerfile ../v2/ [root@master v1]# cp Dockerfile ../v3/ [root@master v1]# echo -e "hello bjq:v2" > ../v2/index.html [root@master v1]# echo -e "hello bjq:v3" > ../v3/index.html [root@master v1]# cd ../v2 [root@master v2]# docker build -t 192.168.45.129:5000/nginx:version2 . [root@master v2]# cd ../v3 [root@master v3]# docker build -t 192.168.45.129:5000/nginx:version3 . //生成三个不同版本的镜像,在主页上进行区分 [root@master v3]# docker push 192.168.45.129:5000/nginx:version1 [root@master v3]# docker push 192.168.45.129:5000/nginx:version2 [root@master v3]# docker push 192.168.45.129:5000/nginx:version3 //将镜像上传到私有仓库中 ##################创建pod进行测试################### [root@master v3]# kubectl run nginx --image=192.168.45.129:5000/nginx:version1 --port=80 --replicas=4 //基于自定义镜像(192.168.45.129:5000/nginx:v1)创建pod,副本数量为4个,并映射端口 [root@master v3]# kubectl get pod -o wide | grep nginx | awk '{print $6}' 10.244.2.11 10.244.2.10 10.244.1.16 10.244.1.15 //创建四个副本的IP地址 [root@master v3]# curl 10.244.2.11 hello bjq:v1 [root@master v3]# curl 10.244.2.10 hello bjq:v1 //访问副本的任意IP地址都可以看到同样的页面

四、版本扩容、缩容

第一种方法:

[root@master v3]# kubectl scale deployment nginx --replicas=8 //使用命令行的方式进行扩容操作(缩容也是一样的道理) [root@master v3]# kubectl get pod -o wide | grep nginx | wc -l 8 [root@master v3]# kubectl get deployments. nginx -o yaml [root@master v3]# kubectl get deployments. nginx -o json //也可以将nginx资源类型已json或yaml文件格式输出(其中也可查看到副本的数量)

第二种方法:

[root@master v3]# kubectl edit deployments. nginx //编辑名为nginx的资源类型 19 spec: //找到spec字段 20 progressDeadlineSeconds: 600 21 replicas: 6 //更改副本数量 //在保存退出的一瞬间就生效了 [root@master v3]# kubectl get pod -o wide | grep nginx | wc -l 6 //查看副本数量

五、服务的升级与回滚

服务升级操作:

[root@master v3]# kubectl set image deployment nginx nginx=192.168.45.129:5000/nginx:version2 //将nginx资源的镜像升级为192.168.45.129:5000/nginx:version2 [root@master v3]# kubectl get pod -o wide | grep nginx | awk '{print $6}' 10.244.1.19 10.244.1.21 10.244.1.20 10.244.2.14 10.244.2.15 10.244.2.16 [root@master v3]# curl 10.244.1.19 hello lvzhenjiang:v2 //可以通过测试访问的方式进行验证 [root@master v3]# kubectl get deployments. nginx -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 6/6 6 6 18m nginx 192.168.45.129:5000/nginx:version2 run=nginx //可以通过查看nginx资源的信息进行查看 [root@master v3]# kubectl describe deployments. nginx //也可以通过查看nginx资源的详细信息进行查看

[root@master v3]# kubectl set image deployment nginx nginx=192.168.45.129:5000/nginx:version3 //再次升级 [root@master v3]# kubectl get deployments. nginx -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 6/6 6 6 20m nginx 192.168.45.129:5000/nginx:version3 run=nginx //根据显示信息可以看出已经升级成功

服务回滚操作:

[root@master v3]# kubectl rollout undo deployment nginx //对nginx资源进行回滚操作 [root@master v3]# kubectl get deployments. nginx -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 6/6 4 6 22m nginx 192.168.45.129:5000/nginx:version2 run=nginx //从查询结果中可以查看已经回滚到上一个版本 [root@master v3]# kubectl rollout undo deployment nginx [root@master v3]# kubectl get deployments. nginx -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 5/6 6 5 53m nginx 192.168.45.129:5000/nginx:version3 run=nginx //再次执行回滚操作,发现又回到版本3

由此可以看出在k8s集群中版本的升级、回滚操作与docker swarm中差不多一致!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:K8s资源对象管理之YAML文件的方式(升级、回滚、扩容、缩容)
下一篇:解决Spring在Thread中注入Bean无效的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~