Kubernetes Pod调度基础
前言
- Kubernetes简化了应用部署,无需关心应用具体部署在哪台服务器上。
- 通过
kubectl
或Dashboard管理应用,包括定位、执行命令、查看日志和监控。
ReplicationController和ReplicaSet
Replication Controller (RC)
- 确保Pod副本数达到期望值,自动替换失败或终止的Pod。
- 用法示例:
apiVersion: v1 kind: ReplicationController metadata: name: nginx spec: replicas: 3 selector: app: nginx template: metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
ReplicaSet (RS)
- 支持基于集合的标签选择器,用于Deployment协调创建、删除和更新Pod。
- 用法示例:
apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend labels: app: guestbook tier: frontend spec: replicas: 3 selector: matchLabels: tier: frontend matchExpressions: - {key: tier, operator: In, values: [frontend]} template: metadata: labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: nginx:1.7.9 resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 80
标签与标签选择器
- 标签用于标识Kubernetes对象,键值对形式。
- 标签选择器用于选择一组对象,支持基于等式和集合的选择。
无状态应用管理Deployment
定义
- 无状态服务不依赖其他请求,不存储持久化数据。
- Kubernetes中通过Deployment管理无状态服务的Pod。
创建Deployment
- 用法示例:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
更新Deployment
- 更新镜像或配置,Deployment会创建新的ReplicaSet并进行滚动升级。
回滚Deployment
- 当更新不稳定时,可以回滚到之前的版本。
扩容Deployment
- 调整Pod副本数以应对负载变化。
暂停和恢复Deployment更新
- 暂停更新以便进行配置更改,之后恢复更新。
有状态应用管理StatefulSet
定义
- 用于部署有状态且需要有序启动的应用程序,如数据库。
特征
- 每个Pod有唯一序号,顺序性启动、更新和销毁。
- 稳定的网络标识和持久化存储。
创建StatefulSet
- 用法示例:
apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-sts spec: serviceName: redis-svc replicas: 2 selector: matchLabels: app: redis-sts template: metadata: labels: app: redis-sts spec: containers: - name: redis image: redis:5-alpine ports: - containerPort: 6379
扩容和缩容StatefulSet
- 调整副本数,有序管理Pod的增加和减少。
删除StatefulSet
- 可选择级联删除或非级联删除。
守护进程集DaemonSet
定义
- 确保全部或符合条件的节点上运行一个Pod副本。
创建DaemonSet
- 用法示例:
apiVersion: apps/v1 kind: DaemonSet metadata: name: pod-controller spec: selector: matchLabels: app: nginx-pod template: metadata: labels: app: nginx-pod spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
删除DaemonSet
- 删除DaemonSet时,可以选择是否删除其创建的Pod。
CronJob
定义
- 用于周期性执行任务,类似于Linux系统的Cron。
创建CronJob
- 用法示例:
apiVersion: batch/v1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox:v1 args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: OnFailure
删除CronJob
- 删除CronJob及其创建的Job和Pod。
这份笔记概括了Kubernetes中Pod调度的基础知识,包括无状态和有状态应用的管理,以及守护进程集和计划任务的创建和删除。