Amazon EKS クラスターで Kubernetes ダッシュボードを設定するにはどうすればよいですか?

最終更新日: 2019 年 7 月 17 日

Amazon Elastic Kubernetes Service (Amazon EKS) クラスターで Kubernetes ダッシュボードを設定するにはどうすればよいですか?

簡単な説明

Kubernetes ダッシュボードを設定するには、廃止予定のメトリクスプロバイダーである Heapster が必要です。Heapster が廃止予定であるため、Amazon EKS に最適化された AMI (バージョン 1.10.11 以降) での kubelet の読み取り専用ポート (10255) は無効になっています。この無効なポートは、Heapster ログに「dial tcp x.x.x.x:10255:getsockopt: connection refused.」というエラーを生成します。 このエラーは、Kubernetes ダッシュボードにアクセスしたときに CPU およびメモリのメトリクスを表示できないことを意味します。

解決方法

環境の設定

注 : 必要に応じて、SSH を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続します。以下のコード例の構文は、Linux サーバーに適用されます。

1.    kubectl および aws-iam-authenticator をインストールします。

2.    Amazon EKS コントロールプレーンを指すように kubeconfig ファイルを設定するには、次のコマンドを実行します。

$ aws eks update-kubeconfig --name EKS_ClusterName

注意: EKS_ClusterName を、使用している EKS クラスター名で置き換えます。kubeconfig ファイルの構成に関する追加情報については、update-kubeconfig を参照してください。

3.    ワーカーノードが現在の環境で実行されていることを確認するには、次のコマンドを実行します。

$ kubectl get nodes

4.    Kubernetes サービスが現在の環境で実行されていることを確認するには、次のコマンドを実行します。

$ kubectl get svc

Kubernetes ダッシュボードを作成する

1.    Kubernetes ダッシュボードを作成するには、次のコマンドを実行します。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

2.    Heapster を使ってダッシュボードでメトリクスとグラフを利用できるようにするには、次のコマンドを実行します。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml

重要: Heapster に Kubernetes ダッシュボードに表示される CPU およびメモリのメトリクスを収集させるには、AWS CloudFormation 用の amazon-eks-nodegroup テンプレートを使用して EKS ワーカーノードをプロビジョニングします。簡単な説明セクションのエラーを回避するには、AWS CloudFormation テンプレートの Amazon EKS に最適化された AMI で読み取り専用ポート (10255) を有効にします。また、EKS ワーカーノードを作成するときに、BootstrapArguments パラメータを --kubelet-extra-args '--read-only-port=10255' に設定します。

3.    デプロイとサービスを作成するには、次のコマンドを実行します。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml

4.    ダッシュボードにクラスタロールバインディングを作成するには、次のコマンドを実行します。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml

5.    クラスタ管理者権限を持つ新しいサービスアカウントを作成するには、次のコマンドを実行します。

cat > eks-admin-service-account.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: eks-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: eks-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: eks-admin
  namespace: kube-system
EOF

6.    これまでの手順でマニフェストファイルが作成されたことを確認するには、次のコマンドを実行します。

$ cat eks-admin-service-account.yaml

7.    eks-admin をクラスタロールバインディングにバインドするには、次のコマンドを実行します。

$ kubectl apply -f eks-admin-service-account.yaml

8.    Amazon EC2 インスタンスのローカルホストポートから Kubernetes ダッシュボードポートにすべてのリクエストを転送するには、次のコマンドを実行します。

$ kubectl port-forward svc/kubernetes-dashboard -n kube-system 6443:443

9.    SSH トンネルを使用してローカルマシンからポートにアクセスするには、次のコマンドを実行します。

ssh -i EC2KeyPair.pem ec2-user@IP -L 6443:127.0.0.1:6443

注 :EC2KeyPair.pem をご自身のキーペアで置き換えます。

ブラウザで Kubernetes ダッシュボードにアクセスします

1.    Kubernetes ダッシュボードにアクセスするには、ブラウザで https://127.0.0.1:6443 と入力します。

Kubernetes ダッシュボードがブラウザに読み込まれ、入力を求められます。

2.    認証用の bearer トークンを取得するには、コマンドラインに戻って次のコマンドを実行します。

$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')

3.    コマンドラインの出力からトークンをコピーします。

4.    ブラウザでは、Kubernetes ダッシュボードポップアップウィンドウで、トークンを選択します。

5.    出力からトークンを [Enter token] ボックスに貼り付けて、[SIGN-IN] を選択します。

これでブラウザの Kubernetes ダッシュボードにアクセスできます。