LoginSignup
21
19

More than 5 years have passed since last update.

GKE で kubedash を使ってみた

Last updated at Posted at 2016-01-24

はじめに

Kubernetes のパフォーマンス解析 UI として kubedash があります。kubedash は、直近 1 時間のリソース利用率などを閲覧できます。今回は kubedash を GKE 上で使用する方法を紹介します。

cluster

環境

現時点でのバージョンは GKE (Kubernetes) v1.1 および kubedash 0.2.1 です。

kubedash

kubedash は Kubernetes Organization で開発されています。https://github.com/kubernetes/kubedash

How to install

kubedash の Docker Image は GCR にアップロードされています。また RC と Service の Spec ファイルが用意されています。まずは Spec ファイルをダウンロードします。https://github.com/kubernetes/kubedash/blob/master/deploy/kube-config.yaml

$ curl -O https://raw.githubusercontent.com/kubernetes/kubedash/master/deploy/kube-config.yaml
$ cat ./kube-config.yaml
---
  apiVersion: "v1"
  kind: "ReplicationController"
  metadata:
    labels:
      name: "kubedash"
    name: "kubedash"
    namespace: "kube-system"
  spec:
    replicas: 1
    selector:
      name: "kubedash"
    template:
      metadata:
        labels:
          name: "kubedash"
      spec:
        containers:
          -
            image: "gcr.io/google_containers/kubedash:v0.2.1"
            name: "kubedash"
            command:
              - "/kubedash"
            resources:
              limits:
                cpu: 50m
                memory: 100Mi
            volumeMounts:
              -
                name: "ssl-certs"
                mountPath: "/etc/ssl/certs"
                readOnly: true
        volumes:
          -
            name: "ssl-certs"
            hostPath:
              path: "/etc/ssl/certs"

---
  apiVersion: "v1"
  kind: "Service"
  metadata:
    labels:
      name: "kubedash"
    name: "kubedash"
    namespace: "kube-system"
  spec:
    type: "LoadBalancer"
    ports:
      -
        port: 80
        targetPort: 8289
    selector:
      name: "kubedash"

実際に kubectl で Spec ファイルを指定して RC と Service を作成します。

$ kubectl create -f ./kube-config.yaml
replicationcontroller "kubedash" created
service "kubedash" created

作成された RC と Service を確認します。kubedash は kube-system ネームスペースに作成されるため --namespace=kube-system オプションが必要となります。

$ kubectl --namespace=kube-system get rc
CONTROLLER         CONTAINER(S)           IMAGE(S)                                             SELECTOR                       REPLICAS   AGE
heapster-v10       heapster               gcr.io/google_containers/heapster:v0.18.2            k8s-app=heapster,version=v10   1          4d
kube-dns-v9        etcd                   gcr.io/google_containers/etcd:2.0.9                  k8s-app=kube-dns,version=v9    1          4d
                   kube2sky               gcr.io/google_containers/kube2sky:1.11
                   skydns                 gcr.io/google_containers/skydns:2015-10-13-8c72f8c
                   healthz                gcr.io/google_containers/exechealthz:1.0
kube-ui-v4         kube-ui                gcr.io/google_containers/kube-ui:v4                  k8s-app=kube-ui,version=v4     1         4d
kubedash           kubedash               gcr.io/google_containers/kubedash:v0.2.1             name=kubedash                  1         28s
l7-lb-controller   default-http-backend   gcr.io/google_containers/defaultbackend:1.0          k8s-app=glbc,version=v0.5.1    1         4d
                   l7-lb-controller       gcr.io/google_containers/glbc:0.5.1

$ kubectl --namespace=kube-system get service
NAME                   CLUSTER_IP       EXTERNAL_IP       PORT(S)         SELECTOR           AGE
default-http-backend   10.107.241.11    nodes             80/TCP          k8s-app=glbc       4d
heapster               10.107.245.65    <none>            80/TCP          k8s-app=heapster   4d
kube-dns               10.107.240.10    <none>            53/UDP,53/TCP   k8s-app=kube-dns   4d
kube-ui                10.107.249.194   <none>            80/TCP          k8s-app=kube-ui    4d
kubedash               10.107.254.5     yyy.yyy.yyy.yyy   80/TCP          name=kubedash      4m

