KubernetesクラスタはVPCマルチルーティングテーブルをサポートする

5060 ワード

背景
KubernetesはCloudProvider(CCMとも呼ばれる)コンポーネントを介してVPCルーティングテーブルに適切なルートを追加し、クラスタ内のPod間のネットワーク接続を貫通する.最近、VPCは複数のルーティングテーブルのサポート能力を発表し、ユーザーがECSに関連するどのルーティングテーブルを自分で選択できるようにし、ユーザーに豊富なルーティング管理能力を提供した.CCMの以前のバージョンではVPCシングルルーティングテーブルのみのサポートが提供されていたため、マルチルーティングテーブルサポートを使用するために、CCMミラーをregistry.cn-hangzhou.aliyuncs.com/acs/cloud-controller-manager-amd64:v1.9.3.86-g4454991-aliyunにアップグレードする必要があります.また、CCMは、--cloud-configプロファイル(routeTable)を介して、どのルーティングテーブルを使用する必要があるかを指定する.
ぜんちじょうけん
コンテナサービスコンソールで作成したk 8 sクラスタが必要です.コンテナサービスコンソールからk 8 sクラスタを作成します.リファレンス
CloudProviderコンポーネントの構成
マルチルーティング・テーブル・サポートを構成するには、CCM配備ファイルを次のように変更する必要があります.
  • cloud-configのConfigMapを作成します.その中の${ROUTE_TABLES_IDS}をVPCルーティングテーブルidに置き換え、カンマで区切られた複数のルーティングテーブルリストをサポートします.例:vtb-t4n7k6u3m0n8407o7k1t7,vtb-t4n7k6u3m0n8407999999
  • apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cloud-config
      namespace: kube-system
    data:
      cloud-config.conf: |-
        {
            "Global": {
                "routeTableIDs": "${ROUTE_TABLES_IDS}"
            }
        }
  • コマンドラインkubectl edit ds -n kube-system cloud-controller-managerを使用してCCM配備ファイルを修正します.1)を追加します.Volumeは、作成したばかりのcloud-config ConfigMapを参照すると宣言した.
  •    volumes:
       - name: cloud-config
         configMap:
           name: cloud-config
           items:
           - key: cloud-config.conf
             path: cloud-config.conf

    2). cloud-configボリュームを参照します.
         volumeMounts:
         - name: cloud-config
           mountPath: /etc/kubernetes/config

    3). ミラーバージョンをv1.9.3.86-g4454991-aliyun)に変更する.CCM起動パラメータを修正する、- --cloud-config=/etc/kubernetes/config/cloud-config.conf)を追加する./etc/kubernetsボリュームのreadyOnlyマウントプロパティをキャンセルします.すなわちreadOnly: trueを削除する.次のようになります.
          volumeMounts:
          - mountPath: /etc/kubernetes/
            name: k8s

    保存を終了します.CCMのPodが自動的に更新されていない場合は、手動でCCM Podを削除し、強制的に更新してみてください.構成完了後のCCM配備yamlファイルは添付ファイルを参照してください.この時点で、CCMはVPCマルチルーティングテーブルの機能をサポートするように構成できます.
    添付ファイル:サンプルCCM配置.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cloud-config
      namespace: kube-system
    data:
      cloud-config.conf: |-
        {
            Global: {
                "routeTableIDs": "${ROUTE_TABLES_IDS}"
            }
        }
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      labels:
        app: cloud-controller-manager
        tier: control-plane
      name: cloud-controller-manager
      namespace: kube-system
    spec:
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: cloud-controller-manager
          tier: control-plane
      template:
        metadata:
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
          creationTimestamp: null
          labels:
            app: cloud-controller-manager
            tier: control-plane
        spec:
          containers:
          - command:
            - /cloud-controller-manager
            - --kubeconfig=/etc/kubernetes/cloud-controller-manager.conf
            - --address=127.0.0.1
            - --allow-untagged-cloud=true
            - --leader-elect=true
            - --cloud-provider=alicloud
            - --allocate-node-cidrs=true
            - --cluster-cidr=${CLUSTER_CIDR}
            - --use-service-account-credentials=true
            - --route-reconciliation-period=3m
            - --v=5
            - --cloud-config=/etc/kubernetes/config/cloud-config.conf
            - --feature-gates=ServiceNodeExclusion=true
            image: registry.cn-hangzhou.aliyuncs.com/acs/cloud-controller-manager-amd64:v1.9.3.86-g4454991-aliyun
            imagePullPolicy: IfNotPresent
            livenessProbe:
              failureThreshold: 8
              httpGet:
                host: 127.0.0.1
                path: /healthz
                port: 10253
                scheme: HTTP
              initialDelaySeconds: 15
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 15
            name: cloud-controller-manager
            volumeMounts:
            - mountPath: /etc/kubernetes/
              name: k8s
            - mountPath: /etc/ssl/certs
              name: certs
            - mountPath: /etc/pki
              name: pki
            - name: cloud-config
              mountPath: /etc/kubernetes/config
          dnsPolicy: ClusterFirst
          hostNetwork: true
          nodeSelector:
            node-role.kubernetes.io/master: ""
          restartPolicy: Always
          serviceAccount: cloud-controller-manager
          serviceAccountName: cloud-controller-manager
          tolerations:
          - operator: Exists
          volumes:
          - hostPath:
              path: /etc/kubernetes
              type: ""
            name: k8s
          - hostPath:
              path: /etc/ssl/certs
              type: ""
            name: certs
          - hostPath:
              path: /etc/pki
              type: ""
            name: pki
          - name: cloud-config
            configMap:
              name: cloud-config
              items:
              - key: cloud-config.conf
                path: cloud-config.conf
      updateStrategy:
        rollingUpdate:
          maxUnavailable: 1
        type: RollingUpdate