Kubernetes集群监控系统的部署
Kubernetes集群监控系统的部署
在k8s集群搭建完毕后,为了对集群中资源利用率进行了解并优化,需要对集群进行监控,因此需要部署监控系统。
Kubernetes监控系统架构主要由核心指标流水线和监控指标流水线协同组成。核心指标流水线由kubelet、资源评估器、metrics-server及API server提供的API群组组成,可用于为kubernetes系统提供核心指标从而能够了解其内部组件和核心程序。监控指标流水线用于从系统收集各种指标数据并提供给终端用户、存储系统及HPA控制器使用。
资源指标API主流的实现是metrics-server,自定义指标API以构建在监控系统Prometheus之上到k8s-prometheus-adapter使用最为广泛。
一、搭建Metrics Server
1.1 拉取metrics server组件并将其存放在metrics-server.yaml文件之中
wget --no-check-certificate https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml -O metrics-server.yaml
若拉取成功,则显示如下:
1.2 将metrics server镜像pull下来
docker pull juestnow/metrics-server:v0.3.7
若pull成功,则显示如下:
1.3 修改metrics-server.yaml中的一些参数以用于后期部署
修改metrics-server.yaml文件,重要是修改了镜像名称和添加了一些启动命令。
vim metrics-server.yaml
修改部分:
image: juestnow/metrics-server:v0.3.7
添加部分:
- --cert-dir=/tmp
- --secure-port=4443
- --metric-resolution=30s
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
- --logtostderr
1.4 部署Metrics Server
kubectl create -f metrics-server.yaml
若部署成功,则如下显示:
1.5 查看metrics-server运行状态
因为metrics-server在k8s架构中也属于一个pod,故使用以下命令进行查看:
kubectl get pods --all-namespaces -o wide
若部署成功,则显示如下:
由图可见,metrics-server的状态由ContainerCreating变为了Running,可见metrics-server部署成功。此时我们便可以查看集群中node和pod对于集群资源的使用情况。
1.6 查看node和pod对于资源的占用情况
kubectl top node
kubectl top pods -A
此时可以看见:
在该图中,可以查看系统中的pod和node对于集群资源的占用情况。
二、部署Kubernetes Dashboard实现可视化
Kubernetes Dashboard是官方的一个基于WEB的用户界面,专门用来管理K8S集群,并展示集群的状态。部署成功可实现Metrics server可视化,便于之后的观察研究。
2.1 拉取dashboard配置文件
–no-check-certificate防止网站证书校验失败。
wget --no-check-certificate https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml
若拉取成功,显示如下:
2.2 对拉取的recommended进行配置
kubectl apply -f recommended.yaml
若配置成功,显示如下:
2.3 配置后发现启动有问题故删除现有的dashboard服务对yaml文件进行重新配置``
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
删除成功显示如下:
2.4 配置yaml文件
需在yaml文件中新增一些参数项。
vim dashboard-svc.yaml
内容如下:
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
2.5 执行yaml文件,再次生成dashboard服务
kubectl apply -f dashboard-svc.yaml
若成功,显示如下:
2.6 查看服务是否生成
kubectl get svc --all-namespaces
若已经生成,显示如下:
记住dashboard的端口号32709,之后需要使用。
2.7 配置dashboard访问权限
修改dashboard-svc-account.yaml文件配置访问权限:
vim dashboard-svc-account.yaml
内容如下:
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dashboard-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
2.8 执行yaml文件
kubectl apply -f dashboard-svc-account.yaml
若执行成功,则如下显示:
2.9 获取token(秘钥)便于dashboard后续访问
#获取token名称
kubectl get secret -n kube-system |grep admin|awk '{print $1}'
#获取token内容
kubectl describe secret dashboard-admin-token-m2b9z -n kube-system|grep '^token'|awk '{print $2}'
获取成功,则显示如下:
token为:
eyJhbGciOiJSUzI1NiIsImtpZCI6IkdMc040eEpOT3MwTkhRME55RXQ4ZHpDLWFoT0drOTJnTFd5TlpOb1NSd0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tbTJiOXoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMDQ3MmI2YTktNWY3OC00OTJkLWFjNjctODNlMDdkYWY1MjhkIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.oxSNBsI-RM-V8YuMadABOlaLtXhYZvvlNU4HzUEpZiWRYL6BFG97yoI2_uv6Z8bd7D6VgywbZsQqpFgA6ZfNQaiudgjO_V4arL5puQD0V5OO8TBqM9BXxUzMN_ksxUqEO4XcUIZ8i0NN3Mh2SHFc3CSQ2c895hP2AthLHSfSHcDHyJTbdWxJkw-B2JDwmwSWag5PotAwlP5rOBwJ2rYKQ6aoBwNRC45dQUxypY_u6B9plESaBRmaBqZHpBUvJWbg6blLIHYrLlO3-r6p2-FwpLSZaQX2Qpyo4PwjXeDbXGhhsGNxG94A9__oY1S9qN1LY7txgc16IYpHAnaKuBpD6g
2.10 查看dashboard被分配在哪个node
kubectl get pods --all-namespaces -o wide
由图可见dashboard被部署在node3上,则dashboard地址为:https://192.168.234.131:32709。
2.11 访问dashboard
按照地址进行访问:
dashboard面板:
查看总体资源利用情况:
进入到node中查看运行中的pod的资源利用情况:
至此,Kubernetes集群监控系统部署完毕。