一、控制器分类
- ReplicaSet
- ReplicationController
- Deployments
- StatefulSet
- Garbage Collection
- TTL Controller for Finished Resources
- Jobs – Run to Completion
- CronJob
二、控制器ReplicaSet
1. ReplicaSet如何工作
ReplicaSet由字段定义,其中包括一个选择器,该选择器指定如何标识它可以获取的Pod,多个副本指示其应维护的Pod数,一个Pod模板指定应创建的新Pod数据以满足该数量。副本标准。
2.使用案例
[root@redis-cluser-01 replicaset]# cat frontend.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
app: guestbook
template:
metadata:
labels:
app: guestbook
spec:
containers:
- name: redis
image: redis
三、控制器Deployments
1. 简介
Deployment是ReplicaSet的升级版,他可以声明Pod的新状态。同时可以定义ReplicaSet。常规部署使用以Deployment控制器管理pod较多,适用于无状态Pod应用
2. 使用案例
[root@redis-cluser-01 deployment]# cat nginx-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
三、控制器StatefulSet
1. 简介
StatefulSet是用于管理有状态应用程序的工作负载API对象,像Deployment一样StatefulSet管理基于相同容器规范的Pod。与部署不同,StatefulSet为其美国Pod维护一个粘性身份。这些Pod是根据相关的规范创建的,但不能交换,每个Pod都有一个永久性标识符,该表示符在任何重新激活中会维护。
2.特征
- 稳定的唯一网络标识符
- 稳定,持久的存储
- 有序,顺畅的部署和扩展
- 有序的自动滚动更新
3. 局限性
- 给定Pod的存储空间必须由PersistentVolume Provisioner根据所请求的进行设置storage class,或者由管理员预先设置
- 删除或者缩小StatefulSet不会删除与StatefulSet关联的卷。这样做是为了确保数据安全,这通常比自动清除所有相关的StatefulSet资源有价值
- StatefulSet当前需要无头服务来负责Pod的网络身份
- 删除StatefulSet时,StatefulSet不提供有关Pod终止的任何保证。为了实现StatefulSet中Pod有序且正常的终止,可以在删除之前将StatefulSet缩小为0
- 当使用带有默认Pod管理策略的滚动更新时,可能会进入需要手动干预才能修复的状态
4.示例
[root@redis-cluser-01 statefulset]# cat statefulset-demo.yml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: statefulset-nginx
spec:
ports:
- port: 80
clusterIP: None
selector:
app: statefulset-nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: statefulset-nginx
serviceName: "nginx"
replicas: 1
template:
metadata:
labels:
app: statefulset-nginx
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx
ports:
- name: web
containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "my-storage-class"
resources:
requests:
storage: 1Gi
留言