おうちk8sにKubernetes Dashboardを導入する
以前作ったおうちk8s の可視化をしてみるべく、Kubernates Dashboard導入の手順まとめておきます
Kubernates Dashboard
インストール
手順自体は公式に書かれていますが、おうちk8s上からNodePort経由で見られるよう構築します
まず公式のyamlを取得します
$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml
kubernetes-dashboardのServiceTypeがClusterIPとなっているため、NodePortへの変更とnodePort指定の変更をしておきます
nodePortは今回30843
としましたが何でもよい or 固定しなくて良ければ指定しなくてOKです
@@ -37,9 +37,11 @@ name: kubernetes-dashboard namespace: kubernetes-dashboard spec: + type: NodePort ports: - port: 443 targetPort: 8443 + nodePort: 30843 selector: k8s-app: kubernetes-dashboard
また、この状態でデプロイすると証明書エラーとなり表示することができないため、オレオレ証明書を作成して設定します
$ mkdir -p secret/certs $ openssl req -nodes -newkey rsa:2048 -keyout secret/certs/dashboard.key -out secret/certs/dashboard.csr -subj "/C=/ST=/L=/O=/OU=/CN=kubernetes-dashboard" $ openssl x509 -req -sha256 -days 365 -in secret/certs/dashboard.csr -signkey secret/certs/dashboard.key -out secret/certs/dashboard.crt
さらにKubernetes Dashboardのログインに使うためのサービスアカウントと権限設定のためのyamlも作成します
これは 公式のドキュメント に載っているyamlと同じものです
admin-user.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard
あとはデプロイだけですが、Secretの設定をbase64かけてrecommended.yamlに追記するのは面倒なのでkustomizeを利用したいと思います
以下の内容を kustomization.yaml
として保存します
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: kubernetes-dashboard resources: - recommended.yaml - admin-user.yaml secretGenerator: - name: kubernetes-dashboard-certs files: - secret/certs/dashboard.crt - secret/certs/dashboard.csr - secret/certs/dashboard.key generatorOptions: disableNameSuffixHash: true
certs用のsecretはkustomizeによって作られるので、recommended.yaml
のkubernetes-dashboard-certsの項目は削除しておきましょう
--- -apiVersion: v1 -kind: Secret -metadata: - labels: - k8s-app: kubernetes-dashboard - name: kubernetes-dashboard-certs - namespace: kubernetes-dashboard -type: Opaque - ---- - kind: ConfigMap apiVersion: v1 metadata:
設定ファイルが全部揃ったのでkustomizeを使ってデプロイしましょう
今までで用意したファイルの構成は以下の通り
. ├── admin-user.yaml ├── kustomization.yaml ├── recommended.yaml └── secret └── certs ├── dashboard.crt ├── dashboard.csr └── dashboard.key
kubernetes1.14からkustomizeがkubectlに統合されているので別途インストールは不要です
# デプロイされるリソースの確認 $ kubectl kustomize . デプロイします $ kubectl apply -k .
動作確認
Kubernetes Dashboardをブラウザで開いてみましょう
$ open https://$(kubectl get nodes --namespace kubernetes-dashboard -o jsonpath="{.items[0].status.addresses[0].address}"):30843
ログインにはトークンが必要なため、secretの値で確認します
$ kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') -o jsonpath="{.data.token}" | base64 -D
出力された値をコピーして「トークン」に入力します
サインインができて正しく表示されればOK 🎉
metrics-server
公式のドキュメント にもありますが metrics-server を入れることでCPUとメモリ使用量をKubernetes Dashboardに追加することができます
自分のおうちk8sはラズパイ上で動いており、公式のyamlはラズパイ用(arm)向けになっていないのでそこを変更してデプロイします
$ git clone https://github.com/kubernetes-sigs/metrics-server.git
変更点は deploy/kubernetes/metrics-server-deployment.yaml
の以下部分
@@ -29,7 +29,7 @@ spec: emptyDir: {} containers: - name: metrics-server - image: k8s.gcr.io/metrics-server-amd64:v0.3.6 + image: k8s.gcr.io/metrics-server-arm:v0.3.6 args: - --cert-dir=/tmp - --secure-port=4443 @@ -42,9 +42,13 @@ spec: runAsNonRoot: true runAsUser: 1000 imagePullPolicy: IfNotPresent + command: + - /metrics-server + - --kubelet-insecure-tls + - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname volumeMounts: - name: tmp-dir mountPath: /tmp nodeSelector: beta.kubernetes.io/os: linux - kubernetes.io/arch: "amd64" + kubernetes.io/arch: "arm"
command
の変更は 参考にした記事 のまま同様の変更を行いましたが、最新版も同じ修正が必要かどうかは未調査 🤔
デプロイします
$ kubectl apply -f metrics-server/deploy/kubernetes
無事CPU/メモリ使用量も確認できるようになりました 🎉
まとめ
可視化したからどうなったわけではないですが、グラフィカルに見えるとなんか嬉しいです
久しぶりにkustomize使ってみたら結構いろんな機能が増えていた(知らなかっただけ?)のと、
GitHubのサンプルだけだと分かりづらいな、と思ってたら 公式のDoc も用意されてて(これも知らなかった)、設定ファイルが簡単に書けるようになりました
また、PrometheusとGrafanaの導入も合わせて書こうと思ってたけど、Kubernetes Dashboardだけで結構なボリュームになってしまったので次回書きます
今回作ったもの
以下に置いておきます