美文网首页
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