kind で作った Kubernetes クラスタに Prometheus をデプロイする方法を解説します。
kind クラスタを作る
まず kind で Kubernetes クラスタを立ち上げます。クラスタはひとまず 4 ノードで作ります。
cluster.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
$ # kind 0.11.0 + Kubernetes 1.21.1
$ kind create cluster --config cluster.yaml
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.21.1) 🖼
✓ Preparing nodes 📦 📦 📦 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
✓ Joining worker nodes 🚜
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Thanks for using kind! 😊
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane,master 2m14s v1.21.1
kind-worker Ready <none> 106s v1.21.1
kind-worker2 Ready <none> 106s v1.21.1
kind-worker3 Ready <none> 106s v1.21.1
Prometheus の設定ファイルをデプロイする
次に、Prometheus の設定ファイルを ConfigMap の形でデプロイします。 この YAML を編集すると Prometheus の動作を変えられます。
prometheus.yml
の書き方は 公式マニュアル をご参照ください。
prometheus-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus
data:
prometheus.yml: |
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
$ kubectl apply -f prometheus-config.yaml
configmap/prometheus created
Prometheus の Pod をデプロイする
次に Prometheus の Pod をデプロイします。 Prometheus の 公式イメージの設定 で、デフォルトの設定ファイルの読み込みパスは /etc/prometheus/prometheus.yml
になっています。
prometheus.yaml
apiVersion: v1
kind: Pod
metadata:
name: prometheus
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus:v2.27.1
volumeMounts:
- name: config
mountPath: /etc/prometheus
readOnly: true
volumes:
- name: config
configMap:
name: prometheus
items:
- key: prometheus.yml
path: prometheus.yml
$ kubectl apply -f prometheus.yaml
pod/prometheus created
Prometheus は デフォルト で 9090 番ポートで通信を待機します。
$ kubectl exec -it prometheus -- sh
/prometheus $ netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 :::9090 :::* LISTEN
/prometheus $ wget -q -O - http://localhost:9090/
<!doctype html>
...
Prometheus の Service をデプロイする
Prometheus をクラスタ内から利用するため、Service をデプロイします。 Pod には app: prometheus
というラベルを付けておいたので、このラベルを使って Pod を選択します。
prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:
name: prometheus
spec:
selector:
app: prometheus
ports:
- port: 9090
$ kubectl apply -f prometheus-service.yaml
service/prometheus created
kubectl port-forward
を使えばブラウザから動作を確認できます。
$ kubectl port-forward service/prometheus 9090
Forwarding from 127.0.0.1:9090 -> 9090
Forwarding from [::1]:9090 -> 9090
kind 環境に Grafana をデプロイする に続きます。
参考資料
-
Prometheus - Monitoring system & time series database
https://prometheus.io/ -
First steps | Prometheus / Starting Prometheus
https://prometheus.io/docs/introduction/first_steps/#starting-prometheus -
Configuration | Prometheus
https://prometheus.io/docs/prometheus/latest/configuration/configuration/ -
prom/prometheus | Docker Hub
https://hub.docker.com/r/prom/prometheus -
Prometheus: Up & Running
https://www.oreilly.com/library/view/prometheus-up/9781492034131/ -
kind - Quick Start / Advanced / Configuring Your kind Cluster
https://kind.sigs.k8s.io/docs/user/quick-start/#configuring-your-kind-cluster