k8s安装kube-promethues(0.7版本)

打印 上一主题 下一主题

主题 532|帖子 532|积分 1596

k8s安装kube-promethues(0.7版本)

一.检查本地k8s版本,下载对应安装包
  1. kubectl version
复制代码

如图可见是1.19版本
进入kube-promethus下载地址,查找自己的k8s版本适合哪一个kube-promethues版本。

然后下载自己合适的版本
  1. #还可以通过如下地址,在服务器上直接下已经打包好的包。或者复制地址到浏览器下载后上传到服务器。
  2. wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.7.0.tar.gz
复制代码
本次安装是手动上传的
  1. tar -zxvf kube-prometheus-0.7.0.tar.gz
复制代码
二.安装前准备

1.文件分类整理

我们cd到对应目录可以看见,初始的安装文件很乱。
  1. cd kube-prometheus-0.7.0/manifests/
复制代码

新建目录,然后把对应的安装文件归类。
  1. # 创建文件夹
  2. mkdir -p node-exporter alertmanager grafana kube-state-metrics prometheus serviceMonitor adapter
  3. # 移动 yaml 文件,进行分类到各个文件夹下
  4. mv *-serviceMonitor* serviceMonitor/
  5. mv grafana-* grafana/
  6. mv kube-state-metrics-* kube-state-metrics/
  7. mv alertmanager-* alertmanager/
  8. mv node-exporter-* node-exporter/
  9. mv prometheus-adapter* adapter/
  10. mv prometheus-* prometheus
复制代码
分类后的目录树如下
  1. .
  2. ├── adapter
  3. │   ├── prometheus-adapter-apiService.yaml
  4. │   ├── prometheus-adapter-clusterRole.yaml
  5. │   ├── prometheus-adapter-clusterRoleAggregatedMetricsReader.yaml
  6. │   ├── prometheus-adapter-clusterRoleBinding.yaml
  7. │   ├── prometheus-adapter-clusterRoleBindingDelegator.yaml
  8. │   ├── prometheus-adapter-clusterRoleServerResources.yaml
  9. │   ├── prometheus-adapter-configMap.yaml
  10. │   ├── prometheus-adapter-deployment.yaml
  11. │   ├── prometheus-adapter-roleBindingAuthReader.yaml
  12. │   ├── prometheus-adapter-service.yaml
  13. │   └── prometheus-adapter-serviceAccount.yaml
  14. ├── alertmanager
  15. │   ├── alertmanager-alertmanager.yaml
  16. │   ├── alertmanager-secret.yaml
  17. │   ├── alertmanager-service.yaml
  18. │   └── alertmanager-serviceAccount.yaml
  19. ├── grafana
  20. │   ├── grafana-dashboardDatasources.yaml
  21. │   ├── grafana-dashboardDefinitions.yaml
  22. │   ├── grafana-dashboardSources.yaml
  23. │   ├── grafana-deployment.yaml
  24. │   ├── grafana-pvc.yaml
  25. │   ├── grafana-service.yaml
  26. │   └── grafana-serviceAccount.yaml
  27. ├── kube-state-metrics
  28. │   ├── kube-state-metrics-clusterRole.yaml
  29. │   ├── kube-state-metrics-clusterRoleBinding.yaml
  30. │   ├── kube-state-metrics-deployment.yaml
  31. │   ├── kube-state-metrics-service.yaml
  32. │   └── kube-state-metrics-serviceAccount.yaml
  33. ├── node-exporter
  34. │   ├── node-exporter-clusterRole.yaml
  35. │   ├── node-exporter-clusterRoleBinding.yaml
  36. │   ├── node-exporter-daemonset.yaml
  37. │   ├── node-exporter-service.yaml
  38. │   └── node-exporter-serviceAccount.yaml
  39. ├── prometheus
  40. │   ├── prometheus-clusterRole.yaml
  41. │   ├── prometheus-clusterRoleBinding.yaml
  42. │   ├── prometheus-prometheus.yaml
  43. │   ├── prometheus-roleBindingConfig.yaml
  44. │   ├── prometheus-roleBindingSpecificNamespaces.yaml
  45. │   ├── prometheus-roleConfig.yaml
  46. │   ├── prometheus-roleSpecificNamespaces.yaml
  47. │   ├── prometheus-rules.yaml
  48. │   ├── prometheus-service.yaml
  49. │   └── prometheus-serviceAccount.yaml
  50. ├── serviceMonitor
  51. │   ├── alertmanager-serviceMonitor.yaml
  52. │   ├── grafana-serviceMonitor.yaml
  53. │   ├── kube-state-metrics-serviceMonitor.yaml
  54. │   ├── node-exporter-serviceMonitor.yaml
  55. │   ├── prometheus-adapter-serviceMonitor.yaml
  56. │   ├── prometheus-operator-serviceMonitor.yaml
  57. │   ├── prometheus-serviceMonitor.yaml
  58. │   ├── prometheus-serviceMonitorApiserver.yaml
  59. │   ├── prometheus-serviceMonitorCoreDNS.yaml
  60. │   ├── prometheus-serviceMonitorKubeControllerManager.yaml
  61. │   ├── prometheus-serviceMonitorKubeScheduler.yaml
  62. │   └── prometheus-serviceMonitorKubelet.yaml
  63. └── setup
  64.     ├── 0namespace-namespace.yaml
  65.     ├── prometheus-operator-0alertmanagerConfigCustomResourceDefinition.yaml
  66.     ├── prometheus-operator-0alertmanagerCustomResourceDefinition.yaml
  67.     ├── prometheus-operator-0podmonitorCustomResourceDefinition.yaml
  68.     ├── prometheus-operator-0probeCustomResourceDefinition.yaml
  69.     ├── prometheus-operator-0prometheusCustomResourceDefinition.yaml
  70.     ├── prometheus-operator-0prometheusruleCustomResourceDefinition.yaml
  71.     ├── prometheus-operator-0servicemonitorCustomResourceDefinition.yaml
  72.     ├── prometheus-operator-0thanosrulerCustomResourceDefinition.yaml
  73.     ├── prometheus-operator-clusterRole.yaml
  74.     ├── prometheus-operator-clusterRoleBinding.yaml
  75.     ├── prometheus-operator-deployment.yaml
  76.     ├── prometheus-operator-service.yaml
  77.     └── prometheus-operator-serviceAccount.yaml
  78. 8 directories, 68 files
