一、控制器分类

  • 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
最后修改日期: 2019年11月11日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。