Prometheusをhelm経由でインストール
Operatorをアンインストール
以下のコマンドを実行し,OperatorでインストールしたPrometheusのアンインストール
cd kube-prometheus/
kubectl delete -f manifests/
kubectl delete -f manifests/setup
HelmでPrometheusをインストール
以下のコマンドを実行し,リポジトリを追加
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
以下のコマンドを実行し,Prometheusをインストール
helm upgrade --install prometheus prometheus-community/kube-prometheus-stack \
--create-namespace \
--namespace prometheus \
--set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
helm upgrade prometheus prometheus-community/kube-prometheus-stack --namespace prometheus --set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
上記の実行結果の例:
Release "prometheus" does not exist. Installing it now.
NAME: prometheus
LAST DEPLOYED: Wed Mar 16 23:21:14 2022
NAMESPACE: prometheus
STATUS: deployed
REVISION: 1
NOTES:
kube-prometheus-stack has been installed. Check its status by running:
kubectl --namespace prometheus get pods -l "release=prometheus"
Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
以下のコマンドを実行し,helmでの設定値を確認
helm get values prometheus --namespace prometheus
コマンドの結果例:
USER-SUPPLIED VALUES:
prometheus:
prometheusSpec:
podMonitorSelectorNilUsesHelmValues: false
serviceMonitorSelectorNilUsesHelmValues: false
Nginx Ingressの設定
以下のコマンドを実行し,Nginx Ingressの設定を更新する.
helm install ingress-nginx ingress-nginx/ingress-nginx --create-namespace --namespace ingress-nginx --set controller.metrics.enabled=true --set-string controller.podAnnotations."prometheus\.io/scrape"="true" --set-string controller.podAnnotations."prometheus\.io/port"="10254" --set controller.metrics.serviceMonitor.enabled=true --set controller.metrics.serviceMonitor.additionalLabels.release="prometheus"
helm upgrade ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx \
--set controller.metrics.enabled=true \
--set-string controller.podAnnotations."prometheus\.io/scrape"="true" \
--set-string controller.podAnnotations."prometheus\.io/port"="10254" \
--set controller.metrics.serviceMonitor.enabled=true \
--set controller.metrics.serviceMonitor.additionalLabels.release="prometheus"
Nginx Ingressの設定値を確かめる.
helm get values ingress-nginx --namespace ingress-nginx
実行結果の例:
USER-SUPPLIED VALUES:
controller:
metrics:
enabled: true
serviceMonitor:
additionalLabels:
release: prometheus
enabled: true
podAnnotations:
prometheus.io/port: "10254"
prometheus.io/scrape: "true"
PrometheusとGrafanaへのアクセス
以下のコマンドを実行し,Prometheusへポート転送でアクセスする.
kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n prometheus 9090:9090
Webブラウザで http://localhost:9090/
へアクセスする.
Graphを選んで nginx と入力する.候補が表示されればよい.
Serviceを公開して,Grafanaへアクセスする.以下のコマンドを実行する.
kubectl patch service prometheus-grafana -p '{"spec":{"type":"NodePort"}}' -n prometheus
NodePortのポート番号を確かめる.
kubectl get svc prometheus-grafana -n prometheus
コマンド結果の例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-grafana NodePort 10.43.248.41 <none> 80:31918/TCP 86m
ポート(PORT)にかかれている:の右側( 80:xxx
)をメモする.ここでは xxx が31918に対応する.
Webブラウザで http://localhost:31918/
へアクセスする.
ユーザ名とパスワードはそれぞれ以下を入力する.
ユーザ名:admin パスワード:prom-operator
Grafanaのダッシュボードを作成する.以下のURLを開いて表示された内容をGrafanaのDashboard -> Importから追加する.
https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/grafana/dashboards/nginx.json
以下のダッシュボードが追加されればよい.ただし,一部が表示されない状態になるので,以降の手順を行う.
サンプルマニフェストの作成
Ingressの例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example
namespace: default
spec:
ingressClassName: nginx
rules:
- host: <サーバのIPアドレスまたはホスト名>
http:
paths:
- pathType: Prefix
backend:
service:
name: get-my-info
port:
number: 4000
path: /
Deploymentの例
apiVersion: apps/v1
kind: Deployment
metadata:
name: get-my-info
labels:
app: nginxdemo
spec:
replicas: 3
selector:
matchLabels:
app: nginxdemo
template:
metadata:
labels:
app: nginxdemo
spec:
containers:
- name: info-app
image: nginxdemos/hello
ports:
- containerPort: 80
Serviceの例
apiVersion: v1
kind: Service
metadata:
name: get-my-info
spec:
type: NodePort
selector:
app: nginxdemo
ports:
- name: "http-port"
protocol: "TCP"
port: 4000
targetPort: 80
それぞれをkubectlで適用する.
kubectl apply -f xxx
WebブラウザからK8sクラスタへアクセスしてみる.
http://<サーバのIPアドレスまたはホスト名>