Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

PFCP チュートリアル: ワークロードをデプロイする

このページでは、クラスタを使用してサーバのワークロードのデプロイを行い、モニタリングサービスの使用方法を学びます。

事前準備

左カラム「クラスタに接続する」の手順を実行して下記を完了してください。

  1. PFCP ポータルにログインできている
  2. クラスタへの接続が構成できている

Namespace の作成

本チュートリアルで使用する Namespace1 を作成します。

Info

Namespace の作成には「組織管理者」の権限が必要です。「一般ユーザ」の権限では Namespace の作成に失敗します。

一般ユーザでの操作の場合は、組織の組織管理者に対して Namespace の作成を依頼してください。

  1. ポータルのネームスペースにアクセスします。

  2. ネームスペースの作成 画面を開きます。

    • クラスタ名: 利用するクラスタを選択
    • ネームスペース名: org-<組織名>--<任意の値> 2
  3. 作成 ボタンをクリックすると、Namespace が作成されます。

  4. kubectl コマンド実行時のデフォルトの Namespace として、作成した Namespace を設定します。

    $ kubectl config set-context --current --namespace=<作成したNamespace名>
    
  5. Namespace が作成されていること、設定が正しいことを確認します。 kubectl get pod を実行してください。エラーが出なければ正しく設定されています。エラーが出力された場合は、Namespace が存在することを確認のうえ、実行コマンドが正しいかを再度確認してください。

    // 正しく設定されている場合
    $ kubectl get pod
    No resources found in <作成したNamespace名> namespace.
    
    // 設定に誤りがある場合
    $ kubectl get pod
    Error from server (Forbidden): pods is forbidden: User "oidc:org-<組織名>/<ユーザ名>" cannot list resource "pods" in API group "" in the namespace "<作成したNamespace名>"
    

ワークロードのデプロイ

PFCP の Kubernetes クラスタを用いて、サンプルの Pod を実行します3。 加えて、作成した Pod をインターネットに対して公開し、ブラウザからアクセスできることを確認します。

なお、サンプルのコンテナイメージとして podinfo を使用しています。

  1. 以下のコマンドを実行し、podinfo を実行する Deployment を作成します。

    $ kubectl create deployment podinfo --image=stefanprodan/podinfo --port=9898
    deployment.apps/podinfo created
    
  2. Pod の起動を確認します。

    $ kubectl get pod
    NAME                       READY   STATUS    RESTARTS   AGE
    podinfo-554c877494-p58gf   1/1     Running   0          25s
    
  3. 次に、起動した Pod を公開するための Service を作成します。

    $ cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: podinfo
      name: podinfo
    spec:
      ports:
      - name: http
        port: 8080
        protocol: TCP
        targetPort: 9898
      selector:
        app: podinfo
    EOF
    service/podinfo created
    
    $ kubectl get service
    NAME      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    podinfo   ClusterIP   10.100.212.250   <none>        8080/TCP   77s
    
  4. 作成された Service をインターネット公開するために、Ingress を作成します。

    $ HOST=podinfo-<任意の名前>.<組織名>.sr1-01.ingress.pfcomputing.com
    $ kubectl create ingress podinfo-ingress --class=nginx --rule="${HOST}/*=podinfo:8080"
    ingress.networking.k8s.io/podinfo-ingress created
    
    $ kubectl get ingress
    NAME              CLASS   HOSTS          ...
    podinfo-ingress   nginx   <HOSTと同じ値>   ...
    
  5. ブラウザから https://<HOSTと同じ値> にアクセスします。podinfo の画面が表示されたら成功です。

モニタリングの確認

PFCP では、Grafana と Prometheus がマネージドサービスとして提供されています。 これらを使用して、作成した Pod のリソース仕様状況を確認します。

  1. Grafana のダッシュボードにアクセスします。ポータルのトップページ に表示されているリンクからアクセスできます。

  2. 左上のハンバーガーアイコンから Dashboards > kube-prometheus > Kubernetes / Compute Resources / Pod と辿ることで、Pod のリソース使用状況を確認できます。 Namespace 及び Pod 名は適切なものをプルダウンで選択します。以下のような画面が確認できます。

    GrafanaでPodのリソース使用状況を確認

  3. Pod で計装されているメトリックについても、Prometheus による収集と Grafana による可視化が可能です。 例として、上記で作成した podinfo Pod のメトリック4を収集します。

    以下のServiceMonitorカスタムリソースを作成します。

    $ cat << EOF | kubectl apply -f -
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: podinfo
    spec:
      selector:
        matchLabels:
          app: podinfo
      endpoints:
      - interval: 30s
        port: http
        path: /metrics
    EOF
    servicemonitor.monitoring.coreos.com/podinfo created
    
  4. podinfo のスクレイプに成功し、メトリックの収集ができていることを確認します。 Prometheus の WebUI にアクセスし、 上部のタブから Status > Targets を選択します。 <作成したNamespace名>/podinfo/0 がターゲット一覧に表示され、ステータスが Up になっていれば、正しくスクレイプできています。

    Prometheusでターゲットの追加確認

  5. 収集したメトリックは、Grafana で可視化できます。 Grafana のダッシュボードを開き、左上のハンバーガーアイコンから Explore を選択します。 例として以下の PromQL クエリを実行すると、 /metrics endpoint がコールされた回数が時系列表示されます。

    sum by (pod) (rate(promhttp_metric_handler_requests_total{namespace="<作成したNamespace>", job="podinfo"}[$__rate_interval]))
    

    Grafanaで、Podのメトリックを可視化


  1. 作成した Namespace は、PFCP ではサブネームスペースとして扱われます。詳しくは 用語集 をご確認ください。

  2. 作成済の Namespace と異なる接尾辞をつける必要があります。複数人でチュートリアルを実施する場合は、ユーザ名の使用を推奨します。

  3. ワークロード実行の詳細については、公式ドキュメント をご確認ください。

  4. podinfoは、 /metrics でPrometheus用のメトリックを提供しています。