【Kubernetes】副本控制器
环境
- kubernetes 1.20.2
- Spring Boot 2.5.0-M1
目标
前面我们使用 rc 自动创建了一个 Pod 集群,这里再简单理解副本控制器的原理。
创建 rc
rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-demo
spec:
replicas: 3
selector:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: pod-demo
image: jiangbo920827/spring-demo:actuator
ports:
- containerPort: 8080
查看 Pod
[root@master kubernetes]# kubectl get po
NAME READY STATUS RESTARTS AGE
rc-demo-9hjh6 1/1 Running 0 30s
rc-demo-ddg8d 1/1 Running 0 30s
rc-demo-qxsf4 1/1 Running 0 30s
查看 rc
[root@master kubernetes]# kubectl get rc
NAME DESIRED CURRENT READY AGE
rc-demo 3 3 3 44s
创建 Pod
rc 是根据 yaml 中的 template 字段来创建 Pod。有时候,我们也称这个为 PodTemplate,即 Pod 模板。
经过与之前我们创建 Pod 的 yaml 相比,就缺少了类型,版本,名称字段。
Pod 数量
还有一个问题是,rc 怎么知道创建了多少个 Pod,还需要创建几个呢?这个是通过之前的标签与标签选择器来实现的。
查看 Pod 的标签
可以看到,rc 生成的每个 Pod 都有我们定义在 Pod 模板中的标签。
NAME READY STATUS RESTARTS AGE LABELS
rc-demo-9hjh6 1/1 Running 1 14h app=myapp
rc-demo-ddg8d 1/1 Running 1 14h app=myapp
rc-demo-qxsf4 1/1 Running 1 14h app=myapp
查看标签选择器
Selector 字段表示这个是一个标签选择器,选择的标签是 app=myapp,和我们 Pod 的标签对应。
通过标签,rc 就能知道当前有几个 Pod 在运行,还需要创建几个。
[root@master kubernetes]# kubectl describe -f rc.yaml
Name: rc-demo
Namespace: default
Selector: app=myapp
Labels: app=myapp
Annotations: <none>
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=myapp
Containers:
pod-demo:
Image: jiangbo920827/spring-demo:actuator
Port: 8080/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 14h replication-controller Created pod: rc-demo-qxsf4
Normal SuccessfulCreate 14h replication-controller Created pod: rc-demo-ddg8d
Normal SuccessfulCreate 14h replication-controller Created pod: rc-demo-9hjh6
验证
既然是通过标签选择器来统计的 Pod 数量,那么修改其中一个 Pod 的标签,应该会继续创建满足条件的标签。
[root@master kubernetes]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
rc-demo-9hjh6 1/1 Running 1 14h app=myapp
rc-demo-ddg8d 1/1 Running 1 14h app=myapp
rc-demo-qxsf4 1/1 Running 1 14h app=myapp
[root@master kubernetes]# kubectl label pod rc-demo-9hjh6 app=yourapp --overwrite
pod/rc-demo-9hjh6 labeled
[root@master kubernetes]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
rc-demo-9hjh6 1/1 Running 1 14h app=yourapp
rc-demo-ddg8d 1/1 Running 1 14h app=myapp
rc-demo-h4vvc 1/1 Running 0 9s app=myapp
rc-demo-qxsf4 1/1 Running 1 14h app=myapp
总结
介绍了副本控制器控制 Pod 数量的原理。
附录
分类:
Kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!