6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-04-17

この投稿は、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 にあるものが、最も最新であることも解りました。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?