Podのマルチ空き領域workerノードでの高可用性の導入


一、需要分析
現在のkubernetesクラスタ内のworkerノードは、1つのアプリケーションの複数のpod(少なくとも2つ)を異なる利用可能領域に分布させることができ、少なくとも同じ利用可能領域に分布させることができず、高利用可能または同都市災害の配置に達することを目的として、マルチ利用可能領域の追加ECSをサポートすることができる.
二、効果図
三、実現原理
上記の効果を達成するために、kubernetesはpodの親和性と反親和性を提供し、podのノードレベル、利用可能領域レベルの高利用可能な配置を保証する.具体的な値はtopologyKey:failure-domain.beta.kubernetes.io/zone.
四、実現手順
ACK上にクラスタを作成すると、どの利用可能領域からノードを追加しても、そのノードに対応する利用可能領域ラベルが付与、例えば、1つのノードが北京利用可能領域aに属する場合、kubernetesクラスタに追加すると、そのノードにはfailure-domainというラベルが付与.beta.kubernetes.io/zone: cn-beijing-a.
上記のラベルがあれば、アプリケーションをマルチ空き領域に配置するときにyamlファイルを使用して、異なるpodを異なる空き領域に割り当てることができます.
Yamlファイルの例:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-cache
spec:
  selector:
    matchLabels:
      app: store
  replicas: 3
  template:
    metadata:
      labels:
        app: store
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - store
            topologyKey: "failure-domain.beta.kubernetes.io/zone"
      containers:
      - name: redis-server
        image: redis:3.2-alpine

上のyamlファイルのpodAntiAffinity:nodeの反親和性を部分的に規定し、topologyKey:"failure-domain.beta.kubernetes.io/zone"を使用するためfailure-domain.beta.kubernetes.io/zoneというkeyにはcn-beijing-a,cn-beijing-b,cn-beijing-cの3種類のvalueがある.podは、この3つの異なる利用可能な領域に割り当てられます.またp r e f r e r e d DuringSchedulingIgnoredDuringExecutionを使用しているため、podの個数が利用可能な領域の個数より大きい場合、podはできるだけ異なる利用可能な領域に配置され、最後に多くのpodが既存のpodと同じ利用可能な領域に現れる.
上記の使用方法にはnodeレベルも含まれていますが、詳細は以下を参照してください.https://kubernetes.io/docs/co...
クラウドディスクは空き領域にわたってマウントできないため、podがストレージボリュームを使用している場合、このpodはストレージボリュームと同じ空き領域のマシンにスケジューリングされる必要があります.
他のストレージボリューム、例えばNASでは、OSSは上記の配置方式を採用することができる.
著者:朱延生
原文を読む
本文は雲栖コミュニティのオリジナル内容で、許可を得ずに転載してはならない.