k8监控

一、k8s的UI访问界面-dashboard

General-purpose web UI for Kubernetes clusters

用于Kubernetes集群的通用web UI

在dashbord中,虽然可以做到创建、删除、修改资源等操作,但通常情况下,我们会把它当作监控k8s集群的软件

dashboard能够直观的看到rc、deployment、pod、services等k8s组件的运行情况和日志信息。

1、从Github搜索dasgboard,下载yaml文件

[root@master ~]# mkdir  dashboard
[root@master ~]# cd dashboard/
[root@master dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml
[root@master dashboard]# ls
recommended.yaml
[root@node01 ~]# docker  pull  kubernetesui/dashboard:v2.0.0-rc5
[root@node02 ~]# docker  pull  kubernetesui/dashboard:v2.0.0-rc5

2、运行yaml文件:

修改service类型类NodePort
#在40行的spec字段修改
[root@master dashboard]# vim  recommended.yaml
spec:
  type: NodePort
[root@master dashboard]# kubectl  apply  -f  recommended.yaml 
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
[root@master dashboard]# kubectl  get  pod  -n  kubernetes-dashboard 
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-7f5767668b-f7nh6   1/1     Running   0          9m32s
kubernetes-dashboard-57b4bcc994-2rj9k        1/1     Running   0          9m32s
[root@master dashboard]# kubectl  get svc -n kubernetes-dashboard 
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.111.237.119   <none>        8000/TCP        16m
kubernetes-dashboard        NodePort    10.107.77.172    <none>        443:30361/TCP   16m
[root@master dashboard]# kubectl  get deployments. -n  kubernetes-dashboard 
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
dashboard-metrics-scraper   1/1     1            1           11m  #将收集到的数据制作成图表的形式
kubernetes-dashboard        1/1     1            1           11m

3、通过浏览器访问:https://192.168.1.70:30361
k8监控_第1张图片

两种登录方式:

kubeconfig:配置文件

Token:令牌

基于Token的方法登录dashboard

1、创建一个dashboaed的管理用户

[root@master dashboard]# kubectl create  serviceaccount dashboard-admin -n kube-system 
serviceaccount/dashboard-admin created

2、将这个用户绑定为集群管理用户

[root@master dashboard]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

3、获取Token

#得到Token的名称
[root@master dashboard]# kubectl  get secrets  -n kube-system | grep dashboard-admin
dashboard-admin-token-mwht2                      kubernetes.io/service-account-token   3      5m30s
#查看上述得到的secret资源的详细信息,会得到Token
[root@master dashboard]# kubectl  get secrets -n kube-system  dashboard-admin-token-mwht2 
NAME                          TYPE                                  DATA   AGE
dashboard-admin-token-mwht2   kubernetes.io/service-account-token   3      7m19s
//这个类型不是Opaque,说明不是隐藏的,我们可以看到他的详细信息
#获取详细信息,得到Token
[root@master dashboard]# kubectl  describe secrets -n kube-system  dashboard-admin-token-mwht2
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tbXdodDIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNjliODE4YjYtOTA3Zi00NTBmLWI3NjgtMTc2ODIyM2Y1OTIyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.WCcVrx6oXs0k7-0hQOOik30ZPJl0sNeQE987PHv_Jm9ZpLQ4P9VIQdN49uRvNsd7DF4Ozgu5enWFvNsiaCDmYHauK2LAoHbDBURE9wGx8VlMaaquZ1B_ur4lOluP6Ha3wdZB64fEdtrg-6-DjIS7SC2Kqr2Bcl8NeRdtABh3cufgJ2EQoU40-FUy-0ahegYixIrrQ-DXgZeGrXP79RzHmBXaSwbRwTqWXwNf0e25on_gCiiMC-MVmbZ0MXhNNv-jc8uD2obaEUTdOCLg__f482Zy7xLEMjBv9eVn0P5u7c8r45VfDs08zK4Leh5GI4KIgcuxt37TCtfmEz5XEoTLnA

4、在浏览器上使用Token登录

PS:如果是使用的是旧版本的dashboard,使用谷歌浏览器登录,可能不成功,需要换成其他的浏览器,比如火狐
k8监控_第2张图片
k8监控_第3张图片

//如果没有显示,就说明serviceaccount,没有绑定账号,就说明没有权限,就什么都看不到

这里我们可以创建资源,有三种方式
k8监控_第4张图片

从表单创建默认的是Deployment资源对象
k8监控_第5张图片

还有一些扩容缩容、更新,删除的操作

除了基于Token的方法登录dashboard,还有基于kuberconfig配置文件的登录方式

1、获取Tonke

#得到Token的名称
[root@master dashboard]# kubectl  get secrets  -n kube-system | grep dashboard-admin
dashboard-admin-token-mwht2                      kubernetes.io/service-account-token   3      5m30s
#查看上述得到的secret资源的详细信息,会得到Token
[root@master dashboard]# kubectl  get secrets -n kube-system  dashboard-admin-token-mwht2 
NAME                          TYPE                                  DATA   AGE
dashboard-admin-token-mwht2   kubernetes.io/service-account-token   3      7m19s

2、生成kubeconfig配置文件

#设置一个环境变量代表获取Token
[root@master dashboard]# DASH_TOKEN=$(kubectl  get  secrets -n kube-system dashboard-admin-token-mwht2 -o  jsonpath={.data.token} | base64 -d)

#将k8s集群的配置信息写入kubeconfig配置文件中
[root@master dashboard]# kubectl  config  set-cluster kubernetes  --server=192.168.1.70:6443  --kubeconfig=/root/.dashboard-admin.conf

#将Token写入配置文件里
[root@master dashboard]# kubectl  config  set-credentials  dashboard-admin  --token=$DASH_TOKEN  --kubeconfig=/root/.dashboard-admin.conf
[root@master dashboard]# kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/root/.dashboard-admin.conf
[root@master dashboard]# kubectl config use-context dashboard-admin@kubernetes --kubeconfig=/root/.dashboard-admin.conf

3、将生成的/root/.dashboard-admin.config的配置文件,导出并保存

[root@master dashboard]# sz  /root/.dashboard-admin.conf

4、从浏览器选择kubeconfig的登录方式,然后导入配置文件即可
k8监控_第6张图片

二、weave-scope监控k8s集群Scope

Weave Scope是Weaveworks开发的监控工具。Weave Scope在Kubernetes集群中生成进程,容器和主机的映射,以帮助实时了解Docker容器。还可基于图形UI管理容器并在容器上运行诊断命令

1、在Github上直接搜索scope,找到yaml文件并下载下来
k8监控_第7张图片

2、往下拉找到kubernetes,点击
k8监控_第8张图片

3、将这个yaml文件下载下来

[root@master ~]# wget https://cloud.weave.works/k8s/scope.yaml

4、修改yaml,修改service的端口类型

[root@master ~]# vim  scope.yaml
#在212行的spec字段中添加
      type: NodePort
#保存并退出,运行yaml文件
root@master ~]# kubectl  apply  -f  scope.yaml 
namespace/weave created
serviceaccount/weave-scope created
clusterrole.rbac.authorization.k8s.io/weave-scope created
clusterrolebinding.rbac.authorization.k8s.io/weave-scope created
deployment.apps/weave-scope-app created
service/weave-scope-app created
deployment.apps/weave-scope-cluster-agent created
daemonset.apps/weave-scope-agent created
[root@master ~]# kubectl  get deployments. -n weave 
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
weave-scope-app             1/1     1            1           26m  #展示信息
weave-scope-cluster-agent   1/1     1            1           26m  #收集信息
[root@master ~]# kubectl  get pod  -n  weave 
NAME                                         READY   STATUS    RESTARTS   AGE
weave-scope-agent-jv4g8                      1/1     Running   0          21s
weave-scope-agent-kw7x9                      1/1     Running   0          21s
weave-scope-agent-vnqks                      1/1     Running   0          21s
weave-scope-app-78cff98cbc-nx6p5             1/1     Running   0          21s
weave-scope-cluster-agent-7cc889fbbf-tnrhv   1/1     Running   0          21s

