- 印刷する
- PDF
クラスターのご利用ガイド
- 印刷する
- PDF
Classic環境で利用できます。
このガイドでは、主にkubectl
、helm
コマンドを利用します。このコマンドを利用するためには、クラスターを制御するためにNcloud Kubernetes Serviceのコンソール画面で設定ファイルをダウンロードした後、次の方法のいずれか一方を選択して利用します。
$HOME/.kube/config
に設定ファイルを追加kubectl
、helm
コマンドの利用の際、--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
上記のコマンドを実行した後、ブラウザから次のリンクに接続すると、ダッシュボードの初期画面を確認することができます。
- http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=default
以前段階で獲得したトークン値(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を基準に作成されました。
- https://docs.helm.sh/using_helm/#installing-helm
例示: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のログイン画面を確認することができます。
- http://localhost:18080
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に接続することができます。
- http://localhost:9090
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のダッシュボードに接続することができます。
- http://localhost:3000
- ユーザー名:admin
- パスワード:secretを通じて確認
ダッシュボードを追加する
連携されたPrometheusのdataを利用してモニタリングするためには、以下の2つのKubernetes用のダッシュボードを追加しなければなりません。
- https://grafana.com/dashboards/8588
- https://grafana.com/dashboards/1621
- Grafanaの左のメニューからCreate > importボタンを選択します。
- 上のダッシュボードリンクを入力した後、Loadします。
- data sourceをPrometheusに選択した後、importボタンを選択します。
importが完了すると、上記のようにダッシュボードを確認することができます。
別のダッシュボードも同じ方法で追加します。