How to use

kubedash は Kubernetes Dashboard (kube-ui) と同等に Basic 認証が必要となります。まずは GKE Cluster の情報 (下記は一部のセキュリティ情報を伏字にしています) を取得します。

$ gcloud container clusters describe ennis-as-nginx-a
clusterIpv4Cidr: 10.104.0.0/14
createTime: '2016-01-20T16:20:56+00:00'
currentMasterVersion: 1.1.4
currentNodeCount: 3
currentNodeVersion: 1.1.4
endpoint: xxx.xxx.xxx.xxx
initialClusterVersion: 1.1.4
initialNodeCount: 3
instanceGroupUrls:
- https://www.googleapis.com/replicapool/v1beta2/projects/xxxxx/zones/asia-east1-b/instanceGroupManagers/gke-ennis-as-nginx-a-f7387859-group
loggingService: logging.googleapis.com
masterAuth:
  clientCertificate: xxxxx
  clientKey: xxxxx
  clusterCaCertificate: xxxxx
  password: boh7eeTh2eeM8phe
  username: admin
monitoringService: monitoring.googleapis.com
name: ennis-as-nginx-a
network: default
nodeConfig:
  diskSizeGb: 100
  machineType: n1-highcpu-2
  oauthScopes:
  - https://www.googleapis.com/auth/bigquery
  - https://www.googleapis.com/auth/compute
  - https://www.googleapis.com/auth/devstorage.read_only
  - https://www.googleapis.com/auth/logging.write
  - https://www.googleapis.com/auth/monitoring
nodeIpv4CidrSize: 24
selfLink: https://container.googleapis.com/v1/projects/xxxxx/zones/asia-east1-b/clusters/ennis-as-nginx-a
servicesIpv4Cidr: 10.107.240.0/20
status: RUNNING
zone: asia-east1-b

上記から endpoint は xxx.xxx.xxx.xxx で Basic 認証は admin/boh7eeTh2eeM8phe とわかります。Kubernetes Dashboard (kube-ui) は https://admin:boh7eeTh2eeM8phe@xxx.xxx.xxx.xxx/api/v1/proxy/namespaces/kube-system/services/kube-ui/ で接続できます。同じように kubedash は https://admin:boh7eeTh2eeM8phe@xxx.xxx.xxx.xxx/api/v1/proxy/namespaces/kube-system/services/kubedash/ で接続できます。

Features

Kubernetes Dashboard (kube-ui) は GKE Cluster を構成する各 Node の CPU, Memory, Filesystem リソースを確認できます。また、Cluster 上で、どのような Pod, RC, Service が 稼働しているかを閲覧できます。kubedash は Cluster 全体のパフォーマンスや、細かい単位でのリソース使用率を確認できます。

Cluster

Cluster タブでは Cluster 全体のパフォーマンスを確認できます。直近 1 日までの CPU および Memory の利用率サマリーと、直近 1 時間までの利用率グラフが表示されます。

cluster

Nodes

Nodes タブでは Cluster を構成する Node 毎のリソース使用率を確認できます。

node list

Node を選択すると、直近 1 日までの CPU および Memory の利用率サマリーと、直近 1 時間までの利用率グラフが表示されます。また、選択した Node 上で「どの Pod が動作しているか」や「選択した Pod のリソース使用率」を追うことができます。

node detail

Namespaces

Namespaces タブでは Cluster に存在する Namespace 毎のリソース使用率を確認できます。

namespace list

Namespace を選択すると、直近 1 日までの CPU および Memory の利用率サマリーと、直近 1 時間までの利用率グラフが表示されます。また、選択した Namespace 上で「どの Pod が動作しているか」や「選択した Pod のリソース使用率」を追うことができます。

namespace detail

Security

ダウンロードした Spec ファイルの Service 定義を見ると type: "LoadBalancer" となっています。つまり GKE 上でこの Service を作成すると、通信を許可する Firewall が作成され External IP (Global IP) が割り当てられます。また External IP 経由のリクエストは認証なしでアクセスできます。