5、查看端口,使用浏览器访问:192.168.1.70:30366

[root@master ~]# kubectl  get svc  -n  weave 
NAME              TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
weave-scope-app   NodePort   10.110.46.45   <none>        80:30366/TCP   41s

k8监控_第9张图片

在scope的web界面中,可以查看很多的东西,pod、node节点等详细信息,包括打开容器的终端,查看其日志信息等等…

三、Prometheus

Prometheus可以原生地监测Kubernetes,Prometheus Operator简化了Kubernetes上的Prometheus设置,并允许使用Prometheus适配器提供自定义指标API。 Prometheus提供强大的查询语言和内置仪表板,用于查询和可视化数据

PS:在这里部署的prometheus,并不是Prometheus官网提供的,而是使用的coreOS提供的Prometheus项目

Prometheus各个组件的作用:

MetricsServer:是k8s集群资源使用情况的聚合器,收集数据给k8s集群内使用,如kubectl,hpa,scheduler等

Prometheus Operator:是一个系统检测和警报工具箱,用来存储监控数据

Prometheus node-exporter:收集k8s集群内资源的数据,指定告警规则

Prometheus:收集apiServer,scheduler,contorller-manager,kubelet组件的数据,通过http协议传输

Grnfana:可视化数据统计和监控平台