复制代码
2.查看K8s集群是否安装NFS持久化存储,如果没有则需要安装配置
  1. kubectl get sc
复制代码

此截图显示已经安装。下面是NFS的安装和部署方法
1).安装NFS服务

Ubuntu:
  1. sudo apt update
  2. sudo apt install nfs-kernel-server
复制代码
Centos:
  1. yum update
  2. yum -y install nfs-utils
复制代码
  1. # 创建或使用用已有的文件夹作为nfs文件存储点
  2. mkdir -p /home/data/nfs/share
  3. vi /etc/exports
复制代码
写入如下内容
/home/data/nfs/share *(rw,no_root_squash,sync,no_subtree_check)
  1. # 配置生效并查看是否生效
  2. exportfs -r
  3. exportfs
复制代码
  1. # 启动rpcbind、nfs服务
  2. #Centos
  3. systemctl restart rpcbind && systemctl enable rpcbind
  4. systemctl restart nfs && systemctl enable nfs
  5. #Ubuntu
  6. systemctl restart rpcbind && systemctl enable rpcbind
  7. systemctl start nfs-kernel-server && systemctl enable nfs-kernel-server
  8. # 查看 RPC 服务的注册状况
  9. rpcinfo -p localhost
复制代码
  1. # showmount测试
  2. showmount -e localhost
复制代码

以上都没有问题则说明安装成功
2).k8s注册nfs服务

