在 Kubernetes 中,控制器(Controller)是用于管理资源对象的生命周期和状态的组件。控制器通过与 Kubernetes API 服务器交互,确保资源对象的实际状态与期望状态一致。以下是 Kubernetes 中常见的控制器及其功能介绍。
ReplicationController 了解
[[RC]]
ReplicaSet 了解
[[rs]]
Deployment!!!!!
功能:
- 用于管理无状态应用。
- 确保指定数量的 Pod 副本始终运行。
- 支持滚动更新和回滚。
- 可以轻松扩展 Pod 数量。
- 支持健康检查机制,确保 Pod 始终处于健康状态。
适用场景:
- 适合无状态的 Web 应用、微服务等。
示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-web-app
spec:
replicas: 3
selector:
matchLabels:
app: my-web-app
template:
metadata:
labels:
app: my-web-app
spec:
containers:
- name: web
image: nginx:1.19
ports:
- containerPort: 80
[[Deployment]]
Job
功能:
- 用于运行一次性的任务。
- 确保任务运行完成并退出。
- 支持并行运行多个任务。
适用场景:
- 适合运行一次性的任务,如数据库备份、数据迁移等。
示例:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
[[k8s部署案例集合#7 job实现mysql备份恢复]]
CronJob
功能:
- 用于运行定时任务。
- 按照预定的时间表运行任务。
- 支持并行运行多个任务。
适用场景:
- 适合运行定时任务,如定期备份、定期清理等。
示例:
apiVersion: batch/v1
kind: CronJob
metadata:
name: pi
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: OnFailure
[[k8s部署案例集合#8 cronjob实现定时备份etcd数据]]
**DaemonSet !!!!!
功能:
- 确保每个节点上都运行一个 Pod 副本。
- 适用于需要在每个节点上运行的系统级服务,如日志收集、监控等。
适用场景:
- 适合运行在每个节点上的系统级服务,如 Fluentd、Prometheus Node Exporter 等。
示例:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
spec:
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluent/fluentd:latest
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
StatefulSet
功能:
- 用于管理有状态应用。
- 确保每个 Pod 有一个稳定的、唯一的网络标识符和存储卷。
- 支持有序的部署、扩展和滚动更新。
- 支持有序的删除和自动重新启动。
适用场景:
- 适合有状态的应用,如数据库(MySQL、MongoDB)、缓存系统(Redis)等。
[[statefulsets]]
总结
Kubernetes 提供了多种控制器,每种控制器都有其特定的用途和功能。选择合适的控制器取决于你的应用需求:
- 无状态应用:使用
Deployment
。 - 有状态应用:使用
StatefulSet
。 - 系统级服务:使用
DaemonSet
。 - 一次性任务:使用
Job
。 - 定时任务:使用
CronJob
。
通过合理使用这些控制器,可以实现应用的高可用性、可扩展性和自动化管理。希望这些介绍和示例能帮助你更好地理解和使用 Kubernetes 的控制器。如果有任何进一步的问题或需求,欢迎随时提问!