• Kubernetes StatefulSet with zookeeper


    介绍

    官方文档https://kubernetes.io/zh/docs/tutorials/stateful-application/zookeeper/

    在部署之前,你需要熟悉以下Kubernetes概念

    根据官方要求,zookeeper部署在Kubernetes集群需要具备如下要求

      • node节点资源至少四个节点的集群,每个节点至少 2 CPUs 和 4 GiB 内存

    如果在云平台部署zookeeper集群,需要学习相关云厂商的持久化存储,如何与Kubernetes集群融合

    配置过程


     整个部署分为以下几个步骤(为了细化官方文档部署过程,以下具体的分段),官方文档给出的example.yaml有缺少遗漏的部分,在下文一一指出,如下

    1. 创建StorageClass
    2. 创建PersistentVolumeClaim
    3. 创建Headless Service
    4. 创建PodDisruptionBudget
    5. 创建StatefulSets

    具体配置

    1. 配置文件
      apiVersion: v1
      kind: Service
      metadata:
        name: zk-hs
        namespace: prod
        labels:
          app: zk
      spec:
        ports:
        - port: 2888
          name: server
        - port: 3888
          name: leader-election
        clusterIP: None
        selector:
          app: zk
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: zk-cs
        namespace: prod
        labels:
          app: zk
      spec:
        ports:
        - port: 2181
          name: client
        selector:
          app: zk
      ---
      apiVersion: policy/v1beta1
      kind: PodDisruptionBudget
      metadata:
        name: zk-pdb
        namespace: prod
      spec:
        selector:
          matchLabels:
            app: zk
        maxUnavailable: 1
      ---
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: prod-zk
        namespace: prod
      spec:
        selector:
          matchLabels:
            app: zk
        serviceName: zk-hs
        replicas: 3
        updateStrategy:
          type: RollingUpdate
        podManagementPolicy: OrderedReady
        template:
          metadata:
            labels:
              app: zk
          spec:
            tolerations:
              - operator: Exists
            affinity:
              nodeAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  nodeSelectorTerms:
                  - matchExpressions:
                    - key: kubernetes.io/resource
                      operator: In
                      values:
                      - prod-data
              podAntiAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  - labelSelector:
                      matchExpressions:
                        - key: "app"
                          operator: In
                          values:
                          - zk
                    topologyKey: "kubernetes.io/hostname"
            containers:
            - name: prod-zk
              imagePullPolicy: Always
              image: "k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10"
              resources:
                requests:
                  memory: "1Gi"
                  cpu: "0.5"
                limits:
                  cpu: "1"
                  memory: "2Gi"
              ports:
              - containerPort: 2181
                name: client
              - containerPort: 2888
                name: server
              - containerPort: 3888
                name: leader-election
              command:
              - sh
              - -c
              - "start-zookeeper 
                --servers=3 
                --data_dir=/var/lib/zookeeper/data 
                --data_log_dir=/var/lib/zookeeper/data/log 
                --conf_dir=/opt/zookeeper/conf 
                --client_port=2181 
                --election_port=3888 
                --server_port=2888 
                --tick_time=2000 
                --init_limit=10 
                --sync_limit=5 
                --heap=512M 
                --max_client_cnxns=60 
                --snap_retain_count=3 
                --purge_interval=12 
                --max_session_timeout=40000 
                --min_session_timeout=4000 
                --log_level=INFO"
              readinessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - "zookeeper-ready 2181"
                initialDelaySeconds: 10
                timeoutSeconds: 5
              livenessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - "zookeeper-ready 2181"
                initialDelaySeconds: 10
                timeoutSeconds: 5
              volumeMounts:
              - name: datadir
                mountPath: /var/lib/zookeeper
            # 如果是简单的测试sattefulSet安装zookeeper集群,使用临时存储即可
            # StatefulSet 控制器为 StatefulSet 中的每个 Pod 生成一个 PersistentVolumeClaim
            #volumes:
            #- name: datadir
            #  emptyDir: {}
            securityContext:
              runAsUser: 1000
              fsGroup: 1000
        # 正式环境,需要部署持久化存储
        volumeClaimTemplates:
        - metadata:
            name: datadir
            annotations:
              volume.alpha.kubernetes.io/storage-class: anything
          spec:
            accessModes: [ "ReadWriteOnce" ]
            resources:
              requests:
                storage: 20Gi
            storageClassName: alicloud-disk-essd
    2. 修改时区(lens编辑)
      # 时区调整
          volumeMounts:
      ...
                  - name: localtime
                    mountPath: /etc/localtime
      ---------------------------------------------------
      
            volumes:
              - name: localtime
                hostPath:
                  path: /etc/localtime
                  type: ''
  • 相关阅读:
    计算机基础知识
    markdown简介及基本语法
    session和cookie的区别
    MySQL的游标
    数据库单表查询
    外键(有无级联)
    mysql
    数据库引擎
    守护进程和守护线程的区别
    快排等
  • 原文地址:https://www.cnblogs.com/apink/p/15191368.html
Copyright © 2020-2023  润新知