Prometheus监控k8s(2)-手动部署Prometheus
Prometheus监控k8s(2)-手动部署Prometheus
https://www.cnblogs.com/panwenbin-logs/p/10123833.html
https://www.cnblogs.com/xzkzzz/p/10208115.html
1 部署环境
根据之前的环境部署
l K8S中已有内部DNS服务coredns(参考前面的文档)
l 已有可使用的动态PV(参考前面的文档)
2 准备文件和环境
2.1 下载文件
项目地址https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus
git clone https://github.com/kubernetes/kubernetes.git
#我嫌麻烦就直接克隆kubernetes整个项目了,当然下载zip包其实只有几十M,更快
或者
# 从github官网下载promethues的yaml部署文件
curl -O https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/prometheus/prometheus-rbac.yaml curl -O https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/prometheus/prometheus-configmap.yaml curl -O https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/prometheus/prometheus-service.yaml curl -O https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/prometheus/prometheus-statefulset.yaml
[root@k8s-master prometheus]# ls kubernetes-master [root@k8s-master prometheus]# cd kubernetes-master/cluster/addons/ [root@k8s-master addons]# mkdir ~/prometheus/ [root@k8s-master addons]# mv prometheus/* /root/prometheus/ [root@k8s-master addons]# cd /root/prometheus/ [root@k8s-master prometheus]# ls alertmanager-configmap.yaml kube-state-metrics-deployment.yaml node-exporter-service.yaml prometheus-service.yaml alertmanager-deployment.yaml kube-state-metrics-rbac.yaml OWNERS prometheus-statefulset.yaml alertmanager-pvc.yaml kube-state-metrics-service.yaml prometheus-configmap.yaml README.md alertmanager-service.yaml node-exporter-ds.yml prometheus-rbac.yaml [root@k8s-master prometheus]#
2.2 命名空间的问题
默认prometheus使用的是kube-system名称空间, 网上有很多文章说自定义一下方便管理。
但我自定义之后出现
Warning FailedCreate 2m40s (x16 over 5m24s) statefulset-controller create Pod prometheus-0 in StatefulSet prometheus failed error: pods "prometheus-0" is forbidden: pods with system-cluster-critical priorityClass is not permitted in k8s-monitor namespace
prometheus-statefulset.yaml 起不来,还是用系统的kube-system,这一块还是别动了吧,可能和版本有关,这个坑还是别踩了吧
2.3 建立分类目录方便管理
mkdir node-exporter kube-state-metrics alertmanager prometheus #将每个组件单独放入一个目录中,方便部署及管理 mv node-exporter-* node-exporter mv alertmanager-* alertmanager mv kube-state-metrics-* kube-state-metrics mv prometheus-* prometheus
3 安装prometheus-server
3.1 PV和PVC
如果没有动态PVC,手动创建
apiVersion: v1 kind: PersistentVolume metadata: name: prometheus-data spec: capacity: storage: 25Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: prometheus-data #storageClassName与prometheus-statefulset.yaml中volumeClaimTemplates下定义的需要保持一致 nfs: path: /data/volumes/v2 server: 10.6.76.25 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: prometheus-data namespace: kube-system spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: prometheus-data
[root@k8s-master prometheus]# kubectl apply -f pv-pvc.yaml [root@k8s-master prometheus]# kubectl get pv,pvc|grep prometheus-data persistentvolume/prometheus-data 25Gi RWO Recycle Bound kube-system/prometheus-data prometheus-data 18h 修改statefulset.yaml # 删掉最下面的10行 volumeClaimTemplates: - metadata: name: prometheus-data spec: storageClassName: standard accessModes: - ReadWriteOnce resources: requests: storage: "16Gi" # 新增下面3行,注意缩进 - name: prometheus-data persistentVolumeClaim: claimName: prometheus-data
有nfs那种自动创建的
volumeClaimTemplates: - metadata: name: prometheus-data spec: storageClassName: managed-nfs-storage #storageClassName: standard accessModes: - ReadWriteOnce resources: requests: storage: "16Gi"
3.2 设置外网访问
默认prometheus的service端口类型为ClusterIP,为了可以集群外访问,修改为NodePort
#[root@k8s-master prometheus]# cat prometheus-service.yaml kind: Service apiVersion: v1 metadata: name: prometheus namespace: kube-system labels: kubernetes.io/name: "Prometheus" kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile spec: type: NodePort ports: - name: http port: 9090 protocol: TCP targetPort: 9090 selector: k8s-app: Prometheus
3.3 部署
[root@k8s-master prometheus]# kubectl apply -f Prometheus configmap/prometheus-config created serviceaccount/prometheus created clusterrole.rbac.authorization.k8s.io/prometheus created clusterrolebinding.rbac.authorization.k8s.io/prometheus created service/prometheus created statefulset.apps/prometheus created [root@k8s-master prometheus]# [root@k8s-master prometheus]# kubectl get all -n kube-system | grep prometheus pod/prometheus-0 2/2 Running 0 63m service/prometheus ClusterIP 10.111.156.156 <none> 9090:31500/TCP 63m statefulset.apps/prometheus 1/1 63m [root@k8s-master prometheus]#
4 访问prometheus(node节点IP:端口)