K8s v1.10 on Vagrantのダッシュボードのセットアップ

この投稿は、Vagrantの仮想サーバーで構築したK8sクラスタの3回目で、ダッシュボードのセットアップ方法についてのメモです。
1回目、2回目のリンクを以下にあげておきますので、必要に応じて参照いただければ幸いです。

Kubernetes Dashboadは、セキュリティや表示機能で開発が続いていますが、これらに関する複数の古いドキュメントも残っていますから、適切な参照先を選ばないと時間を無駄にしてしまいます。 そこで、参考までに、今回参照した資料と役に立たなかった資料を列挙しておきます。GitHubに置かれているドキュメントは、最新の状態になっている様です。

セットアップ時に参照した資料URL:

セットアップの参考にならなかった資料のURL:

仮想サーバ K8s1 ポートフォワード設定

k8sのポッドネットワーク上のIPアドレスでリッスンしているダッシュボードのウェブページを、Vagrant のホストであるMacからアクセスできる様にするために、下記のVagrantfileの16行目の様に、ゲスト(仮想サーバー)の8001番ポートとホスト(Mac)の8001番ポートを対応させます。これによって、Macのブラウザで、https://localhost:8001/ をアクセスすると、仮想サーバーの8001番ポートへフォワードされる様になります。

    13        public_ip = "192.168.1.#{i+90}"
    14        s.vm.network :public_network, ip: public_ip, bridge: "en0: Ethernet"
    15        if i == 1 then
    16          s.vm.network :forwarded_port, host: 8001, guest: 8001
    17        end

ダッシュボードのインストール

次に、kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yamlによって、ダッシュボードをデプロイします。 この操作は、https://github.com/kubernetes/dashboard にガイドされています。

vagrant@k8s1:/vagrant/yaml$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
secret "kubernetes-dashboard-certs" created
serviceaccount "kubernetes-dashboard" created
role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created
rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created
deployment.apps "kubernetes-dashboard" created
service "kubernetes-dashboard" created

管理ユーザーとロールの作成

ダッシュボードにアクセスする権限を持ったユーザーを作成するために、次の2つのYAMLファイルを適用します。 これらのYAMLファイルは、https://github.com/kubernetes/dashboard/wiki/Creating-sample-userにガイドされています。

ダッシュボードユーザーを作るYAML

CreateServiceAccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

ロール(権限)を与えるYAML

CreateClusterRoleBinding.yaml
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: kube-system

上記2つのYAMLを マスターノード k8s1 で kubectlを実行して、適用します。

vagrant@k8s1:/vagrant/yaml$ kubectl create -f CreateServiceAccount.yaml 
serviceaccount "admin-user" created
vagrant@k8s1:/vagrant/yaml$ kubectl create -f CreateClusterRoleBinding.yaml 
clusterrolebinding.rbac.authorization.k8s.io "admin-user" created

管理ユーザーのトークンの表示

次に、前述のYAML適用で生成された管理ユーザーのトークンを表示して、ログイン時にコピペして利用できる様にします。 トークンは、token:の次から始まる文字列です。この表示は、メモ帳などに保存しておいて、ダッシュボードにログインする場合に、毎回利用します。

vagrant@k8s1:/vagrant/yaml$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-w4w7w
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=admin-user
              kubernetes.io/service-account.uid=1c934b99-4230-11e8-a350-02399910d15e

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXc0dzd3Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxYzkzNGI5OS00MjMwLTExZTgtYTM1MC0wMjM5OTkxMGQxNWUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.cu-yNdS7dFbVm_aJkAU_Q2PIshwlXAlO54Gjm3Vhm5gHZxbN6Kr_JGJ9b0pYmmBIuj1Pml0MfErh_AtceTtQZnrCdjJCR8WJG8I4HtJLk-BYloNU8GJ95gOuKQ0kVMpJ8R4uHGHgjwOkLzI_r9x2mquID6TEtPxfEWDqQSdXzzBq4oPe0RhTUE4p9QKm14W3H9BPUXui880HpuX84aKER5_3MQc2xmFnTrkZUq4QQKc2zgyrjjaEEsyAI1m9oPwzW-IRCiKTMkwqKIN5JJ1f3H1WowAt8LtYydex7-_bQkd-9N1Oe6uLSHAIjyq1DcOVF8Ww7ylMZb6ANEWBHiTrng
vagrant@k8s1:/vagrant/yaml$ 

kubectl プロキシの設定

ダッシュボードのポッドは、ポッドネットワーク(10.244.0.0/16)上のIPアドレスで、リッスンしています。 このポッドネットワークをk1s1の8001番ポートに中継(プロキシ)するために、次のコマンドを実行します。 このコマンドは、コントロール-Cで停止するまで、プロキシとして機能します。

vagrant@k8s1:~$ kubectl proxy --address="0.0.0.0" -p 8001 --accept-hosts='^*$' -n kube-system
Starting to serve on [::]:8001

コマンドのオプションの説明は、https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#proxyにあります。

ダッシュボードへのログイン

過去のバージョンでは、http://localhost:8001/ui/とされていましたが、v1.10では廃止となっており、次のアドレスでアクセスします。

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

ブラウザでアクセスすると、次のウィンドが表示されます。 Tokenをクリックして、Enter tokenに、先に表示したトークンをコピペして、SIGN INをクリックします。

スクリーンショット 2018-04-17 21.22.09.png

ダッシュボードの表示

ログインに成功すると、次の様なダッシュボードが表示されます。

スクリーンショット 2018-04-17 21.24.37.png

ダッシュボードの利用方法は、説明が無くても、直感的に判る様になっていますが、https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/ を参照すると、助けになると思います。

ダッシュボードの機能追加

ダッシュボードのスクリーンショットの中には、次の様に、CPU usage, Memory usage が表示されていますが、これまでのセットアップではグラフがありません。 これには、Heapster という名前のメトリックス・コレクターを設定する必要があります。 設定ガイドは、https://github.com/kubernetes/dashboard/wiki/Integrations にあります。

スクリーンショット 2018-04-17 23.01.41.png

まとめ

Vagrantの環境で構築したk8sクラスタに、ダッシュボードをデプロイして、ホストのブラウザからアクセスできる事を確認しました。 また、CPUとメモリのグラフを表示するためには、Heapsterの設定が必要な事がわかりました。 そして、設定を進めるにあたり、必要な資料は、Github https://github.com/kubernetes/dashboard にあるものが、最も最新であることも解りました。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.