新建storageclass-nfs.yaml文件,粘贴如下内容:
  1. ## 创建了一个存储类
  2. apiVersion: storage.k8s.io/v1
  3. kind: StorageClass                  #存储类的资源名称
  4. metadata:
  5.   name: nfs-storage                 #存储类的名称,自定义
  6.   annotations:
  7.     storageclass.kubernetes.io/is-default-class: "true"          #注解,是否是默认的存储,注意:KubeSphere默认就需要个默认存储,因此这里注解要设置为“默认”的存储系统,表示为"true",代表默认。
  8. provisioner: k8s-sigs.io/nfs-subdir-external-provisioner         #存储分配器的名字,自定义
  9. parameters:
  10.   archiveOnDelete: "true"  ## 删除pv的时候,pv的内容是否要备份
  11. ---
  12. apiVersion: apps/v1
  13. kind: Deployment
  14. metadata:
  15.   name: nfs-client-provisioner
  16.   labels:
  17.     app: nfs-client-provisioner
  18.   # replace with namespace where provisioner is deployed
  19.   namespace: default
  20. spec:
  21.   replicas: 1                 #只运行一个副本应用
  22.   strategy:                   #描述了如何用新的POD替换现有的POD
  23.     type: Recreate            #Recreate表示重新创建Pod
  24.   selector:        #选择后端Pod
  25.     matchLabels:
  26.       app: nfs-client-provisioner
  27.   template:
  28.     metadata:
  29.       labels:
  30.         app: nfs-client-provisioner
  31.     spec:
  32.       serviceAccountName: nfs-client-provisioner          #创建账户
  33.       containers:
  34.         - name: nfs-client-provisioner         
  35.           image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2      #使用NFS存储分配器的镜像
  36.           # resources:
  37.           #    limits:
  38.           #      cpu: 10m
  39.           #    requests:
  40.           #      cpu: 10m
  41.           volumeMounts:
  42.             - name: nfs-client-root           #定义个存储卷,
  43.               mountPath: /persistentvolumes   #表示挂载容器内部的路径
  44.           env:
  45.             - name: PROVISIONER_NAME          #定义存储分配器的名称
  46.               value: k8s-sigs.io/nfs-subdir-external-provisioner         #需要和上面定义的保持名称一致
  47.             - name: NFS_SERVER                                       #指定NFS服务器的地址,你需要改成你的NFS服务器的IP地址
  48.               value: 192.168.0.0 ## 指定自己nfs服务器地址
  49.             - name: NFS_PATH                                
  50.               value: /home/data/nfs/share  ## nfs服务器共享的目录            #指定NFS服务器共享的目录
  51.       volumes:
  52.         - name: nfs-client-root           #存储卷的名称,和前面定义的保持一致
  53.           nfs:
  54.             server: 192.168.0.0            #NFS服务器的地址,和上面保持一致,这里需要改为你的IP地址
  55.             path: /home/data/nfs/share               #NFS共享的存储目录,和上面保持一致
  56. ---
  57. apiVersion: v1
  58. kind: ServiceAccount                 #创建个SA账号
  59. metadata:
  60.   name: nfs-client-provisioner        #和上面的SA账号保持一致
  61.   # replace with namespace where provisioner is deployed
  62.   namespace: default
  63. ---
  64. #以下就是ClusterRole,ClusterRoleBinding,Role,RoleBinding都是权限绑定配置,不在解释。直接复制即可。
  65. kind: ClusterRole
  66. apiVersion: rbac.authorization.k8s.io/v1
  67. metadata:
  68.   name: nfs-client-provisioner-runner
  69. rules:
  70.   - apiGroups: [""]
  71.     resources: ["nodes"]
  72.     verbs: ["get", "list", "watch"]
  73.   - apiGroups: [""]
  74.     resources: ["persistentvolumes"]
  75.     verbs: ["get", "list", "watch", "create", "delete"]
  76.   - apiGroups: [""]
  77.     resources: ["persistentvolumeclaims"]
  78.     verbs: ["get", "list", "watch", "update"]
  79.   - apiGroups: ["storage.k8s.io"]
  80.     resources: ["storageclasses"]
  81.     verbs: ["get", "list", "watch"]
  82.   - apiGroups: [""]
  83.     resources: ["events"]
  84.     verbs: ["create", "update", "patch"]
  85. ---
  86. kind: ClusterRoleBinding
  87. apiVersion: rbac.authorization.k8s.io/v1
  88. metadata:
  89.   name: run-nfs-client-provisioner
  90. subjects:
  91.   - kind: ServiceAccount
  92.     name: nfs-client-provisioner
  93.     # replace with namespace where provisioner is deployed
  94.     namespace: default
  95. roleRef:
  96.   kind: ClusterRole
  97.   name: nfs-client-provisioner-runner
  98.   apiGroup: rbac.authorization.k8s.io
  99. ---
  100. kind: Role
  101. apiVersion: rbac.authorization.k8s.io/v1
  102. metadata:
  103.   name: leader-locking-nfs-client-provisioner
  104.   # replace with namespace where provisioner is deployed
  105.   namespace: default
  106. rules:
  107.   - apiGroups: [""]
  108.     resources: ["endpoints"]
  109.     verbs: ["get", "list", "watch", "create", "update", "patch"]
  110. ---
  111. kind: RoleBinding
  112. apiVersion: rbac.authorization.k8s.io/v1
  113. metadata:
  114.   name: leader-locking-nfs-client-provisioner
  115.   # replace with namespace where provisioner is deployed
  116.   namespace: default
  117. subjects:
  118.   - kind: ServiceAccount
  119.     name: nfs-client-provisioner
  120.     # replace with namespace where provisioner is deployed
  121.     namespace: default
  122. roleRef:
  123.   kind: Role
  124.   name: leader-locking-nfs-client-provisioner
  125.   apiGroup: rbac.authorization.k8s.io
