一、实验环境:
master1\node1\node2恢复到单节点集群
二、Node1\node2上传nginx-1.25.1镜像压缩文件
[root@node1 ~]# ctr -n k8s.io images import nginx-1.25.1.tar 容器运行时导入nginx-1.25.1的镜像
unpacking docker.io/library/nginx:1.25.1 (sha256:220f06adf50c8d0dbb287301993a43e4e90721b83d4ed337780b59d51cdef48e)...done
[root@node2 ~]# ctr -n k8s.io images import nginx-1.25.1.tar 容器运行时导入nginx-1.25.1的镜像
unpacking docker.io/library/nginx:1.25.1 (sha256:220f06adf50c8d0dbb287301993a43e4e90721b83d4ed337780b59d51cdef48e)...done
三、在master1节点上创建无状态服务的nginx,镜像版本是nginx:1.21.6
[root@master1 ~]# kubectl create deployment nginx --image=docker.io/library/nginx:1.21.6
创建无状态服务的nginx,镜像版本是nginx:1.21.6
deployment.apps/nginx created
[root@master1 ~]# kubectl get deployments.apps 查看无状态apps的信息
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 19s
[root@master1 ~]# kubectl get rs 查看副本集 replayside(无状态就会生成副本集)
NAME DESIRED CURRENT READY AGE
nginx-6d55555679 1 1 1 31s
[root@master1 ~]# kubectl get pod 查看pod信息 查看pod信息
NAME READY STATUS RESTARTS AGE
nginx-6d55555679-qclww 1/1 Running 0 34s
[root@master1 ~]#
四、将nginx扩容,副本数为2
[root@master1 ~]# kubectl get pod -o wide 查看pod详细信息
NAME READY STATUS RESTARTS AGE IP NOD E NOMINATED NODE READINESS GATES
nginx-6d55555679-qclww 1/1 Running 0 3m53s 10.244.104.3 nod e2 <none> <none>
[root@master1 ~]# kubectl scale deployment nginx --replicas=2 将nginx扩容,副本数为2
deployment.apps/nginx scaled
[root@master1 ~]# kubectl get pod 查看pod信息 查看副本数,副本数为2
NAME READY STATUS RESTARTS AGE
nginx-6d55555679-qclww 1/1 Running 0 4m49s
nginx-6d55555679-v2tzl 1/1 Running 0 10s
[root@master1 ~]# kubectl get pod 查看pod信息 -o wide 查看详细信息(分配的节点是随机的)
NAME READY STATUS RESTARTS AGE IP NO DE NOMINATED NODE READINESS GATES
nginx-6d55555679-qclww 1/1 Running 0 5m4s 10.244.104.3 no de2 <none> <none>
nginx-6d55555679-v2tzl 1/1 Running 0 25s 10.244.166.129 no de1 <none> <none>
[root@master1 ~]#
五、创建nginx的集群IP服务,并建立端口映射,宿主机的80映射到容器的80
[root@master1 ~]# kubectl create service clusterip nginx --tcp=80:80
创建nginx的集群IP服务,并建立端口映射,宿主机的80映射到容器的80
service/nginx created
[root@master1 ~]#
[root@master1 ~]# kubectl get svc 查看集群服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d23h 只有k8s的集群,没有nginx的服务
nginx ClusterIP 10.106.200.83 <none> 80/TCP 9s
[root@master1 ~]#
[root@master1 ~]# kubectl get pod -o wide查看pod详细信息
NAME READY STATUS RESTARTS AGE IP N ODE NOMINATED NODE READINESS GATES
nginx-6d55555679-qclww 1/1 Running 0 8m9s 10.244.104.3 n ode2 <none> <none>
nginx-6d55555679-v2tzl 1/1 Running 0 3m30s 10.244.166.129 n ode1 <none> <none>
[root@master1 ~]#
六、分别进俩容器里,创建测试页面及访问集群的IP:
[root@master1 ~]# kubectl exec -it nginx-6d55555679-qclww -- bash 进入第一个容器里
root@nginx-6d55555679-qclww:/# echo "111" > /usr/share/nginx/html/index.html 创建111的测试页面
root@nginx-6d55555679-qclww:/# exit
exit
[root@master1 ~]# kubectl exec -it nginx-6d55555679-v2tzl -- bash 进入第二个容器里
root@nginx-6d55555679-v2tzl:/# echo "222" > /usr/share/nginx/html/index.html 创建222的测试页面
root@nginx-6d55555679-v2tzl:/# exit
exit
[root@master1 ~]#
[root@master1 ~]# kubectl get svc -o wide 查看集群IP的详细信息
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d23h <none>
nginx ClusterIP 10.105.134.86 <none> 80/TCP 2m28s app=nginx
[root@master1 ~]#
[root@master1 ~]# curl 10.106.200.83 访问集群的IP
111
[root@master1 ~]# curl 10.106.200.83 访问集群的IP(轮询
222
七、查看原版本信息:nginx/1.21.6

