Kubernetes部署dashboard和Prometheus的教程
一、dashboard
1)获取yaml文件修改并执行
如图:
[root@master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml[root@master ~]# vim recommended.yaml +39#定位到39行,修改其提供的service资源spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 31001 selector: k8s-app: kubernetes-dashboard#因为默认情况下,service的类型是cluster IP,需更改为NodePort的方式,便于访问,也可映射到指定的端口[root@master ~]# kubectl apply -f recommended.yaml [root@master ~]# kubectl get pod -n kubernetes-dashboard NAME READY STATUS RESTARTS AGEdashboard-metrics-scraper-7f5767668b-dd7ml 1/1 Running 0 28skubernetes-dashboard-57b4bcc994-vrzcp 1/1 Running 0 28s#确保该yaml文件提供的pod均正常运行[root@master ~]# kubectl get svc -n kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEdashboard-metrics-scraper ClusterIP 10.110.63.144 8000/TCP 86skubernetes-dashboard NodePort 10.111.65.9 443:31001/TCP 87s#查看service资源,也属正常状态,并且已经映射了我们指定的端口
2)客户端访问测试
该版本之前的dashboard,必须使用火狐浏览器才可访问,本次使用的版本并没有硬性的要求。
3)使用Token的方式登录
[root@master ~]# kubectl create serviceaccount dashboard-admin -n kube-system#创建一个dashboard的管理用户[root@master ~]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin#将创建的dashboard用户绑定为管理用户[root@master ~]# kubectl get secrets -n kube-system | grep dashboard#获取刚刚创建的用户对应的token名称dashboard-admin-token-88gxw kubernetes.io/service-account-token 3 22s[root@master ~]# kubectl describe secrets -n kube-system dashboard-admin-token-88gxw #查看token的详细信息
如图:
浏览器访问:
出现该页面表示访问成功!
4)使用kubeconfig的方式登录
基于token的基础之上,进行以下操作:
[root@master ~]# kubectl get secrets -n kube-system | grep dashboard#查看刚才创建的tokendashboard-admin-token-88gxw kubernetes.io/service-account-token 3 22m[root@master ~]# kubectl describe secrets -n kube-system dashboard-admin-token-88gxw#查看token的详细信息,会获取token[root@master ~]# DASH_TOKEN=$(kubectl get secrets -n kube-system dashboard-admin-token-88gxw -o jsonpath={.data.token} | base64 -d)#将token的信息生成一个变量[root@master ~]# kubectl config set-cluster kubernets --server=192.168.1.1:6443 --kubeconfig=/root/.dashboard-admin.conf#将k8s集群的配置信息写入到一个文件中,文件可自定义[root@master ~]# kubectl config set-credentials dashboard-admin --token=${DASH_TOKEN} --kubeconfig=/root/.dashboard-admin.conf#将token的信息也写入到文件中(同一个文件)[root@master ~]# kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/root/.dashboard-admin.conf#将用户信息也写入文件中(同一个文件)[root@master ~]# kubectl config use-context dashboard-admin@kubernetes --kubeconfig=/root/.dashboard-admin.conf#将上下文的配置信息也写入文件中(同一个文件)[root@master ~]# sz /root/.dashboard-admin.conf#最后将配置信息导入到客户端本地
浏览器访问:
出现上述页面即表示访问成功!
关于dashboard的方式就简单介绍这么多!
二、Weave Scope
1)获取yaml文件修改并执行
如图:
[root@master ~]# wget https://cloud.weave.works/k8s/scope.yaml[root@master ~]# vim scope.yaml +212#定位到212行,更改service类型为NodePort,并指定端口 spec: type: NodePort ports: - name: app port: 80 protocol: TCP targetPort: 4040 nodePort: 31002[root@master ~]# kubectl apply -f scope.yaml[root@master ~]# kubectl get pod -n weave #确保运行的pod均为Running状态NAME READY STATUS RESTARTS AGEweave-scope-agent-7t4qc 1/1 Running 0 8m57sweave-scope-agent-r78fz 1/1 Running 0 8m57sweave-scope-agent-t8j66 1/1 Running 0 8m57sweave-scope-app-78cff98cbc-cs4gs 1/1 Running 0 8m57sweave-scope-cluster-agent-7cc889fbbf-pz6ft 1/1 Running 0 8m57s[root@master ~]# kubectl get svc -n weave #查看常见的svc资源对应的端口信息NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEweave-scope-app NodePort 10.102.221.220 80:31002/TCP 11m
浏览器访问:
三、Prometheus
在部署Prometheus之前,由于实验环境,配置较低,所以将原本的dashboard、Scope进行删除了!
在真正部署Prometheus之前,应了解一下Prometheus的各个组件之间的关系及作用:
1)MertricServer:是k8s集群资源使用情况的聚合器,收集数据给K8s集群内使用,如:kubectl,hpa,scheduler;
2)PrometheusOperator:是一个系统检测和警报工具箱,用来存储监控数据;
3)NodeExporter:用于各node的关键度量指标状态数据;
4)kubeStateMetrics:收集k8s集群内资源对象数据,指定告警规则;
5)Prometheus:采用pull方式收集apiserver,scheduler,controller-manager,kubelet组件数据,通过http协议传输;
6)Grafana:是可视化数据统计和监控平台;
1)获取yaml文件修改并执行
注意:这里部署的Prometheus,并不是Prometheus官网提供的,而是使用的coreos提供的Prometheus项目。
如图:
[root@master ~]# git clone https://github.com/coreos/kube-prometheus.git#将项目克隆到本地[root@master ~]# cd kube-prometheus/manifests/[root@master manifests]# vim grafana-service.yaml#更改grafana资源对应的service资源的类型及映射的端口apiVersion: v1kind: Servicemetadata: labels: app: grafana name: grafana namespace: monitoringspec: type: NodePort #添加类型为NodePort ports: - name: http port: 3000 targetPort: http nodePort: 31010 #自定义映射的端口 selector: app: grafana[root@master manifests]# vim alertmanager-service.yaml #更改alertmanager资源对应的service资源的类型及映射的端口apiVersion: v1kind: Servicemetadata: labels: alertmanager: main name: alertmanager-main namespace: monitoringspec: type: NodePort #添加类型为NodePort ports: - name: web port: 9093 targetPort: web nodePort: 31020 #自定义映射的端口 selector: alertmanager: main app: alertmanager sessionAffinity: ClientIP[root@master manifests]# vim prometheus-service.yaml #更改prometheus资源对应的service资源的类型及映射的端口apiVersion: v1kind: Servicemetadata: labels: prometheus: k8s name: prometheus-k8s namespace: monitoringspec: type: NodePort #添加类型为NodePort ports: - name: web port: 9090 targetPort: web nodePort: 31030 #自定义映射的端口 selector: app: prometheus prometheus: k8s sessionAffinity: ClientIP[root@master manifests]# pwd #确认当前所在目录/root/kube-prometheus/manifests[root@master manifests]# kubectl apply -f setup/#必须先执行setup目录下的所有yaml文件[root@master manifests]# cd .. #返回上层目录[root@master kube-prometheus]# pwd #确认目录位置/root/kube-prometheus[root@master kube-prometheus]# kubectl apply -f manifests/#将该目录下的yaml文件全部执行[root@master kube-prometheus]# kubectl get pod -n monitoring #确保该名称空间下的所有Pod都是Running状态[root@master kube-prometheus]# kubectl get svc -n monitoring | grep grafana#查看grafana资源对应的service资源映射的端口grafana NodePort 10.97.56.230 3000:31010/TCP 16m
所使用的pod的镜像下载较慢,总之,网络稳定一切都不是问题!
浏览器访问:
本地自带的模板有点low,所以接下来导入一个好看的模板!
模板下载地址:https://grafana.com/dashboards 自行进行查看!
大功告成,可以看到炫酷的监控页面了。