クラスターのご利用ガイド

このガイドでは、主にkubectlhelmコマンドを利用します。このコマンドを利用するためには、クラスターを制御するためにKubernetes Serviceのコンソール画面で設定ファイルをダウンロードした後、次の方法のいずれか一方を選択して利用します。

  • $HOME/.kube/configに設定ファイルを追加
  • kubectlhelmコマンドの利用の際、--kubeconfig="設定ファイル"のオプションを追加

kubectlをインストールする

kubectlは、CLIを利用してクラスターを制御できる機能を提供します。

OS別にkubectlをインストールする

kubeconfigの環境変数を設定する

例示:macOS/Linux $KUBE_CONFIGの環境変数を指定する

$ export KUBE_CONFIG="${HOME}/Downloads/kubeconfig-1865.yaml"
$ echo $KUBE_CONFIG
/Users/azamara/Downloads/kubeconfig-1865.yaml

$ kubectl --kubeconfig=$KUBE_CONFIG get nodes
NAME                 STATUS   ROLES   AGE   VERSION
nks-pool-1865-w2zy   Ready    node    4d    v1.12.3
nks-pool-1865-w2zz   Ready    node    4d    v1.12.3

例示:Windows Powershell $KUBE_CONFIGの環境変数を指定する

> $KUBE_CONFIG=$HOME+"\Downloads\kubeconfig-1865.yaml"
> $KUBE_CONFIG
C:\Users\NAVER\Downloads\kubeconfig-1865.yaml
> kubectl --kubeconfig=$KUBE_CONFIG get nodes
NAME                 STATUS   ROLES   AGE    VERSION
nks-pool-1865-w2zy   Ready    node    4d5h   v1.12.3
nks-pool-1865-w2zz   Ready    node    4d5h   v1.12.3

例示:Windows Command Prompt $KUBE_CONFIGの環境変数を指定する

> SET KUBE_CONFIG=%USERPROFILE%\Downloads\kubeconfig-1865.yaml
> kubectl --kubeconfig=%KUBE_CONFIG% get nodes
NAME                 STATUS   ROLES   AGE    VERSION
nks-pool-1865-w2zy   Ready    node    4d5h   v1.12.3
nks-pool-1865-w2zz   Ready    node    4d5h   v1.12.3

Kubernetesのダッシュボードに接続する

Kubernetesのダッシュボード(Dashboard)は、CLIの代わりにGUIを介してクラスターの確認及び制御できる機能を提供します。

Kubernetesのダッシュボードに接続するためのトークンを獲得する

トークン情報を確認する

$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system get secret | grep kubernetes-dashboard-token
kubernetes-dashboard-token-56h7n                 kubernetes.io/service-account-token   3      2d3h

Secretリストからkubernetes-dashboard-token名を確認し、次のようなコマンドを通じて当該トークン情報を確認することができます。

$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system describe secret kubernetes-dashboard-token-56h7n
Name:         kubernetes-dashboard-token-56h7n
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard
              kubernetes.io/service-account.uid: 77036f26-55de-11e9-b757-f220cd3abfc8

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZ...

トークン値のみを獲得する

次のように、トークン値のみを確認できる方法は、awkコマンドに対応される場合のみに利用することができます。

$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system describe secret \
$(kubectl --kubeconfig=$KUBE_CONFIG -n kube-system get secret | awk '/^kubernetes-dashboard-token/{print $1}') | awk '$1=="token:"{print $2}'
eyJhbGciOiJSUzI1NiIsImtpZ...

KubernetesのダッシュボードのProxyを駆動する

$ kubectl --kubeconfig=$KUBE_CONFIG proxy

上記のコマンドを実行した後、ブラウザから次のリンクに接続すると、ダッシュボードの初期画面を確認することができます。


以前段階で獲得したトークン値(eyJhbGciOiJSUzI1NiIsImtpZ...)を、当該初期画面に入力し、ログインをクリックします。

これで、ダッシュボード画面を利用して、簡単にクラスターの確認及び制御を行うことができます。

外部ドメインを通じたKubernetesのダッシュボードに接続する

外部ドメインにKubernetesのダッシュボードに接続することを希望する場合、'system:anonymous'権限を追加しなければなりません。

接続アドレスを確認する

