本ドキュメントでは、対象の Kubernetes クラスターをアップグレードせずに Heapster コンポーネントから metrics-server コンポーネントへアップグレードする方法について説明します。

前提条件

  • Kubernetes クラスタが作成されています。 詳細は、Kubernetes クラスターの作成をご参照ください。
  • Kubernetes クラスタは v1.12 より以前のバージョンを使用。

手順

データ収集コンポーネントをリセットし、モニタリングデータリンクをリセットしてから、コンポーネントの互換性設定を変更する必要があります。

  • データ収集コンポーネントをリセットします。

    データ収集コンポーネントを Heapster から metrics-server に変更するには、次の手順に従います。

    1. Container Service コンソールにログインします。
    2. 左側のナビゲーションウィンドウから、"Container Service - Kubernetes" を選択し、アプリケーション > デプロイ をクリックします。
    3. 右上隅で、 テンプレートから作成 をクリックします。
    4. クラスタ ドロップダウンリストから対象のクラスタを選択し、ネームスペースドロップダウンリストから kube-system を選択します。
    5. リソースの種類からカスタムを選択し、次のコードをコピーしてテンプレート領域に貼り付けてから、デプロイをクリックします。
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: admin
        namespace: kube-system
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: ClusterRoleBinding
      metadata:
        name: admin
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: cluster-admin
      subjects:
      - kind: ServiceAccount
        name: admin
        namespace: kube-system
      ---
      apiVersion: v1
      kind: Service
      metadata:
        labels:
          task: monitoring
          # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
          # If you are NOT using this as an addon, you should comment out this line.
          kubernetes.io/cluster-service: 'true'
          kubernetes.io/name: metrics-server
        name: heapster
        namespace: kube-system
      spec:
        ports:
        - port: 80
          targetPort: 8082
        selector:
          k8s-app: metrics-server
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: metrics-server
        namespace: kube-system
        labels:
          kubernetes.io/name: metrics-server
      spec:
        selector:
          k8s-app: metrics-server
        ports:
        - port: 443
          protocol: TCP
          targetPort: 443
      ---
      apiVersion: apiregistration.k8s.io/v1beta1
      kind: APIService
      metadata:
        name: v1beta1.metrics.k8s.io
      spec:
        service:
          name: metrics-server
          namespace: kube-system
        group: metrics.k8s.io
        version: v1beta1
        insecureSkipTLSVerify: true
        groupPriorityMinimum: 100
        versionPriority: 100
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        name: metrics-server
        namespace: kube-system
        labels:
          k8s-app: metrics-server
      spec:
        selector:
          matchLabels:
            k8s-app: metrics-server
        template:
          metadata:
            name: metrics-server
            labels:
              k8s-app: metrics-server
          spec:
            serviceAccountName: admin
            containers:
            - name: metrics-server
              image: registry.##REGION##.aliyuncs.com/acs/metrics-server:v0.2.1-9dd9511-aliyun
              imagePullPolicy: Always
              command:
              - /metrics-server
              - '--source=kubernetes:https://kubernetes.default'
              - '--sink=socket:tcp://monitor.csk.##REGION##.aliyuncs.com:8093?clusterId=##CLUSTER_ID##&public=true'
    ## REGION ## を対象のクラスタがデプロイされているリージョン(たとえば China East 1:cn-hangzhou)に置き換え、 ## CLUSTER_ID ## を対象のクラスタ ID に置き換える必要があります。
  • モニタリングデータリンクをリセットします。
    1. 左側のナビゲーションペインから、クラスター > ノード を選択します。
    2. 対象のクラスタを選択します。
    3. マスターノードのインスタンス ID をクリックします。 この例では、master-01 ノードが使用されます。
    4. 接続 をクリックします。 表示されるページで、リモート接続パスワードを入力して OK をクリックします。 ECS インスタンスにログインしたら、次のコマンドを実行します。
      sed -i 's/--horizontal-pod-autoscaler-use-rest-clients=false/--horizontal-pod-autoscaler-use-rest-clients=true/' /etc/kubernetes/manifests/kube-controller-manager.yaml
      
    5. master-02 と master-03 ノードで手順 c ~ d を繰り返します。

      上記の操作が完了すると、kubelet は自動的に起動し、kube-controller-manager コンポーネントを更新します。

  • コンポーネントの互換性設定をリセットします。
    1. 左側のナビゲーションペインで、Discovery and Load Balancing > サービスを選択します
    2. 対象のクラスタkube-system ネームスペースを選択します。 次に、heapster の右側にある View YAML をクリックします
    3. 表示されたダイアログボックスで、selector フィールドの k8s-app パラメータを metrics-server にリセットします。 更新 をクリックします。
    4. 左側のナビゲーションペインから、アプリケーショ > デプロイ をクリックします。
    5. 対象のクラスタと kube-system ネームスペースを選択します。
    6. Heapster に関連するコンポーネントを削除します。 この例では、heapster コンポーネントと monitoring-influxdb コンポーネントを削除する必要があります。
      • heapster コンポーネントの右側にある詳細 > 削除を選択します。 表示されるダイアログボックスで、OK をクリックします。
      • monitoring-influxdb コンポーネントの右側にある詳細 > 削除を選択します。 表示されるダイアログで関連サービス monitoring-influxdb を削除するチェックボックスにチェックを入れ、OK をクリックします。
    7. 新しいデータリンク状態を確認します。

      データリンクの初期化には約 3 分かかります。

      左側のナビゲーションペインから、アプリケーション > Pods を選択します。 CPU とメモリの列が正常な値を示していることを確認することができます。 これはデータリンクがリセットされたことを意味します。

      各コンポーネントの表示されている CPU とメモリの両方の列が 0 の場合は、例外を示します。