PFCP チュートリアル: ワークロードをデプロイする
このページでは、クラスタを使用してサーバのワークロードのデプロイを行い、モニタリングサービスの使用方法を学びます。
事前準備
左カラム「クラスタに接続する」の手順を実行して下記を完了してください。
- PFCP ポータルにログインできている
- クラスタへの接続が構成できている
Namespace の作成
本チュートリアルで使用する Namespace1 を作成します。
Namespace の作成には「組織管理者」の権限が必要です。「一般ユーザ」の権限では Namespace の作成に失敗します。
一般ユーザでの操作の場合は、組織の組織管理者に対して Namespace の作成を依頼してください。
-
ポータルのネームスペースにアクセスします。
-
ネームスペースの作成 画面を開きます。
- クラスタ名: 利用するクラスタを選択
- ネームスペース名:
org-<組織名>--<任意の値>
2
-
作成 ボタンをクリックすると、Namespace が作成されます。
-
kubectl コマンド実行時のデフォルトの Namespace として、作成した Namespace を設定します。
$ kubectl config set-context --current --namespace=<作成したNamespace名>
-
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 を使用しています。
-
以下のコマンドを実行し、podinfo を実行する Deployment を作成します。
$ kubectl create deployment podinfo --image=stefanprodan/podinfo --port=9898 deployment.apps/podinfo created
-
Pod の起動を確認します。
$ kubectl get pod NAME READY STATUS RESTARTS AGE podinfo-554c877494-p58gf 1/1 Running 0 25s
-
次に、起動した 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
-
作成された 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と同じ値> ...
-
ブラウザから
https://<HOSTと同じ値>
にアクセスします。podinfo の画面が表示されたら成功です。
モニタリングの確認
PFCP では、Grafana と Prometheus がマネージドサービスとして提供されています。 これらを使用して、作成した Pod のリソース仕様状況を確認します。
-
Grafana のダッシュボードにアクセスします。ポータルのトップページ に表示されているリンクからアクセスできます。
-
左上のハンバーガーアイコンから
Dashboards
>kube-prometheus
>Kubernetes / Compute Resources / Pod
と辿ることで、Pod のリソース使用状況を確認できます。 Namespace 及び Pod 名は適切なものをプルダウンで選択します。以下のような画面が確認できます。 -
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
-
podinfo のスクレイプに成功し、メトリックの収集ができていることを確認します。 Prometheus の WebUI にアクセスし、 上部のタブから
Status
>Targets
を選択します。<作成したNamespace名>/podinfo/0
がターゲット一覧に表示され、ステータスがUp
になっていれば、正しくスクレイプできています。 -
収集したメトリックは、Grafana で可視化できます。 Grafana のダッシュボードを開き、左上のハンバーガーアイコンから
Explore
を選択します。 例として以下の PromQL クエリを実行すると、/metrics
endpoint がコールされた回数が時系列表示されます。sum by (pod) (rate(promhttp_metric_handler_requests_total{namespace="<作成したNamespace>", job="podinfo"}[$__rate_interval]))