复制代码
需要修改的就只有服务器地址和共享的目录
创建StorageClass
  1. kubectl apply -f storageclass-nfs.yaml
  2. # 查看是否存在
  3. kubectl get sc
复制代码

3.修改Prometheus 持久化
  1. vi prometheus/prometheus-prometheus.yaml
复制代码
在文件末尾新增:
  1. ...
  2.   serviceMonitorSelector: {}
  3.   version: v2.11.0
  4.   retention: 3d
  5.   storage:
  6.     volumeClaimTemplate:
  7.       spec:
  8.         storageClassName: nfs-storage
  9.         resources:
  10.           requests:
  11.             storage: 5Gi
复制代码
4.修改grafana持久化配置
  1. #新增garfana的PVC配置文件
  2. vi grafana/grafana-pvc.yaml
复制代码
完整内容如下:
  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4.   name: grafana
  5.   namespace: monitoring  #---指定namespace为monitoring
  6. spec:
  7.   storageClassName: nfs-storage #---指定StorageClass
  8.   accessModes:
  9.     - ReadWriteOnce
  10.   resources:
  11.     requests:
  12.       storage: 5Gi
复制代码
接着修改 grafana-deployment.yaml 文件设置持久化配置,顺便修改Garfana的镜像版本(有些模板不支持7.5以下的Grafana),应用上面的 PVC
  1. vi grafana/grafana-deployment.yaml
复制代码
修改内容如下:
  1.       serviceAccountName: grafana
  2.       volumes:
  3.       - name: grafana-storage       # 新增持久化配置
  4.         persistentVolumeClaim:
  5.           claimName: grafana        # 设置为创建的PVC名称
  6. #      - emptyDir: {}               # 注释旧的注释
  7. #        name: grafana-storage
  8.       - name: grafana-datasources
  9.         secret:
  10.           secretName: grafana-datasources
复制代码
之前的镜像版本

修改后的

5.修改 promethus和Grafana的Service 端口设置

修改 Prometheus Service
  1. vi prometheus/prometheus-service.yaml
复制代码
修改为如下内容:
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.   labels:
  5.     prometheus: k8s
  6.   name: prometheus-k8s
  7.   namespace: monitoring
  8. spec:
  9.   type: NodePort
  10.   ports:
  11.   - name: web
  12.     port: 9090
  13.     targetPort: web
  14.     nodePort: 32101
  15.   selector:
  16.     app: prometheus
  17.     prometheus: k8s
  18.   sessionAffinity: ClientIP
复制代码
修改 Grafana Service
  1. vi grafana/grafana-service.yaml
复制代码
修改为如下内容:
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.   labels:
  5.     app: grafana
  6.   name: grafana
  7.   namespace: monitoring
  8. spec:
  9.   type: NodePort
  10.   ports:
  11.   - name: http
  12.     port: 3000
  13.     targetPort: http
  14.     nodePort: 32102
  15.   selector:
  16.     app: grafana
复制代码
三.安装Prometheus

1.安装promethues-operator

首先保证在manifests目录下

开始安装 Operator:
  1. kubectl apply -f setup/
复制代码
查看 Pod,等 pod 全部ready在进行下一步:
  1. kubectl get pods -n monitoring
复制代码

2.安装其他所有组件
  1. #依次执行
  2. kubectl apply -f adapter/
  3. kubectl apply -f alertmanager/
  4. kubectl apply -f node-exporter/
  5. kubectl apply -f kube-state-metrics/
  6. kubectl apply -f grafana/
  7. kubectl apply -f prometheus/
  8. kubectl apply -f serviceMonitor/
复制代码
然后查看pod是否创建成功,并等待所有pod处于Running状态
  1. kubectl get pods -n monitoring
复制代码

3.验证是否安装成功

如果知道集群节点地址就可以直接ip:32101访问Prometheus,如果不知道则可以访问Rancher管理界面,命名空间选择monitoring。在Services中找到,prometheus-k8s和grafana然后鼠标点击目标端口就可以访问。

在Prometheus界面随便测试一个函数,查看是否能够正常使用。

然后登录Grafana

默认用户名和密码是admin/admin,第一次登陆会提示修改密码。进入Grafana后,导入模板测试。推荐的模板ID有,12884和13105



效果图:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

半亩花草

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表