以下のコマンドを利用し、kubernetes-dashboardアドレスを確認することができます。

$ kubectl --kubeconfig=$KUBE_CONFIG cluster-info
...
kubernetes-dashboard is running at https://CLUSTER_ID.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
...

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
  • 接続アドレスの例示:https://CLUSTER_ID.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

基本的に、外部接続が遮断されている状態であるため、次の段階であるsystem:anonymousの権限追加を行った後、上記のアドレスに接続し、Kubernetesのダッシュボード接続のためのトークンの獲得方法の段階でトークンを確認した後、そのトークン値(eyJhbGciOiJSUzI1NiIsImtpZ...)を利用してログインした後、Kubernetesのダッシュボードを利用することができます。

system:anonymousの権限追加

この権限を追加すると、外部アドレスを通じて、Kubernetesのダッシュボードにアクセスすることができます。

$ cat <<EOF | kubectl --kubeconfig=$KUBE_CONFIG apply -f -
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: kubernetes-dashboard-anonymous
rules:
- apiGroups: [""]
  resources: ["services/proxy"]
  resourceNames: ["https:kubernetes-dashboard:"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- nonResourceURLs: ["/ui", "/ui/*", "/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/*"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-anonymous
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubernetes-dashboard-anonymous
subjects:
- kind: User
  name: system:anonymous
EOF

system:anonymousの権限削除

この権限を削除すると、外部アドレスを通じてKubernetesのダッシュボードに接続することができません。

$ kubectl --kubeconfig=$KUBE_CONFIG delete clusterrole kubernetes-dashboard-anonymous
$ kubectl --kubeconfig=$KUBE_CONFIG delete clusterrolebinding kubernetes-dashboard-anonymous

Weavescopeをインストールする

Weavescope은 Kubernetesクラスターのワーカーノード、Pod、コンテナーのようなリソース情報を一目で確認できる視覚化ツールです。

Weavescopeをインスロールする

$ kubectl --kubeconfig=$KUBE_CONFIG apply -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl --kubeconfig=$KUBE_CONFIG version | base64 | tr -d '\n')"
namespace/weave created
serviceaccount/weave-scope created
clusterrole.rbac.authorization.k8s.io/weave-scope created
clusterrolebinding.rbac.authorization.k8s.io/weave-scope created
deployment.apps/weave-scope-app created
service/weave-scope-app created
daemonset.extensions/weave-scope-agent created

ローカルマシンからWeavescopeに接続する

$ export POD_NAME=$(kubectl --kubeconfig=$KUBE_CONFIG get pods -n weave -l "name=weave-scope-app" -o jsonpath="{.items[0].metadata.name}"); echo $POD_NAME; kubectl --kubeconfig=$KUBE_CONFIG -n weave port-forward $POD_NAME 14040:4040
weave-scope-app-79b7f7b9b6-rx99f
Forwarding from 127.0.0.1:14040 -> 4040
Forwarding from [::1]:14040 -> 4040

上記のコマンドを実行した後、ブラウザから次のリンクに接続すると、Weavescope画面を確認することができます。

  • http://localhost:14040

Kubernetesのサービスを通じたロードバランサーと連携する

NAVERクラウドプラットフォームのKubernetes Serviceは、Kubernetesのサービスを作る際に、タイプをLoadBalancerに指定した場合、ロードバランサーインスタンスを自動的に作ります。 ロードバランサーの設定は、サービスマニフェスト(Manifest)のアノテーション(Annotation)を通じてサポートします。

次のロードバランサーの設定のためのアノテーションを提供します。

設定値 説明 備考
service.beta.kubernetes.io/ncloud-load-balancer-backend-protocol ロードバランサープロトコル。
次の値のうち1つを選択:tcp、http、https、ssl
基本値tcp
service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol Proxyプロトコルの有効化の有無。
次の値のうち1つを選択:true/false
ロードバランサープロトコルの値がssl或いはtcpに選択されている時に有効。
service.beta.kubernetes.io/ncloud-load-balancer-internal プライベートネットワークタイプのロードバランサー作成の設定。
次の値のうち1つを選択: true/false
基本値false
service.beta.kubernetes.io/ncloud-load-balancer-ssl-cert ロードバランサープロトコルがhttps或いはsslの時にlistenerの構成のためのSSL Certificate名 Certificate Managerに登録されている証明書名を入力
service.beta.kubernetes.io/ncloud-load-balancer-ssl-ports ロードバランサーインスタンスが https或いはsslプロトコルの時、追加でインスタンスに割り当てられるポート入力。
'、'で区分して入力
入力例:"443,6443"
service.beta.kubernetes.io/ncloud-load-balancer-l7-healthcheck-path ロードバランサープロトコルがhttp或いはhttpsの時、L7 HealthcheckのためのPath 基本値"/"
service.beta.kubernetes.io/ncloud-load-balancer-description 作られるロードバランサーインスタンスに対するメモ入力
service.beta.kubernetes.io/ncloud-load-balancer-algorithm-type ロードバランシングアルゴリズム.
次の値のうち1つを選択:RR(ROUND ROBIN)、LC(LEAST_CONNECTION)、SIPHS(Source IP Hash)
基本値RR
service.beta.kubernetes.io/ncloud-load-balancer-termination-protection タイプがLoadBalancerに指定されたService削除の際、ロードバランシングの自動削除防止オプション 基本値false

ClientのIPを確認しようとする場合には、service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocolの値をtrueと宣言します。詳しい内容は、[Ingressチュートリアル]をご参照ください。

ロードバランサーインスタンスを作る

Kubernetesのサービスを通じてロードバランサーインスタンスを作ろうとする場合、サービスマニフェストのタイプを次のように指定します。

"type": "LoadBalancer"

以下は、そのタイプの適用されたyamlの設定ファイルの例です。 プライベートネットワークタイプのロードバランサーインスタンスを作るためのアノテーションが追加されていることを確認します。

kind: Service
apiVersion: v1
metadata:
  name: example-service
  annotations:
    service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"
spec:
  ports:
  - port: 8765
    targetPort: 9376
  selector:
    app: example
  type: LoadBalancer

上記の内容をnks-lb.ymlで作り、kubectl apply -f nks-lb.ymlを通じて配布すると、NAVERクラウドプラットフォームのロードバランサーインスタンスが自動的に作られます。 作成には、数分かかることがあります。

作られたロードバランサーインスタンスのプライベートIPアドレスを確認するためには、以下のコマンドを利用します。IPアドレスは、EXTERNAL-IP列で確認することができます。

$ kubectl --kubeconfig=$KUBE_CONFIG get svc example-service
NAME              TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)          AGE
example-service   LoadBalancer   172.16.101.104   10.39.10.118   8765:30365/TCP   2m11s

