一.Metrics-Server部署
1.Metrics-Server是集群核心监控数据的聚合器,用来替换之前的heapster。
2.容器相关的 Metrics 主要来自于 kubelet 内置的 cAdvisor 服务,有了Metrics-Server之后,用户就可以通过标准的 Kubernetes API 来访问到这些监控数据。
Metrics API 只可以查询当前的度量数据,并不保存历史数据。
Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护。
必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据
3.Metrics Server 并不是 kube-apiserver 的一部分,而是通过 Aggregator 这种插件机制,在独立部署的情况下同 kube-apiserver 一起统一对外服务的。
4.kube-aggregator 其实就是一个根据 URL 选择具体的 API 后端的代理服务器
5.Metrics-server属于Core metrics(核心指标),提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况。而其他Custom Metrics(自定义指标)由Prometheus等组件来完成
# 准备部署文件
server2
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml #提前下好所需镜像并上传到本地仓库,在文件中注意修改镜像拉取位置
# 准备本地镜像
server1
docker search metrics-server
docker pull bitnami/metrics-server:0.4.0
docker tag bitnami/metrics-server:0.4.0 reg.westos.org/library/metrics-server:0.4.0
docker push reg.westos.org/library/metrics-server:0.4.0
# 部署
kubectl apply -f components.yaml
kubectl get pod -n kube-system
kubectl get svc -n kube-system
kubectl describe pod metrics-server-cc476ccf8-t7j8t -n kube-system
kubectl logs -n kube-system metrics-server-cc476ccf8-t7j8t #部署后查看Metrics-server的Pod日志
报错1:x509: certificate signed by unknown authority
Metric Server 支持一个参数 --kubelet-insecure-tls,可以跳过这一检查,然而官方也明确说了,这种方式不推荐生产使用
# 启用TLS Bootstrap 证书签发
vim /var/lib/kubelet/config.yaml # 所有节点都需要修改
serverTLSBootstrap: true
systemctl restart kubelet
kubectl get csr
kubectl certificate approve csr-4tdc7
kubectl top node
kubectl -n kube-system top pod
可能会有的错误2:dial tcp: lookup server2 on 10.96.0.10:53: no such host
这是因为没有内网的DNS服务器,所以metrics-server无法解析节点名字。可以直接修改coredns的configmap,讲各个节点的主机名加入到hosts中,这样所有Pod都可以从CoreDNS中解析各个节点的名字
kubectl edit configmap coredns -n kube-system
apiVersion: v1
data:
Corefile: |
...
ready
hosts {
172.25.0.11 server1
172.25.0.12 server2
172.25.0.13 server3
fallthrough
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
可能会有的报错3: Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
如果metrics-server正常启动,没有错误,应该就是网络问题。修改metrics-server的Pod 网络模式:hostNetwork: true
# 部署成功后
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/server2"
二.Dashboard部署
Dashboard可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源
参考网址
k8s master server2
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml #下载部署文件
vim recommended.yaml #修改镜像拉取位置,下载并上传镜像
本地仓库 server1
docker pull kubernetesui/dashboard:v2.2.0
docker tag kubernetesui/dashboard:v2.2.0 reg.westos.org/kubernetesui/dashboard:v2.2.0
docker push reg.westos.org/kubernetesui/dashboard:v2.2.0
docker pull kubernetesui/metrics-scraper:v1.0.6
docker tag kubernetesui/metrics-scraper:v1.0.6 reg.westos.org/kubernetesui/metrics-scraper:v1.0.6
docker push reg.westos.org/kubernetesui/metrics-scraper:v1.0.6
server2
kubectl apply -f recommended.yaml
参考metallb,结合 LoadBalancer 类型的 Service,实现虚拟IP访问dashboard,方便外部访问
kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard
外部访问,登陆dashboard需要认证,需要获取dashboard pod的token
kubectl get sa -n kubernetes-dashboard
kubectl describe -n kubernetes-dashboard secrets kubernetes-dashboard-token-4jr24
Dashboard如果无法展示metrics-server的数据指标,可以通过以下两种方式解决:
修改dashboard-metrics-scraper 的Pod网络模式: hostNetwork: true
通过node或pod的亲和性设置,让dashboard-metrics-scraper和metrics-server的Pod处于同一个node节点
# 默认dashboard对集群没有操作权限,需要授权
# 集群角色绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kubernetes-dashboard
创建一个pod