k8监控_第10张图片
k8监控_第11张图片

1、克隆Prometheus的项目地址到本地

[root@master ~]# mkdir  prometheus
[root@master ~]# cd  prometheus/
[root@master prometheus]# git  clone  https://github.com/coreos/kube-prometheus.git
[root@master prometheus]# ls
kube-prometheus

2、修改grafana-service.yaml文件,使用NodePort的暴露方式,暴露的端口为31001

[root@master prometheus]# cd  kube-prometheus/manifests/
[root@master manifests]# vim  grafana-service.yaml
#在spec字段下添加
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 31001

3、修改prometheus-service.yaml文件,使用NodePort的暴露方式,暴露的端口为31002

[root@master manifests]# vim  prometheus-service.yaml
#在spec字段下添加
spec:
  type: NodePort
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 31002

4、修改alertmanager-service.yaml(配置告警模板)文件,使用NodePort的暴露方式,暴露的端口为31003

[root@master manifests]# vim  alertmanager-service.yaml
#在spec字段下添加
spec:
  type: NodePort
  ports:
  - name: web
    port: 9093
    targetPort: web
    nodePort: 31003

5、将这个目录中的yaml,全部运行,是运行以上yaml文件的基础环境配置

[root@master manifests]# cd  setup/   #如果想要运行上面的yaml,首先要运行基础环境的设置
[root@master setup]# cd  ..
[root@master manifests]# pwd
/root/prometheus/kube-prometheus/manifests
[root@master manifests]# kubectl  apply  -f  setup/

6、运行主yaml文件

[root@master manifests]# cd  ..
[root@master kube-prometheus]# pwd
/root/prometheus/kube-prometheus
[root@master kube-prometheus]# kubectl  apply  -f  manifests/

7、浏览器访问:192.168.1.70:31001
k8监控_第12张图片
//根据提示修改密码,然后保存登录
k8监控_第13张图片
k8监控_第14张图片
k8监控_第15张图片

//将这三个导入一下

浏览器访问grafan官网:https://grafana.com/导入监控模板
k8监控_第16张图片

搜索prometheus,选择相应的模板
k8监控_第17张图片

复制ID号
k8监控_第18张图片

回到grafan,导入模板
k8监控_第19张图片
k8监控_第20张图片
k8监控_第21张图片

部署成功以后,就可运行一条命令,查看资源使用情况(MetricsServer必须部署成功)

[root@master ~]# kubectl  top  node 
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master   182m         9%     1380Mi          80%       
node01   383m         19%    1402Mi          81%       
node02   396m         19%    1406Mi          81%

总结

dashboard:

可以查看集群中应用的运行状态,也能够修改、创建k8s集群中的个各种资源

用于Kubernetes集群的通用web UI,在dasgboard中,虽然可以做到创建、删除、修改资源等操作,但通常情况下,我们会把它仿作监控k8s集群的软件。dashboard能够直观的看到rc、deployment、pod、service等k8s组件与逆行的情况和日志信息

weave-scope:

可以查看集群中应用的运行状态,也能够修改、创建k8s集群中的个各种资源

Weave Scope是Weaveworks开发的监控工具。Weave Scope在Kubernetes集群中生成进程,容器和主机的映射,以帮助实时了解Docker容器。还可基于图形UI管理容器并在容器上运行诊断命令

Prometheus:

Prometheus是一个开源系统监控和报警工具。

Prometheus服务可以直接通过目标拉取数据,或者间接地通过中间网关拉取数据。它在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中,PromQL和其他API可视化展示收集的数据在K8s中,关于集群的资源有metrics度量值的概念,有各种不同的exporter可以通过api接口对外提供各种度量值的及时数据,prometheus在与k8s融合工作的过程中就是通过与这些提供metric值的exporter进行交互,获取数据,整合数据,展示数据,触发告警的过程

Prometheus可以原生地监测Kubernetes,Prometheus Operator简化了Kubernetes上的Prometheus设置,并允许使用Prometheus适配器提供自定义指标API。 Prometheus提供强大的查询语言和内置仪表板,用于查询和可视化数据

你可能感兴趣的:(Kubernetes)