kubectl exposeコマンドを利用したロードバランサーインスタンスを作る

上記で言及した方法の他にも、kubectl exposeコマンドと--type=LoadBalancerフラグを利用し、ロードバランサーインスタンスを作ることができます。

ロードバランサーインスタンスの作成例のために、以下のようなコマンドを利用し、my-nginx名を有するDeploymentを配布します。その配布を通じ、Nginx Podを駆動することができます。

$ kubectl --kubeconfig=$KUBE_CONFIG create deployment --image nginx my-nginx

以下のコマンドを利用し、ロードバランサーインスタンスを作ることができます。

$ kubectl --kubeconfig=$KUBE_CONFIG expose deployment my-nginx --port=80 --type=LoadBalancer

ロードバランサーインスタンスを削除する

ロードバランサータイプで作られたkubernetesのサービスリソースは、自動的に作られたNAVERクラウドプラットフォームのロードバランサー(Load Balancer)インスタンスと連携されます。 kerbernetesから当該タイプのサービスを削除する場合、自動的にロードバランサーインスタンスも削除されます。

以下のコマンドを利用して作られたサービスを確認することができます。サービスに対するタイプは、TYPE列で確認することができます。

$ kubectl --kubeconfig=$KUBE_CONFIG get service
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
my-nginx     LoadBalancer   172.16.188.167   slb-904582.ncloudslb.com     80:32681/TCP   21s

ロードバランサータイプのkubernetesのサービスリソースを削除するために、次のようなコマンドを利用します。

$ kubectl --kubeconfig=$KUBE_CONFIG delete service my-nginx
service "my-nginx" deleted

kubernetesのサービスリソースが削除されると同時に、ロードバランサーインスタンスも削除されます。その作業には、数分かかることがあります。

