Kubernetesを使用してプロメテウスモニタリングを構築しました。大きな問題はありませんが、monitoring / kube-controller-manager / 0(0/0 up)には価値がありません。
通常、この問題は、Kubernetesがデプロイされたときに対応するラベルがないために発生し、リソースを見つけることができなくなります。
問題
質問1:IPアドレス
通常は開いていますが、このリスニングポートは127.0.0.1であり、Prometheusは直接アクセスできません
[root@k8s-master01 jiankong]# netstat -lntp | grep control
tcp 0 0 127.0.0.1:10257 0.0.0.0:* LISTEN 112736/kube-control
tcp6 0 0 :::10252 :::* LISTEN 112736/kube-control
問題2:SVCにラベルリソースがない
[root@k8s-master01 jiankong]# kubectl get servicemonitors.monitoring.coreos.com -n monitoring kube-controller-manager -oyaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
annotations:
..............................
sourceLabels:
- __name__
- action: drop
regex: etcd_(debugging|disk|request|server).*
sourceLabels:
- __name__
port: http-metrics
jobLabel: k8s-app
namespaceSelector:
matchNames:
- kube-system
selector:
matchLabels:
k8s-app: kube-controller-manager #通过这个标签匹配kube-controller-manager
[root@k8s-master01 jiankong]# kubectl get svc -n kube-system -l k8s-app= kube-controller-manager
error: name cannot be provided when a selector is specified
#这边在kube-system没有这个标签的svc,所以无法匹配到
解決する:
1.リスニングアドレスを変更します
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
- --bind-address=0.0.0.0
Kubernetes通信には双方向の証明書が必要なため、0.0.0.0を開くことができます。
2. svcepタグを追加します
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: kube-controller-manager
name: kube-controller-manage-monitor
namespace: kube-system
spec:
ports:
- name: http-metrics
port: 10252
protocol: TCP
targetPort: 10252
sessionAffinity: None
type: ClusterIP
apiVersion: v1
kind: Endpoints
metadata:
labels:
k8s-app: kube-controller-manager
name: kube-controller-manage-monitor
namespace: kube-system
subsets:
- addresses:
- ip: 192.168.0.100
ports:
- name: http-metrics
port: 10252
protocol: TCP
3.テスト