ReplicationController 和 ReplicaSet 是 Kubernetes 保证 Pod 副本高可用和自动恢复的核心机制,为集群提供弹性和稳定性,是现代云原生应用部署的基础。
ReplicationController 和 ReplicaSet 都是 Kubernetes 中用于管理 Pod 副本的控制器,它们确保指定数量的 Pod 副本始终在集群中运行。
ReplicationController(RC)是 Kubernetes 早期版本中用于管理 Pod 副本的控制器。它的主要功能包括:
ReplicaSet(RS)是 ReplicationController 的升级版本,在新版本的 Kubernetes 中建议使用 ReplicaSet 来取代 ReplicationController。
ReplicaSet 继承了 RC 的核心能力,并在标签选择器和兼容性方面做了增强。
下表总结了 ReplicaSet 与 ReplicationController 的主要区别,便于理解两者的演进关系。
| 特性 | ReplicationController | ReplicaSet |
|---|---|---|
| 标签选择器 | 仅支持相等性选择器 | 支持集合式选择器和相等性选择器 |
| API 版本 | v1 | apps/v1 |
| 推荐使用 | 已弃用 | 推荐使用 |
虽然 ReplicaSet 可以独立使用,但强烈建议使用 Deployment 来自动管理 ReplicaSet,原因如下:
以下 YAML 示例展示了一个典型的 ReplicaSet 配置方式:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend-rs
labels:
app: guestbook
tier: frontend
spec:
# 指定副本数量
replicas: 3
# 标签选择器
selector:
matchLabels:
tier: frontend
matchExpressions:
- key: tier
operator: In
values: [frontend]
# Pod 模板
template:
metadata:
labels:
app: guestbook
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 200m
memory: 200Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 80
protocol: TCP
在日常运维中,ReplicaSet 的管理操作主要包括创建、查询、扩缩容和删除等。
以下命令用于创建 ReplicaSet 资源:
kubectl apply -f replicaset.yaml
可以通过如下命令查看 ReplicaSet 及其 Pod 的详细状态:
kubectl get rs
kubectl describe rs frontend-rs
通过如下命令调整副本数量,实现弹性伸缩:
kubectl scale rs frontend-rs --replicas=5
删除 ReplicaSet 及其关联 Pod 的命令如下:
kubectl delete rs frontend-rs
在生产环境中,建议遵循以下最佳实践以提升副本管理的可靠性和可维护性。
ReplicationController 和 ReplicaSet 是 Kubernetes 保证 Pod 副本高可用的基础机制。随着 Kubernetes 的演进,ReplicaSet 已成为主流,建议结合 Deployment 进行副本管理,实现声明式升级、滚动更新和自动回滚等高级能力。合理配置资源、健康检查和标签,有助于提升集群的稳定性和运维效率。