Helmをインストールする

Helmは、kubernetes Package ManagerでクライアントであるHelmとclusterと内にインストールされるtillerサーバで構成されています。Helmを利用するためには、kubectlのインストール及びkubeconfigの設定が先行されなければなりません。

Helmのインストールは、OS Platformに合わせて次のページのご案内に従って行います。

このガイドは、Helm v2を基準に作成されました。

例示:macOS

$ brew install kubernetes-helm

Helmを利用するためには、tillerの配布を行わなければならないが、配布前にtillerのclusterrolebinding権限を与える必要があります。

Cluster role bindingの追加

$ kubectl --kubeconfig=$KUBE_CONFIG create clusterrolebinding tiller-cluster-admin \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:default

clusterrolebinding.rbac.authorization.k8s.io/tiller-cluster-admin created

clusterrolebinding権限を追加した後、Helmの初期化でtillerを配布します。

Helmの初期化

$ helm --kubeconfig=$KUBE_CONFIG init
...

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

初期化コマンドの実行後、tiller-deploy Podが配布完了していることを確認することができ、STATUSがRunning状態ならHelmを利用できる状態になります。

tiller-deploy podを確認する

$ kubectl --kubeconfig=$KUBE_CONFIG get pods -n kube-system -w
NAME                                            READY   STATUS    RESTARTS   AGE
...
tiller-deploy-845cffcd48-llds2                  1/1     Running   0          18h
...

Helmを利用したアプリケーションをインストールする

Helmを利用し、Jenkinsアプリケーションのインストール及び接続できる方法を説明します。

参考事項

アプリケーションをインストールする際、クラスターに基本的にインストールされているCSIによってPersistentVolumeが作られ、それに対するストレージ料金が発生することがあります。
CSIに関する詳しい内容は、[ブロックストレージCSIガイド]をご確認ください。

Jenkinsをインストールする

$ helm --kubeconfig=$KUBE_CONFIG install --name=ci stable/jenkins
NAME:   ci
LAST DEPLOYED: Wed Feb 20 15:38:07 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME              AGE
ci-jenkins        0s
ci-jenkins-tests  0s

==> v1/PersistentVolumeClaim
ci-jenkins  0s

==> v1/Service
ci-jenkins-agent  0s
ci-jenkins        0s

==> v1/Deployment
ci-jenkins  0s

==> v1/Pod(related)

NAME                         READY  STATUS   RESTARTS  AGE
ci-jenkins-7fb57bf7bb-t8dd9  0/1    Pending  0         0s

==> v1/Secret

NAME        AGE
ci-jenkins  0s


