kubernetesはステータスアプリケーションのzookeeperクラスタを配備する

5016 ワード

クラスタの配備中に発生したピット:
1  node(s) had taints that the pod didn't tolerate.
クラスタ内のノードが汚染されているので、ノード情報を表示すると、ノードの1つが起きていないため、2つのpodしか起動できません.
2 PVとPVCのピット
  • zk.yamlでは3つのzookeeperを作成する必要があります.zookeeperクラスタの特性に基づいて、3つのzookeeperは3つの異なるデータディレクトリ(ログディレクトリを追加しても同じ)を必要とします.クラスタは正常になります.
  • PVを作成するには、3つの異なるPV
  • を作成する必要があります.
  • はzkにあります.yamlでは、PVCをバックエンドの異なる3つのPVCに関連付ける必要があり、従来のPVCの作成に従ってzk.yamlではPVCの名前を指定し、1つの名前しか指定できません.これでは3つの異なるPVに関連付けることができません.volumeClaimTemplates(PVCテンプレート)が必要です.テンプレートaccessModesではReadWriteOnceが必要です.ReadWriteManyでは関連付けに失敗します.
  •   volumeClaimTemplates:
      - metadata:
          name: datadir
        spec:
          accessModes: [ "ReadWriteOnce" ]
          resources:
            requests:
              storage: 1Gi
  • ダイナミックpvcで供給する場合も同様にPVCテンプレート
  • を作成する必要がある.
    3 zookeeper外部へのアクセス
    zookeeperはstatefulSet配備を使用しているため、ヘッダレスサービスを使用していますが、外部へのアクセスを提供するとしたら?方法は、外部アクセス専用のサービスを追加することです.
    具体的な配置
    1 192.168.0.11にインストールnfsを作成し、nfsの起動を構成します.
    2 nodeノードごとにnfsをダウンロードする
    3 matserノードでzkで使用するPVを作成する
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: zk-data1
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      nfs:
        server: 192.168.0.11
        path: /data/zk/data1
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: zk-data2
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      nfs:
        server: 192.168.0.11
        path: /data/zk/data2
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: zk-data3
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      nfs:
        server: 192.168.0.11
        path: /data/zk/data3

    4 masterノード上にzookeeperのpodを作成するyamlファイル
    公式文書を参照:https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/
    公式のドキュメントの中の鏡像の住所は国外の住所で、私はここでネット上で1つの利用可能な住所を探して、公式の鏡像と同じです
    [root@localhost zk]# cat zk.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: zk-hs
      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
      labels:
        app: zk
    spec:
      type: NodePort
      ports:
      - port: 2181
        targetPort: 2181
        name: client
        nodePort: 2181
      selector:
        app: zk
    ---
    apiVersion: policy/v1beta1
    kind: PodDisruptionBudget
    metadata:
      name: zk-pdb
    spec:
      selector:
        matchLabels:
          app: zk
      maxUnavailable: 1
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: zok
    spec:
      serviceName: zk-hs
      replicas: 3
      selector:
        matchLabels:
          app: zk
      template:
        metadata:
          labels:
            app: zk
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: "app"
                        operator: In
                        values:
                        - zk
                  topologyKey: "kubernetes.io/hostname"
          containers:
          - name: kubernetes-zookeeper
            imagePullPolicy: Always
            image: leolee32/kubernetes-library:kubernetes-zookeeper1.0-3.4.10
            resources:
              requests:
                memory: "1Gi"
                cpu: "0.5"
            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
      volumeClaimTemplates:
      - metadata:
          name: datadir
        spec:
          accessModes: [ "ReadWriteOnce" ]
          resources:
            requests:
              storage: 1Gi

    5クラスタステータスの表示
    for i in 0 1 2; do kubectl exec zok-$i zkServer.sh status; done
    6外部アクセスzookeeperクラスタ(ネイティブコンピュータを使用してアクセス)