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

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

    • PDF

    Article Summary

    Classic環境で利用できます。

    このガイドでは、主にkubectlhelmコマンドを利用します。このコマンドを利用するためには、クラスターを制御するためにNcloud 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
    

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

    • http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=default

    nks-1-2-1_ja

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

    nks-1-2-2_ja

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

    外部ドメインを通じた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のダッシュボードを利用することができます。

    nks-1-2-1a_ja

    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

    nks-1-2-3_ja

    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-protocolProxyプロトコルの有効化の有無。
    次の値のうち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

    nks-1-2-5_ja

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

    nks-1-2-6_ja

    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

    nks-1-2-10_ja

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

    nks-1-2-11_ja

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

    nks-1-2-12_ja

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

    nks-1-2-13_ja

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

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


    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.