NOTES:
1. Get your 'admin' user password by running:
  printf $(kubectl get secret --namespace default ci-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
2. Get the Jenkins URL to visit by running these commands in the same shell:
  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        You can watch the status of by running 'kubectl get svc --namespace default -w ci-jenkins'
  export SERVICE_IP=$(kubectl get svc --namespace default ci-jenkins --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")
  echo http://$SERVICE_IP:8080/login

3. Login with the password from step 1 and the username: admin

For more information on running Jenkins on Kubernetes, visit:
https://cloud.google.com/solutions/jenkins-on-container-engine
  • ユーザー名:admin
  • パスワード:secretを通じて確認

Jenkinsのインストールが完了すると、結果画面からアカウント情報を確認できるガイドを提供し、PV情報を確認することができます。

PVC、PVを確認する

$ kubectl --kubeconfig=$KUBE_CONFIG get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
ci-jenkins   Bound    pvc-1548887b-34da-11e9-89a3-f220cd2fe758   10Gi       RWO            nks-block-storage    23s

$ kubectl --kubeconfig=$KUBE_CONFIG get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS      REASON   AGE
pvc-1548887b-34da-11e9-89a3-f220cd2fe758   10Gi       RWO            Delete           Bound    default/ci-jenkins   nks-block-storage          23s

Secretを利用してJenkinsアクセスアカウントのパスワードを確認する

$ kubectl --kubeconfig=$KUBE_CONFIG get secret --namespace default ci-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode;echo
Oq307Rj2Yu

これで、ローカルマシンからkubectlコマンド中でport-forwardを利用してインストールされたJenkinsに接続することができます。

ローカルマシンからJenkinsに接続する

$ export POD_NAME=$(kubectl --kubeconfig=$KUBE_CONFIG get pods -l "app=ci-jenkins" -o jsonpath="{.items[0].metadata.name}"); echo $POD_NAME; kubectl --kubeconfig=$KUBE_CONFIG port-forward $POD_NAME 18080:8080
Forwarding from [::1]:18080 -> 8080
Forwarding from 127.0.0.1:18080 -> 8080

上記のコマンドを実行した後、ブラウザから次のリンクに接続すると、Jenkinsのログイン画面を確認することができます。

Jenkinsのアカウント情報を入力した後でログインすると、Jenkinsの初期画面に接続することができます。

Helmを利用したPrometheus/Grafanaのインストール及びクラスターをモニタリングする

このガイドでは、モニタリングシステムであるPrometheusと分析プラットフォームであるGrafanaとを連携し、クラスターをモニタリングする方法について説明します。 PrometheusとGrafanaとに対する詳しい内容は、下の公式ホームページにてご確認いただけます。

参考事項

アプリケーションをインストールする際、クラスターに基本的にインストールされているCSIによってPersistentVolumeが作られ、それに対するストレージ料金が発生することがあります。
CSIに対する詳しい内容は、[ブロックストレージCSIガイド]をご確認ください。

Prometheusをインストールする

まず、モニタリングのための別途のNamespaceを作成します。

Namespaceを作成する

$ kubectl --kubeconfig=$KUBE_CONFIG create namespace pg

Helmコマンドを利用し、Prometheusをインストールします。

HelmでPrometheusをインストールする

$ helm --kubeconfig=$KUBE_CONFIG install --name prometheus stable/prometheus --version 6.7.4 --namespace pg
NAME:   prometheus
LAST DEPLOYED: Thu Feb 28 11:24:30 2019
NAMESPACE: pg
STATUS: DEPLOYED

RESOURCES:
==> v1/Pod(related)
NAME                                            READY  STATUS             RESTARTS  AGE
prometheus-node-exporter-pdrq7                  0/1    ContainerCreating  0         1s
prometheus-alertmanager-7b945bb544-87knh        0/2    ContainerCreating  0         1s
prometheus-kube-state-metrics-86996f7fff-tfm92  0/1    Pending            0         1s
prometheus-pushgateway-b9477487f-42bhh          0/1    Pending            0         1s
prometheus-server-6f9d569489-q75mx              0/2    Pending            0         1s

==> v1/PersistentVolumeClaim

NAME                     AGE
prometheus-alertmanager  1s
prometheus-server        1s

==> v1beta1/ClusterRole
prometheus-kube-state-metrics  1s
prometheus-server              1s

==> v1beta1/ClusterRoleBinding
prometheus-kube-state-metrics  1s
prometheus-server              1s

==> v1/Service
prometheus-alertmanager        1s
prometheus-kube-state-metrics  1s
prometheus-node-exporter       1s
prometheus-pushgateway         1s
prometheus-server              1s

==> v1beta1/DaemonSet
prometheus-node-exporter  1s

==> v1/ConfigMap
prometheus-alertmanager  1s
prometheus-server        1s

==> v1/ServiceAccount
prometheus-alertmanager        1s
prometheus-kube-state-metrics  1s
prometheus-node-exporter       1s
prometheus-pushgateway         1s
prometheus-server              1s

==> v1beta1/Deployment
prometheus-alertmanager        1s
prometheus-kube-state-metrics  1s
prometheus-pushgateway         1s
prometheus-server              1s


NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.pg.svc.cluster.local


Get the Prometheus server URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace pg -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace pg port-forward $POD_NAME 9090


The Prometheus alertmanager can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-alertmanager.pg.svc.cluster.local


Get the Alertmanager URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace pg -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace pg port-forward $POD_NAME 9093


The Prometheus PushGateway can be accessed via port 9091 on the following DNS name from within your cluster:
prometheus-pushgateway.pg.svc.cluster.local


Get the PushGateway URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace pg -l "app=prometheus,component=pushgateway" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace pg port-forward $POD_NAME 9091

For more information on running Prometheus, visit:
https://prometheus.io/

ローカルマシンからPrometheusに接続する

$ export POD_NAME=$(kubectl --kubeconfig=$KUBE_CONFIG get pods --namespace pg -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --kubeconfig=$KUBE_CONFIG --namespace pg port-forward $POD_NAME 9090

上記のコマンドの実行後、ブラウザから次のリンクからPrometheusに接続することができます。

Grafanaをインストールする

Grafanaをインストールする前にPrometheusとの連携を設定するために、以下のvalues.ymlを先に作成します。 datasources.urlの値は、http://<prometheus-server-name>です。上記のガイドに沿って行ったなら、<prometheus-server-name>prometheus-serverであるため、http://prometheus-serverに設定します。

values.yml

persistence:
  enabled: true
  accessModes:
    - ReadWriteOnce
  size: 5Gi

datasources:
 datasources.yaml:
   apiVersion: 1
   datasources:
   - name: Prometheus
     type: prometheus
     url: http://prometheus-server
     access: proxy
     isDefault: true

dashboards:
    kube-dash:
      gnetId: 6663
      revision: 1
      datasource: Prometheus
    kube-official-dash:
      gnetId: 2
      revision: 1
      datasource: Prometheus

dashboardProviders:
  dashboardproviders.yaml:
    apiVersion: 1
    providers:
    - name: 'default'
      orgId: 1
      folder: ''
      type: file
      disableDeletion: false
      editable: true
      options:
        path: /var/lib/grafana/dashboards

上記のファイルの作成後、-f values.ymlオプションとともにHelmを利用してGrafanaをインストールします。

HelmでGrafanaをインストールする

$ helm --kubeconfig=$KUBE_CONFIG install --name grafana stable/grafana --version 1.11.6 -f values.yml --namespace pg
NAME:   grafana
LAST DEPLOYED: Thu Feb 28 14:38:24 2019
NAMESPACE: pg
STATUS: DEPLOYED

RESOURCES:
==> v1beta1/RoleBinding
NAME     AGE
grafana  0s

==> v1/Service
grafana  0s

==> v1beta2/Deployment
grafana  0s

==> v1/Pod(related)

NAME                      READY  STATUS   RESTARTS  AGE
grafana-76dbd66b77-d2dkl  0/1    Pending  0         0s

==> v1beta1/PodSecurityPolicy

NAME     AGE
grafana  0s

==> v1/Secret
grafana  0s

==> v1/ConfigMap
grafana                  0s
grafana-dashboards-json  0s

==> v1/ClusterRole
grafana-clusterrole  0s

==> v1/PersistentVolumeClaim
grafana  0s

==> v1/ServiceAccount
grafana  0s

==> v1/ClusterRoleBinding
grafana-clusterrolebinding  0s

==> v1beta1/Role
grafana  0s


NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace pg grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster:

   grafana.pg.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:

     export POD_NAME=$(kubectl get pods --namespace pg -l "app=grafana,component=" -o jsonpath="{.items[0].metadata.name}")
     kubectl --namespace pg port-forward $POD_NAME 3000

3. Login with the password from step 1 and the username: admin

Secretを通じてGrafanaの接続アカウントのパスワードを確認する

$ kubectl --kubeconfig=$KUBE_CONFIG get secret --namespace pg grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

ローカルマシンからGrafanaに接続する

$ export POD_NAME=$(kubectl --kubeconfig=$KUBE_CONFIG get pods --namespace pg -l "app=grafana" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --kubeconfig=$KUBE_CONFIG --namespace pg port-forward $POD_NAME 3000

上記のコマンドを実行した後、Secretを通じて得たパスワードで以下のリンクからGrafanaのダッシュボードに接続することができます。

ダッシュボードを追加する

連携されたPrometheusのdataを利用してモニタリングするためには、以下の2つのKubernetes用のダッシュボードを追加しなければなりません。

  1. Grafanaの左のメニューからCreate > importボタンを選択します。

  1. 上のダッシュボードリンクを入力した後、Loadします。

  1. data sourceをPrometheusに選択した後、importボタンを選択します。

  1. importが完了すると、上記のようにダッシュボードを確認することができます。

  2. 別のダッシュボードも同じ方法で追加します。

に対する検索結果は~件です。 ""

    に対する検索結果がありません。 ""

    処理中...