八、升级nginx版本:
[root@master1 ~]# kubectl set image deployment/nginx nginx=docker.io/library/ngi nx:1.21.6 --record 将无状态的nginx镜像1.21.6打标记
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx image updated
[root@master1 ~]#
[root@node1 ~]# ctr -n k8s.io images ls | grep nginx 容器运行时查看nginx版本信息
docker.io/library/nginx:1.21.6 nginx:1.21.6 application/vnd.docker.di stribution.manifest.v2+json sha256:94b808e393739b5363decf631a746d0241083d40 eb05f07200a6d1c0c16f54b8 139.2 MiB linux/amd64 io.cri-containerd.image=managed
docker.io/library/nginx:1.25.1 nginx:1.25.1 application/vnd.docker.di stribution.manifest.v2+json sha256:220f06adf50c8d0dbb287301993a43e4e90721b8 3d4ed337780b59d51cdef48e 182.2 MiB linux/amd64 io.cri-containerd.image=managed
[root@node1 ~]#
[root@node2 ~]# ctr -n k8s.io images ls | grep nginx 容器运行时查看nginx版本信息
docker.io/library/nginx:1.21.6 nginx:1.21.6 application/vnd.docker.di stribution.manifest.v2+json sha256:94b808e393739b5363decf631a746d0241083d40 eb05f07200a6d1c0c16f54b8 139.2 MiB linux/amd64 io.cri-containerd.image=managed
docker.io/library/nginx:1.25.1 nginx:1.25.1 application/vnd.docker.di stribution.manifest.v2+json sha256:220f06adf50c8d0dbb287301993a43e4e90721b8 3d4ed337780b59d51cdef48e 182.2 MiB linux/amd64 io.cri-containerd.image=managed
[root@node2 ~]#
九、动态查看nginx信息
[root@master1 ~]# kubectl get pod 查看pod信息 -w
NAME READY STATUS RESTARTS AGE
nginx-6d55555679-qclww 1/1 Running 0 23m
nginx-6d55555679-v2tzl 1/1 Running 0 19m
^C[root@master1 ~]#
[root@master1 ~]# kubectl set image deployment/nginx nginx=docker.io/library/ngi nx:1.25.1 --record 将无状态的nginx镜像1.25.1打标记
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx image updated
[root@master1 ~]# kubectl get pod -w 动态查看nginx信息
NAME READY STATUS RESTARTS AGE
nginx-76b6fcbc46-gz4hm 1/1 Running 0 16s
nginx-76b6fcbc46-j9k4s 1/1 Running 0 14s
^C[root@master1 ~]# kubectl get pod 查看pod信息
NAME READY STATUS RESTARTS AGE
nginx-76b6fcbc46-gz4hm 1/1 Running 0 21s
nginx-76b6fcbc46-j9k4s 1/1 Running 0 19s
[root@master1 ~]# kubectl get pod -w 动态查看nginx信息
NAME READY STATUS RESTARTS AGE
nginx-76b6fcbc46-gz4hm 1/1 Running 0 56s
nginx-76b6fcbc46-j9k4s 1/1 Running 0 54s
十、查看nginx的使用版本
[root@master1 ~]# curl 10.106.200.83/1 #访问集群IP的错误页面
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.25.1</center> #能查看nginx的使用版本
</body>
</html>
[root@master1 ~]#
十一、查看副本及无状态nginx的详细信息
[root@master1 ~]# kubectl get rs 查看副本
NAME DESIRED CURRENT READY AGE
nginx-6d55555679 0 0 0 42m
nginx-76b6fcbc46 2 2 2 17m
[root@master1 ~]# kubectl describe deployment.apps nginx 查看无状态nginx的详细信息
Name: nginx
Namespace: default
CreationTimestamp: Tue, 24 Jun 2025 16:04:14 +0800
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 2
kubernetes.io/change-cause: kubectl set image deployment /nginx nginx=docker.io/library/nginx:1.25.1 --record=true
Selector: app=nginx
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavai lable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: docker.io/library/nginx:1.25.1
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Node-Selectors: <none>
Tolerations: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: nginx-6d55555679 (0/0 replicas created)
NewReplicaSet: nginx-76b6fcbc46 (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 43m deployment-controller Scaled up replica set nginx-6d55555679 to 1
Normal ScalingReplicaSet 38m deployment-controller Scaled up replica set nginx-6d55555679 to 2 from 1
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 43m deployment-controller Scaled up replica set nginx-6d55555679 to 1
Normal ScalingReplicaSet 38m deployment-controller Scaled up replica set nginx-6d55555679 to 2 from 1
Normal ScalingReplicaSet 18m deployment-controller Scaled up replica set nginx-76b6fcbc46 to 1
Normal ScalingReplicaSet 18m deployment-controller Scaled down replica se t nginx-6d55555679 to 1 from 2
Normal ScalingReplicaSet 18m deployment-controller Scaled up replica set nginx-76b6fcbc46 to 2 from 1
Normal ScalingReplicaSet 18m deployment-controller Scaled down replica se t nginx-6d55555679 to 0 from 1
[root@master1 ~]# kubectl get svc 查看服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d23h
nginx ClusterIP 10.106.200.83 <none> 80/TCP 36m
[root@master1 ~]# curl 10.106.200.83/1
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.25.1</center>
</body>
</html>
[root@master1 ~]#
十二、回滚版本:
[root@master1 ~]# kubectl rollout history deployment nginx 查看无状态ningx回滚的历史记录
deployment.apps/nginx
REVISION CHANGE-CAUSE
1 kubectl set image deployment/nginx nginx=docker.io/library/nginx:1.21. 6 --record=true
2 kubectl set image deployment/nginx nginx=docker.io/library/nginx:1.25. 1 --record=true
[root@master1 ~]# kubectl rollout undo deployment nginx --to-revision=1 将nginx无状态版本回滚到标记号1
deployment.apps/nginx rolled back
[root@master1 ~]# curl 10.106.200.83/1 访问错误测试页面
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center> 又回到之前的版本1.21.6了
<hr><center>nginx/1.21.6</center>
</body>
</html>
[root@master1 ~]#