Contents
KubernetesクラスターでPrometheusを導入する前に準備すること
KubernetesクラスターにPrometheusをデプロイするには、環境の確認と前提条件の整備が不可欠です。特にHelm CLIやPrometheus Operatorの理解は、スムーズなインストールに直結します。以下で必要な準備を確認してください。
Kubernetesクラスターの確認
まず、既存のKubernetesクラスターが正常に動作しているかを確認しましょう。kubectl get nodesコマンドでノード情報やクラスター状態をチェックし、リソース不足やネットワーク問題がないことを確かめます。また、クラスターにRBAC(Role-Based Access Control)が有効になっていることも重要です。
注意: クラスターのセキュリティ設定は、Prometheusの監視機能を安定して実行するための基盤となるため、事前に確認してください。
Helm CLIのインストール
HelmはKubernetesアプリケーションのパッケージ管理ツールで、Prometheusのデプロイを簡易化します。公式サイトから最新バージョンのHelm CLIをダウンロード・インストールし、helm versionコマンドで動作確認を行ってください。
Prometheus Operatorの概要
Prometheus OperatorはKubernetes用に設計されたオペレータで、ServiceMonitorやPodMonitorなどのカスタムリソースを介してメトリクス収集を自動化します。これにより、手動での設定や管理が不要となり、運用負荷の軽減が可能です。
最新情報: 前年までの
kube-prometheus-stackチャートではなく、Prometheus Operator自体を直接使用するケースが増えています。公式のカスタムリソースとOperatorの組み合わせで柔軟性が向上しています。
HelmチャートでPrometheusをインストールする手順
Helmチャートを使用することで、Prometheusのデプロイを効率的かつ再現性高く進められます。以下に具体的な手順を解説します。
Prometheus Operatorの導入
kube-prometheus-stackチャートは時代遅れになりつつあり、現在はPrometheus Operator自体を直接インストールする方法が推奨されます。公式リポジトリからOperatorを取得し、以下のように適用してください。
- リポジトリの追加:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts - リポジトリの更新:
helm repo update
重要: 以前は
kube-prometheus-stackを使用するケースが多かったため、注意が必要です。Operator本体を直接使うことで、カスタムリソースの管理やバージョンの統一性が得られます。
カスタム設定ファイルの作成
デフォルトの設定では、ストレージやセキュリティポリシーが適用されない場合があります。values.yamlファイルをカスタマイズし、以下のように設定します(例)。
|
1 2 3 4 5 6 7 |
# values.yaml prometheus: storageClass: "standard" retention: "15d" rbac: create: true |
デプロイコマンドの実行
準備が整ったら、Helmチャートを適用します。デプロイ時のオプションで--namespaceや--valuesを指定し、クラスター環境に合わせた設定を行います。
|
1 2 3 4 |
helm install prometheus prometheus-community/kube-prometheus-stack \ --namespace monitoring \ --values values.yaml |
ServiceMonitorの設定によるメトリクス収集
ServiceMonitorはPrometheusがKubernetesサービスを監視するためのカスタムリソースです。以下に作成手順とポイントを説明します。
apiVersionの更新
以前はmonitoring.coreos.com/v1でしたが、最新バージョンではv1beta1が推奨されています。以下の例のように変更してください。
|
1 2 3 4 5 6 7 8 9 10 11 |
apiVersion: monitoring.coreos.com/v1beta1 kind: ServiceMonitor metadata: name: example-service-monitor spec: selector: matchLabels: app: my-app endpoints: - port: metrics |
ターゲットサービスとの関連付け
ServiceMonitorに指定したラベル(例: app: my-app)が、監視対象のKubernetesサービスのメタデータと一致する必要があります。また、endpointsでポートやパスを指定し、メトリクスエンドポイントを正しく認識させましょう。
注意: 前バージョンとの互換性に配慮しつつ、最新のapiVersionにアップグレードすることが重要です。
PersistentVolumeによるデータ永続化設定
Prometheusが収集したメトリクスはPersistentVolume(PV)に保存されるため、クラスター再起動やポッドのリセット時にデータが失われないよう構成が必要です。
StorageClassの選択
ストレージクラスはクラスターやクラウドプロバイダーごとに異なります。kubectl get storageclassで利用可能なクラスを確認し、values.yamlに適切な名前(例: standard)を指定してください。
| クラウドプロバイダー | 推奨StorageClass | 注意事項 |
|---|---|---|
| AWS EBS | gp2 または io1 | IOPSが高く、I/O性能が必要な場合にio1を推奨します。 |
| GCP PD | pd-standard または pd-ssd | データの高可用性が求められる場合はpd-ssdを選択してください。 |
| Azure Disk | Standard_LRS | 比較的コストパフォーマンスに優れます。 |
PVCとPVの作成
PersistentVolumeClaim(PVC)を作成し、クラスターが自動で対応するPVを割り当てます。YAMLファイルは以下のように記述します。
|
1 2 3 4 5 6 7 8 9 10 11 |
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: prometheus-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi |
Prometheusデプロイ時のマウント設定
Helmのvalues.yamlで指定したストレージが、Prometheusデプロイ時に自動的にマウントされるよう構成します。StatefulSetを用いることで永続化されたデータが保持されます。
セキュリティポリシー(RBAC)の適用方法
Prometheusはクラスター内でのメトリクス収集のために、特定のリソースへのアクセス権が必要です。RBAC設定により適切なセキュリティを確保しましょう。
RoleとClusterRoleの定義
Prometheusが監視対象とするエンドポイントやノードの情報を取得できるように、RoleやClusterRoleを作成します。以下は基本的な例です。
|
1 2 3 4 5 6 7 8 9 |
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus rules: - apiGroups: [""] resources: ["services", "endpoints", "pods"] verbs: ["get", "list", "watch"] |
ServiceAccountへのバインディング
作成したClusterRoleを、Prometheusが利用するServiceAccountにバインドします。これにより、アクセス権限が付与されます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-rolebinding subjects: - kind: ServiceAccount name: prometheus # 推奨: セキュリティ上、専用ServiceAccountを使用する namespace: monitoring roleRef: kind: ClusterRole name: prometheus apiGroup: rbac.authorization.k8s.io |
重要:
defaultServiceAccountへのバインディングはセキュリティリスクが高いため、専用ServiceAccountの作成と使用が推奨されます。
メトリクスの可視化確認とトラブルシューティング
Prometheusのデプロイ後は、収集されたメトリクスが正しく表示されるかをチェックし、問題があれば対応する必要があります。
Grafanaとの連携
GrafanaにPrometheusデータソースを登録し、テンプレートやダッシュボードで可視化します。クラスター内のリソース使用率やエラーメトリクスがリアルタイムで確認可能になります。
Prometheus UIでのデータ確認
ブラウザからhttp://<prometheus-svc>:9090にアクセスし、メトリクスの値が表示されているかを確認します。Graphタブで特定のメトリクスを検索・グラフ化できます。
基本的なエラーチェック方法
- メトリクスが収集されていない場合:
kubectl logs <prometheus-pod>でロギングを確認。 - ServiceMonitorの設定ミス:
kubectl get servicemonitorsでステータスを確認。
まとめ
本記事では、KubernetesクラスターでPrometheusをデプロイする際の具体的な手順と実践的な知識を解説しました。重点的に扱った内容は以下の通りです。
- Helmチャートによる効率的なインストール方法
- ServiceMonitorの設定とメトリクス収集の仕組み
- PersistentVolumeでのデータ永続化構成
- RBAC設定によるセキュリティ確保
- 可視化ツールとの連携と基本的なトラブルシューティング
これらの知識を活用し、自社クラスターでも安定したメトリクス収集環境の構築が可能になります。本記事の手順を参考にPrometheusデプロイを試してみてください。