手順通りに進めている場合は kubedash Service の External IP を確認して http://yyy.yyy.yyy.yyy:80/ で開ける状況になっていると思います。無線カメラを admin/admin で公開している状況と同じですね。 ... さすがに内部情報全公開は良くないため対策しましょう。まずは以前作成した kubedash の RC と Service を削除します。

$ kubectl --namespace=kube-system delete rc kubedash
replicationcontroller "kubedash" deleted

$ kubectl --namespace=kube-system delete service kubedash
service "kubedash" deleted

次に kubedash の Spec ファイルを変更します。具体的には Service の type を ClusterIP に変更します。これによって、kubedash へのアクセスを Kubernetes API 経由に限定できるため Kubernetes Dashboard (kube-ui) と同等に Basic 認証をかけることができます。

$ cp ./kube-config.yaml ./kube-config-fixed.yaml
$ gsed -i 's/LoadBalancer/ClusterIP/g' ./kube-config-fixed.yaml
$ diff ./kube-config.yaml ./kube-config-fixed.yaml
48c48
<     type: "LoadBalancer"
---
>     type: "ClusterIP"

$ kubectl create -f ./kube-config-fixed.yaml
replicationcontroller "kubedash" created
service "kubedash" created

作成された RC と Service を確認します。kubedash Service の External IP が <none> となっていれば OK です。

$ kubectl --namespace=kube-system get rc
CONTROLLER         CONTAINER(S)           IMAGE(S)                                             SELECTOR                       REPLICAS   AGE
heapster-v10       heapster               gcr.io/google_containers/heapster:v0.18.2            k8s-app=heapster,version=v10   1          4d
kube-dns-v9        etcd                   gcr.io/google_containers/etcd:2.0.9                  k8s-app=kube-dns,version=v9    1          4d
                   kube2sky               gcr.io/google_containers/kube2sky:1.11
                   skydns                 gcr.io/google_containers/skydns:2015-10-13-8c72f8c
                   healthz                gcr.io/google_containers/exechealthz:1.0
kube-ui-v4         kube-ui                gcr.io/google_containers/kube-ui:v4                  k8s-app=kube-ui,version=v4     1         4d
kubedash           kubedash               gcr.io/google_containers/kubedash:v0.2.1             name=kubedash                  1         3m
l7-lb-controller   default-http-backend   gcr.io/google_containers/defaultbackend:1.0          k8s-app=glbc,version=v0.5.1    1         4d
                   l7-lb-controller       gcr.io/google_containers/glbc:0.5.1

$ kubectl --namespace=kube-system get service
NAME                   CLUSTER_IP       EXTERNAL_IP   PORT(S)         SELECTOR           AGE
default-http-backend   10.107.241.11    nodes         80/TCP          k8s-app=glbc       4d
heapster               10.107.245.65    <none>        80/TCP          k8s-app=heapster   4d
kube-dns               10.107.240.10    <none>        53/UDP,53/TCP   k8s-app=kube-dns   4d
kube-ui                10.107.249.194   <none>        80/TCP          k8s-app=kube-ui    4d
kubedash               10.107.249.68    <none>        80/TCP          name=kubedash      3m

まとめ

今回はパフォーマンス解析 UI の kubedash を GKE 上で使用する方法を紹介しました。

GKE のリソースモニタリングツールとしては Kubernetes Dashboard あるいは Google Cloud Monitoring (StackDriver) を使うことが多いと思います。しかしながら Kubernetes Dashboard は機能的に不足していて、Cloud Monitoring は高機能ですが動作が重たいと感じています。

kubedash はその中間に当たるようなツールとして活用しており、直近 1 時間に限られますが、各 Pod のリソース使用率も追うことができて、とても軽いので手放せないツールになってきました。

おわりに

この内容を gcp ja night #31 で軽く触れましたが、補足版として GKE 上で使用する方法を書いてみました。発表資料も併せてご覧ください!

http://gcpja.connpass.com/event/23874/
http://www.slideshare.net/katsutoshinagaoka/gke-57322091

21
19
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
21
19