美文网首页
Sateful和Operator

Sateful和Operator

作者: 麟之趾a | 来源:发表于2020-09-24 14:27 被阅读0次

Sateful 和 Operator

Pod: k8s最小的逻辑单元
service:提供注册服务和服务发现功能(通过CoreDNS实现)
Pod Controller: Deployment(维持不定数量) DaemonSet
CronJob:定时任务执行控制器
satefulSet:只为我们固定了每个Pod的名字和底下的Pod,对应的存储卷,无法扩容 (stateful有状态应用)
CoreOS: operator控制器
operator: 是针对所有有状态应用,实现扩缩容。里面封装的成熟的扩缩容命令。通过它对有状态应用进行扩缩容。operator本身运行Pod
Operator SDK:为了帮助企业快速开发自己有状态应用,提供的接口
githup搜索awesore-operators
operator是把satefulSet中的代码,结合特定的应用程序做二次封装

SatefulSet

  • 固定唯一的网络标识
  • 固定有序的存储
  • 有序优雅的部署和扩展
  • 有序优雅的删除或停止
  • 有序的滚动和更新

要求

各Pod用到的存储卷必须使用StroageClass 动态供给或事先创建好PV
删除StatefulSet或缩减其规模导致Pod被删除时,不应该自动删除存储卷,以确保数据安全。
删除Pod或者SatefulSet,存储卷会不会自动删除,取决于PV的回收策略

statefulSet控制器依赖于一个事先存在的Headless Service对象实现Pod对象的持久化,唯一标识符的配置。此Headless service需要用户手动配置


image.png

必须有两个模板,一个为Pod模板,一个为PVC模板。来实现volume和pod一一对应

Pod标识

Pod 由 sateful 控制器创建,如何保证Pod的标识是固定的

  • Ordinal Index 有序索引如第一个Pod为web-0,第二个Pod 为web-1,依次类推如果web-0挂了,则会创建web-0 Pod

Pod的策略管理

  • OrderedReady Pod Management
    一个Pod创建完毕,再创建另一个Pod串行
  • Palraller Pod Management
    可以同时创建Pod,但Pod标识依然是有序的

Pod 的更新策略

On Delete:由用户手动删除现有的Pod对象,从而触发其更新的策略
Rolling Updates: 默认策略,它通过自动更新机制完成更新的过程,启动更新过程时,它会自动删除每个Pod对象并以新的配置进行重建,更新顺序同时删除statefulSet时的逆向操作机制,一次删除并更新一个Pod
金丝雀发布: 定义partition,例partition=3。把Pod序列大于等于3的全部更新。测试完毕后,将partition设置为0,更新全部

手动创建statefulset

  • 先创建PV
  • 创建 headless service
  • 定义statefulset 控制器里面的Pod模板和PVC模板
cat stateful-daemon.yaml   //在8章拿到
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
  labels:
    app: myapp-svc
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: myapp-pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: myapp
spec:
  serviceName: myapp-svc
  replicas: 2
  selector:
    matchLabels:
      app: myapp-pod
  template:
    metadata:
      labels:
        app: myapp-pod
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v5
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: myappdata
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: myappdata
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "gluster-dynamic"
      resources:
        requests:
          storage: 2G
 kubectl explain sts.spec.updateStrategy.rollingUpdate

当stateful 缩容时,pvc会保留下来,当statefulSet再次扩容时,还会使用相同的pv,因为Pod标识是一样的

相关文章

网友评论

      本文标题:Sateful和Operator

      本文链接:https://www.haomeiwen.com/subject/nxbzyktx.html