主要内容:
Metrics资源利用率监控、存储卷管理(临时卷ConfitMap、EmptyDir、持久卷HostPath、NFS(PV/PVC))
一、Metrics介绍
metrics是一个监控系统资源使用的插件,可以监控Node节点上的CPU、内存的使用率,或Pod对资源的占用率,通过对资源占用的了解,可以更加合理的部署容器应用;
补充:metrics从Kubernetes 1.8开始,资源使用情况的监控可以通过Metrics API的形式获取,具体的组件为Metrics Server,用来替换之前的heapster插件,所以heapster从1.11开始逐渐被放弃;
报错说明:没有http:heapster插件,该插件已被Metrics Server替换,需安装Metrics插件;
[root@master ~]# kubectl top node //查看资源占用情况
Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)
部署metrics-server服务示例:
① 开启聚合服务参数
② 签发Kubelet证书
③ 安装metrics-server插件
④ 执行所有资源文件
- apiservice.yaml //注册集群API的资源文件
- deployment.yaml //主进程metrics的资源文件
- metrisc-server.tar.gz //metrisc-server插件镜像压缩包
- pdb.yaml //中断控制器
- rbac.yaml //授权控制器
- service.yaml //后端是metrics主进程的服务
1)开启聚合服务
Metrics-server是扩展的Apiserver,依赖于kube-aggregator,因此需要在Apiserver中开启聚合API相关参数(-- enable-aggregator-routing=true)
修改Api-server启动参数流程:
① 配置文件:/etc/kubernetes/manifests/kube-apiserver.yaml
- - 配置spec.containers.command添加:- -- enable-aggregator-routing=true
② 重启服务:systemctl restart kubelet
③ 验证配置:kubectl -n kube-system get pod 容器名 -o yaml | grep enable-aggregator-routing
步骤1:开启apiserver聚合服务参数
① 备份配置文件(强烈建议备份)
[root@master ~]# cd /etc/kubernetes/manifests/
[root@master manifests]# cp kube-apiserver.yaml kube-apiserver.yaml.bak //备份文件
[root@master manifests]# mv kube-apiserver.yaml.bak /root/
注意:K8S默认会载入所有配置文件,该目录下的两个文件即使修改差一个参数不同,也会一并载入可能导致覆盖,所以必须将备份文件放在其它目录,避免干扰;
② 修改配置文件,并重启验证服务
# 在spec.containers.command 最下面手动添加如下一行
[root@master manifests]# vim kube-apiserver.yaml
- --enable-aggregator-routing=true
[root@master manifests]# systemctl restart kubelet //重启服务
[root@master manifests]# kubectl -n kube-system get pod kube-apiserver-master -o yaml | grep enable-aggregator-routing //验证服务
- --enable-aggregator-routing=true
常见报错:配置文件修改错误,会导致Apiserver无法使用,需备份文件还原
修改配置示例:
2)kubelet证书
metrics插件需使用kubelet证书,需手动为kubelet签发证书;
证书的申请与签发流程:
① 配置文件:/var/lib/kubelet/config.yaml
- - 配置:serverTLSBootstrap: true //文件的最后一行添加
② 重启服务:systemctl restart kubelet
③ 签发证书:
查看证书
- - 格式:kubectl get certificatesigningrequests
签发证书
- - 格式:kubectl certificate approve 证书名称
删除证书(多余证书)
- - 格式:kubectl delete certificatesigningrequests 证书名称
步骤2:证书的申请与签发(master,node-0001,node-0002,node-0003操作)
补充:证书在签发过程中是有时效性的,当证书申请后一直未签发,kubelet会认为证书失效或丢弃,重新创建带Pending的证书,只要将该些证书签发即可,申请多余证书可删除;
① 修改配置文件,并重启服务(以master为例)
[root@master ~]# vim /var/lib/kubelet/config.yaml
serverTLSBootstrap: true //在文件的最后一行添加(申请证书参数开启)
[root@master ~]# systemctl restart kubelet //重启服务
② 签发证书(必须在 master 上执行)
[root@master ~]# kubectl get certificatesigningrequests //查看证书
NAME AGE REQUESTOR CONDITION
csr-5zbkt 13m system:node:node-0001 Pending
csr-7g67s 13m system:node:node-0002 Pending
csr-bqzjk 14m system:node:master Pending
csr-cw9dz 12m system:node:node-0003 Pending
# 在Master上,为每个节点的证书进行签发
[root@master ~]# kubectl certificate approve csr-bqzjk
certificatesigningrequest.certificates.k8s.io/csr-bqzjk approved
[root@master ~]# kubectl certificate approve csr-5zbkt
certificatesigningrequest.certificates.k8s.io/csr-5zbkt approved
[root@master ~]# kubectl certificate approve csr-7g67s
certificatesigningrequest.certificates.k8s.io/csr-7g67s approved
[root@master ~]# kubectl certificate approve csr-cw9dz
certificatesigningrequest.certificates.k8s.io/csr-cw9dz approved
[root@master ~]# kubectl get certificatesigningrequests //查看证书
NAME AGE REQUESTOR CONDITION
csr-5zbkt 11m system:node:node-0001 Approved,Issued
csr-7g67s 10m system:node:node-0002 Approved,Issued
csr-bqzjk 11m system:node:master Approved,Issued
csr-cw9dz 10m system:node:node-0003 Approved,Issued
3)安装Metrics-server插件
方法1:官网https://github.com/kubernetes-sigs/metrics-server
方法2:下载镜像和资源文件,并导入私有仓库
- - 格式:kubectl top node //查询节点的资源占用率(CPU、内存的占用情况)
步骤3:安装mertics插件
# 拷贝云盘的kubernetes/v1.17.6/metrics 目录到 master 上
[root@ecs-proxy v1.17.6]# rsync -av metrics/ 192.168.1.21:/root
[root@master ~]# tree metrics/
metrics/
├── apiservice.yaml //注册集群API的资源文件
├── deployment.yaml //主进程metrics的资源文件
├── metrisc-server.tar.gz //metrisc-server插件镜像压缩包
├── pdb.yaml //中断控制器
├── rbac.yaml //授权控制器
└── service.yaml //后端是metrics主进程的服务
0 directories, 6 files
① 导入mertics插件镜像,并上传私有镜像仓库
[root@master ~]# cd metrics/
[root@master metrics]# docker load -i metrisc-server.tar.gz
[root@master metrics]# docker tag gcr.io/k8s-staging-metrics-server/metrics-server:master 192.168.1.100:5000/metrics-server:master
[root@master metrics]# docker push 192.168.1.100:5000/metrics-server:master
② 修改deployment资源文件
[root@master metrics]# vim deployment.yaml
29: image: 192.168.1.100:5000/metrics-server:master //修改镜像地址
③ 执行资源文件(按照顺序依次创建)
[root@master metrics]# kubectl apply -f rbac.yaml //授权控制器
[root@master metrics]# kubectl apply -f pdb.yaml //中断控制器
[root@master metrics]# kubectl apply -f deployment.yaml //主进程metrics
[root@master metrics]# kubectl apply -f service.yaml //后端是metrics主进程的服务
[root@master metrics]# kubectl apply -f apiservice.yaml //注册集群API
④ 查询验证
# Metrics插件默认将pod、service、apiservices放在kube-system系统命名空间
[root@master metrics]# kubectl -n kube-system get pod //查看Pod资源
metrics-server-67fbd5bb7b-qbgkx 1/1 Running 0 2m2s
[root@master metrics]# kubectl -n kube-system get service //查看service资源
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.254.0.10 <none> 53/UDP,53/TCP,9153/TCP 4d22h
metrics-server ClusterIP 10.254.60.149 <none> 443/TCP 2m28s
[root@master metrics]# kubectl -n kube-system get apiservices //查看apiservices资源
注意:当kube-system/metrics-server的状态为True,部署Metrics插件才完成;
⑤ 验证:查询节点的资源占用率(CPU、内存的占用情况)
[root@master metrics]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master 79m 3% 2322Mi 62%
node-0001 23m 1% 938Mi 25%
node-0002 20m 1% 943Mi 25%
node-0003 20m 1% 1150Mi 31%
扩展:CPU毫核:CPU的计量单位叫毫核。集群中的每一个节点可以通过操作系统确认本节点的CPU内核数量,将这个数量乘以1000,得到的就是节点总的CPU总数量。
⑥ 验证:监控POD容器资源利用率
[root@master ~]# kubectl apply -f myapache.yaml
deployment.apps/myapache configured
[root@master ~]# watch -n 1 'kubectl top pod' &