如何理解ReplicaSet的操作

48次阅读
没有评论

共计 3361 个字符,预计需要花费 9 分钟才能阅读完成。

如何理解 ReplicaSet 的操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

我们通过一些例子来演示 ReplicaSet 的创建、查看、更新、删除等操作。

创建

首先我们做准备一个名为 replicaset.yaml 的配置文件,其内容如下所示:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
 name: replicaset-runs-pod
spec:
 replicas: 3
 selector:
 matchLabels:
 app: nginx
 template:
 metadata:
 labels:
 app: nginx
 spec:
 containers:
 - name: nginx
 image: nginx:1.19.0

该 ReplicaSet 配置保证同时有 3 个 Pod 副本在运行。

使用 kubectl create 命令创建 ReplicaSet 控制器,如下所示:

[root@ecs-d8b6 manifests]# kubectl create -f replicaset.yaml 
replicaset.apps/replicaset-runs-pod created

命令行输出显示,一个名为 replicaset-runs-pod 的 ReplicaSet 控制器已经创建完成。

查看

我们先查看刚创建的 ReplicaSet 控制器:

[root@ecs-d8b6 manifests]# kubectl get replicaset 
NAME DESIRED CURRENT READY AGE
replicaset-runs-pod 3 3 3 90s

可以看到控制器 replicaset-runs-pod 期望的 Pod 数量(DESIRED)为 3,当前已创建的 Pod 数量(CURRENT)也为 3,并且处于 READY 状态的 Pod 数量(READY)同样是 3,正是我们期望的状态。

接着再查看实际运行的 Pod:

[root@ecs-d8b6 manifests]# kubectl get pods 
NAME READY STATUS RESTARTS AGE
replicaset-runs-pod-dzhqp 1/1 Running 0 5m
replicaset-runs-pod-hpbs8 1/1 Running 0 5m
replicaset-runs-pod-xhx9j 1/1 Running 0 5m

可以看到有 3 个 Pod 在运行,Pod 名字统一使用其控制器名字为前缀,再加一个随机字符串。

使用 kubectl describe 命令查看控制器,可以看到其创建 Pod 的记录:

[root@ecs-d8b6 manifests]# kubectl describe replicaset replicaset-runs-pod 
Name: replicaset-runs-pod
Namespace: default
Selector: app=nginx
Labels:  none 
Annotations:  none 
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
 Labels: app=nginx
 Containers:
 nginx:
 Image: nginx:1.19.0
 Port:  none 
 Host Port:  none 
 Environment:  none 
 Mounts:  none 
 Volumes:  none 
Events:
 Type Reason Age From Message
 ---- ------ ---- ---- -------
 Normal SuccessfulCreate 8m5s replicaset-controller Created pod: replicaset-runs-pod-xhx9j
 Normal SuccessfulCreate 8m5s replicaset-controller Created pod: replicaset-runs-pod-dzhqp
 Normal SuccessfulCreate 8m5s replicaset-controller Created pod: replicaset-runs-pod-hpbs8

通过最后的 Events 信息可知,控制器 replicaset-runs-pod 运行过程中分别创建了上面的 3 个 Pod。

更新改变副本个数

我们使用 kubectl edit 命令修改控制器 replicaset-runs-pod,把 spec.replicas 数量由 3 调整为 5:

[root@ecs-d8b6 manifests]# kubectl edit replicaset replicaset-runs-pod 
replicaset.apps/replicaset-runs-pod edited

然后再次查看 Pod:

[root@ecs-d8b6 manifests]# kubectl get pods 
NAME READY STATUS RESTARTS AGE
replicaset-runs-pod-5mtdk 1/1 Running 0 37s
replicaset-runs-pod-6rqqp 1/1 Running 0 37s
replicaset-runs-pod-dzhqp 1/1 Running 0 21m
replicaset-runs-pod-hpbs8 1/1 Running 0 21m
replicaset-runs-pod-xhx9j 1/1 Running 0 21m

可以看到两个新的 Pod 被创建了出来,Pod 副本数与配置中 spec.replicas 设定置一致。

类似地,当我们再次修改控制器 replicaset-runs-pod 配置,将 spec.replicas 数量由 5 调整为 3,多出的 Pod 数量会被自动删除。

模拟 Pod 异常

ReplicaSet 控制器将始终确保集群中运行的 Pod 副本数满足期望值,当 Pod 被删除时,控制器将马上创建新的 Pod 填补空缺:

[root@ecs-d8b6 manifests]# kubectl delete pods replicaset-runs-pod-dzhqp
pod  replicaset-runs-pod-dzhqp  deleted
[root@ecs-d8b6 manifests]# kubectl get pods
NAME READY STATUS RESTARTS AGE
replicaset-runs-pod-hpbs8 1/1 Running 0 31m
replicaset-runs-pod-tbccg 1/1 Running 0 9s
replicaset-runs-pod-xhx9j 1/1 Running 0 31m

上面的例子中,当手动删除某个 ReplicaSet 控制器管理的 Pod 时,新的 Pod 马上被创建了出来,通过 Pod 运行时间或者控制器事件信息都可以看出。

删除

当删除 ReplicaSet 控制器时,其管理的 Pod 默认也会相应的删除,如下所示:

[root@ecs-d8b6 manifests]# kubectl delete -f replicaset.yaml 
replicaset.apps  replicaset-runs-pod  deleted
[root@ecs-d8b6 manifests]# kubectl get pods
No resources found in default namespace.

ReplicaSet 控制器的能力侧重于对副本数量的把控,它能保证集群中时刻运行指定数量的 Pod 副本,当配置中 Pod 副本数量变化时,可以动态地调整 Pod 数量。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计3361字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)