千家信息网

K8s资源对象的基本管理之使用命令行的方式(升级、回滚、扩容、缩容)

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,博文大纲:一、资源创建二、解决客户端无法访问k8s内部pod所运行的服务三、搭建私有仓库,并自定义镜像四、版本扩容、缩容五、服务的升级与回滚一、资源创建本次博文主要介绍如何使用命令行的方式创建资源![
千家信息网最后更新 2025年12月02日K8s资源对象的基本管理之使用命令行的方式(升级、回滚、扩容、缩容)

博文大纲:
一、资源创建
二、解决客户端无法访问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   AGEtest   5/5     5            5           6m26s//可以看到deployment的name是我们指定的test[root@master ~]# kubectl get replicasets.        //查看replicasets这个控制器NAME              DESIRED   CURRENT   READY   AGEtest-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 GATEStest-66cbf74d74-5tcqz   1/1     Running   0          9m33s   10.244.1.7   node01              test-66cbf74d74-6975b   1/1     Running   0          9m33s   10.244.2.3   node02              test-66cbf74d74-d7wcg   1/1     Running   0          9m33s   10.244.1.6   node01              test-66cbf74d74-d9lj6   1/1     Running   0          9m33s   10.244.1.5   node01              test-66cbf74d74-r4fmp   1/1     Running   0          9m33s   10.244.2.2   node02              //可以看到该pod的NAME就是在上面replicasets的后面又追加了一段ID

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

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

返回的信息如图:

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

返回的结果如图:

从以上创建一个pod的过程中,就可以看出当我们执行创建资源的命令后,deployment这个控制器会通过replicaset控制器去管理并创建所需的pod!

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

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

[root@master ~]# kubectl get pod -o wide         //查看pod的详细信息NAME                    READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATEStest-66cbf74d74-5tcqz   1/1     Running   0          28m   10.244.1.7   node01              test-66cbf74d74-6975b   1/1     Running   0          28m   10.244.2.3   node02              test-66cbf74d74-d7wcg   1/1     Running   0          28m   10.244.1.6   node01              test-66cbf74d74-d9lj6   1/1     Running   0          28m   10.244.1.5   node01              test-66cbf74d74-r4fmp   1/1     Running   0          28m   10.244.2.2   node02              

集群内部测试访问:

集群内部访问是没有问题,但是此时除了集群内部,外部是访问不到的,这就很伤脑筋了。不过好在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      //查看创建service的信息NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGEservice   NodePort   10.110.139.176           80:31070/TCP   35s//可以看出将部署的服务端口映射到了宿主机的31070端口

客户端访问测试:

注意:是访问群集中任意节点都可以访问k8s集群中pod所提供的服务!

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

搭建私有仓库可以参考博文:Docker搭建私有仓库(registry与Harbor)

仓库选择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.1.1:5000[root@master ~]# systemctl daemon-reload [root@master ~]# systemctl restart docker//重启docker服务使配置文件生效,node01、node02的操作一致[root@node01 ~]# scp root@master:/usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service[root@node01 ~]# systemctl daemon-reload [root@node01 ~]# systemctl restart docker//node01的操作[root@node02 ~]#  scp root@master:/usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service [root@node02 ~]# systemctl daemon-reload [root@node02 ~]# systemctl restart docker//node02的操作##############搭建私有仓库完成##################[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 lvzhenjiang:v1

" > index.html[root@master v1]# docker build -t 192.168.1.1:5000/nginx:version1 .[root@master v1]# cp Dockerfile ../v2/[root@master v1]# cp Dockerfile ../v3/[root@master v1]# echo -e "

hello lvzhenjiang:v2

" > ../v2/index.html[root@master v1]# echo -e "

hello lvzhenjiang:v3

" > ../v3/index.html[root@master v1]# cd ../v2[root@master v2]# docker build -t 192.168.1.1:5000/nginx:version2 .[root@master v2]# cd ../v3[root@master v3]# docker build -t 192.168.1.1:5000/nginx:version3 .//生成三个不同版本的镜像,在主页上进行区分[root@master v3]# docker push 192.168.1.1:5000/nginx:version1[root@master v3]# docker push 192.168.1.1:5000/nginx:version2[root@master v3]# docker push 192.168.1.1:5000/nginx:version3//将镜像上传到私有仓库中##################创建pod进行测试###################[root@master v3]# kubectl run nginx --image=192.168.1.1:5000/nginx:version1 --port=80 --replicas=4//基于自定义镜像(192.168.1.1:5000/nginx:v1)创建pod,副本数量为4个,并映射端口[root@master v3]# kubectl get pod -o wide | grep nginx | awk '{print $6}'10.244.2.1110.244.2.1010.244.1.1610.244.1.15//创建四个副本的IP地址[root@master v3]# curl 10.244.2.11

hello lvzhenjiang:v1

[root@master v3]# curl 10.244.2.10

hello lvzhenjiang:v1

//访问副本的任意IP地址都可以看到同样的页面

四、版本扩容、缩容

第一种方法:

[root@master v3]# kubectl scale deployment nginx --replicas=8//使用命令行的方式进行扩容操作(缩容也是一样的道理)[root@master v3]# kubectl get pod -o wide | grep nginx | wc -l8[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 -l6//查看副本数量

五、服务的升级与回滚

服务升级操作:

[root@master v3]# kubectl set image deployment nginx nginx=192.168.1.1:5000/nginx:version2//将nginx资源的镜像升级为192.168.1.1:5000/nginx:version2[root@master v3]# kubectl get pod -o wide | grep nginx | awk '{print $6}'10.244.1.1910.244.1.2110.244.1.2010.244.2.1410.244.2.1510.244.2.16[root@master v3]# curl 10.244.1.19

hello lvzhenjiang:v2

//可以通过测试访问的方式进行验证[root@master v3]# kubectl get deployments. nginx -o wideNAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTORnginx 6/6 6 6 18m nginx 192.168.1.1: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.1.1:5000/nginx:version3//再次升级[root@master v3]# kubectl get deployments. nginx -o wideNAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                            SELECTORnginx   6/6     6            6           20m   nginx        192.168.1.1:5000/nginx:version3   run=nginx//根据显示信息可以看出已经升级成功

服务回滚操作:

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

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

但是在k8s中回滚操作可以通过回滚到指定的版本,在以后的博文中会介绍到!

--------本文到此为止,感谢阅读--------

0