はじめに
本記事は、以下の内容の続きになります。
前回、k8sクラスタにアプリケーションをデプロしてみたので、
今回は、クラスタやアプリケーションのモニタリングを行ってみます。
前提条件
- k8sのクラスタが作成されており、ワーカーノードが稼働していること。
Kubernetes Metrics Server の構築
Kubernetesには、メトリクスサーバー(metrics-server)というモノがあり、
これを利用することで、クラスタに登録された各種リソースの情報を簡単に取得できるようになります。
Kubernetes Metrics Server のデプロイ
ここでは、最新版をダウンロードして、クラスタに登録を行います。
$ cd /Users/$USERNAME/MyWork/amazon-eks
$ DOWNLOAD_URL=$(curl -Ls "https://api.github.com/repos/kubernetes-sigs/metrics-server/releases/latest" | jq -r .tarball_url)
$ DOWNLOAD_VERSION=$(grep -o '[^/v]*$' <<< $DOWNLOAD_URL)
$ curl -Ls $DOWNLOAD_URL -o metrics-server-$DOWNLOAD_VERSION.tar.gz
$ mkdir metrics-server-$DOWNLOAD_VERSION
$ tar -xzf metrics-server-$DOWNLOAD_VERSION.tar.gz --directory metrics-server-$DOWNLOAD_VERSION --strip-components 1
$ kubectl apply -f metrics-server-$DOWNLOAD_VERSION/deploy/1.8+/
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
動作確認
以下で、metrics-serverのDeploymentで、必要な数のポッドが実行されていることが確認できます。
$ kubectl get deployment metrics-server -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 1/1 1 1 2m55s
Kubernetes Dashboard の構築
metrics-server単体では、メトリクスの可視化はされません。
メトリクスの可視化を行うために、Kubernetes ダッシュボード を構築します。
Kubernetes Dashboard のデプロイ
まずは、Kubernetes のGitHubリポジトリで公開されているダッシュボードの定義を取得し、クラスタにデプロイします。
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
サービスアカウント/クラスターロールバインディングの作成
デフォルトでは、Kubernetes ダッシュボードへのアクセスは制限されています。
そのため、管理者レベルのアクセス権限を使用してダッシュボードに安全に接続するために使用できるようにします。
「eks-admin-service-account.yaml」というファイルを作成します。
$ touch eks-admin-service-account.yaml
そのファイルに、以下の内容を定義します。
ここでは、サービスアカウントと、eks-admin と呼ばれるクラスターロールバインディングを定義しています。
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
上記内容を、クラスタにデプロイします。
$ kubectl apply -f eks-admin-service-account.yaml
serviceaccount/eks-admin created
clusterrolebinding.rbac.authorization.k8s.io/eks-admin created
ダッシュボードへの接続
先の手順で、クラスタの状態を表示可能な管理者サービスアカウントを作成したため、このサービスアカウントを使用してダッシュボードに接続します。
まず、サービスアカウントの認証トークンを取得します。
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')
以下のような内容が出力されるので、そこから <authentication_token>
の値をコピーしておきます。
このトークンを使用してダッシュボードに接続します。
Name: eks-admin-token-jnn96
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: eks-admin
kubernetes.io/service-account.uid: e9201e83-3454-11ea-bc0a-0e7ed5a45fb2
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: <authentication_token>
ローカル環境から、ダッシュボードへアクセスできるよう、 kubectl proxy
を開始します。
以下のコマンドを実行したら、そのまま実行中の状態になるため、ダッシュボードへの接続確認ができるまで、
コンソールはそのままにしておきます。
kubectl proxy
ブラウザで以下のリンクを開いて、ダッシュボードのエンドポイントにアクセスします。
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#!/login
さらに、[トークン] を選択して、先の手順でコピーしておいた <authentication_token>
の内容を [トークン] フィールドに貼り付け、[サインイン] を押下します。
接続に成功すると、以下のようなダッシュボード画面が表示されます。
このダッシュボード画面から、ノードの状態や、PodやReplicaSetなどのワークロードの情報など、
各種のクラスタの情報を確認することができます。
まとめ
Kubernetes Metrics Server/Kubernetes Dashboard を利用することで、
クラスタの構成や各種リソースの状況などを簡単に確認できるようになるので、
まずはクラスタ構成や動作を理解するには、このダッシュボードの画面を確認しながら操作してみると、
効率的に内容を把握できるかと思います。