【k8s】基于Prometheus监控Kubernetes集群安装部署

目录

基于Prometheus监控Kubernetes集群安装部署

一、环境准备

二、部署kubernetes集群

三、部署Prometheus监控平台

四、部署Grafana服务

[五、grafana web操作](#五、grafana web操作)


基于Prometheus监控Kubernetes集群安装部署

一、 环境准备

|-----------------|------------|-----------------------------------|
| IP地址 | 主机名 | 组件 |
| 192.168.100.131 | k8s-master | kubeadm、kubelet、kubectl、docker-ce |
| 192.168.100.132 | k8s-node01 | kubeadm、kubelet、kubectl、docker-ce |
| 192.168.100.133 | k8s-node02 | kubeadm、kubelet、kubectl、docker-ce |

注意:所有主机配置推荐CPU:2C+ Memory:2G+

项目拓扑

1 主机初始化配置

所有主机配置禁用防火墙和selinux

复制代码
[root@localhost ~]# setenforce 0

[root@localhost ~]# iptables -F

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

[root@localhost ~]# systemctl stop NetworkManager

[root@localhost ~]# systemctl disable NetworkManager

[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

2、 配置主机名并绑定hosts,不同主机名称不同

复制代码
[root@localhost ~]# hostname k8s-master

[root@localhost ~]# bash

[root@k8s-master ~]# cat << EOF >> /etc/hosts

192.168.100.131 k8s-master

192.168.100.132 k8s-node01

192.168.100.133 k8s-node02

EOF

root@localhost \~\]# hostname k8s-node01 \[root@k8s-node01 \~\]# cat /etc/hosts

root@localhost \~\]# hostname k8s-node02 \[root@k8s-node02 \~\]#cat /etc/hosts

3、 主机配置初始化

root@k8s-master \~\]# yum -y install vim wget net-tools lrzsz ![](https://file.jishuzhan.net/article/1692059730773544961/fcadea82bff3470e9f73a0a64c7f991d.png) > \[root@k8s-master \~\]# swapoff -a > > \[root@k8s-master \~\]# sed -i '/swap/s/\^/#/' /etc/fstab > > \[root@k8s-master \~\]# cat \<\< EOF \>\> /etc/sysctl.conf > > net.bridge.bridge-nf-call-ip6tables = 1 > > net.bridge.bridge-nf-call-iptables = 1 > > EOF > > \[root@k8s-master \~\]# modprobe br_netfilter > > \[root@k8s-master \~\]# sysctl -p ![](https://file.jishuzhan.net/article/1692059730773544961/3e8ef843d91f4bc5a65d01bfa1a7b6df.png) ****4、**** ****部署docker环境**** ****1)**** ****三台主机上分别部署 Docker 环境,因为 Kubernetes 对容器的编排需要 Docker 的支持。**** > \[root@k8s-master \~\]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo > > \[root@k8s-master \~\]# yum install -y yum-utils device-mapper-persistent-data lvm2 ****2)**** ****使用 YUM 方式安装 Docker 时,推荐使用阿里的 YUM 源。**** > \[root@k8s-master \~\]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ****3)清除缓存**** > \[root@k8s-master \~\]# yum clean all \&\& yum makecache fast ****4)启动docker**** > \[root@k8s-master \~\]# yum -y install docker-ce > > \[root@k8s-master \~\]# systemctl start docker > > \[root@k8s-master \~\]# systemctl enable docker ![](https://file.jishuzhan.net/article/1692059730773544961/4b81f1d54ded41a8ad4dc6db911e5569.png) ****5)**** ****镜像加速器(所有主机配置)**** > \[root@k8s-master \~\]# cat \<\< END \> /etc/docker/daemon.json > > { "registry-mirrors":\[ "https://nyakyfun.mirror.aliyuncs.com"

}

END

6)重启docker

root@k8s-master \~\]# systemctl daemon-reload \[root@k8s-master \~\]# systemctl restart docker

二、 部署kubernetes集群

1、组件介绍

三个节点都需要安装下面三个组件

****kubeadm:****安装工具,使所有的组件都会以容器的方式运行

****kubectl:****客户端连接K8S API工具

kubelet:运行在node节点,用来启动容器的工具

2、配置阿里云yum源

使用 YUM 方式安装 Kubernetes时,推荐使用阿里的 YUM 源。

root@k8s-master \~\]# ls /etc/yum.repos.d/ \[root@k8s-master \~\]# cat \> /etc/yum.repos.d/kubernetes.repo

3、安装kubelet kubeadm kubectl

所有主机配置

root@k8s-master \~\]# yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0

root@k8s-master \~\]# systemctl enable kubelet

root@k8s-master \~\]# kubectl version

kubelet 刚安装完成后,通过 systemctl start kubelet 方式是无法启动的,需要加入节点或初始化为 master 后才可启动成功。

4、配置init-config.yaml

Kubeadm 提供了很多配置项,Kubeadm 配置在 Kubernetes 集群中是存储在ConfigMap 中的,也可将这些配置写入配置文件,方便管理复杂的配置项。Kubeadm 配内容是通过 kubeadm config 命令写入配置文件的。

在master节点安装,master 定于为192.168.100.131,通过如下指令创建默认的init-config.yaml文件:

root@k8s-master \~\]# kubeadm config print init-defaults \> init-config.yaml

init-config.yaml配置

root@k8s-master \~\]# cat init-config.yaml ![](https://file.jishuzhan.net/article/1692059730773544961/8d7de903f4c2468a88c01e3c9d7b36d0.png) ****5、安装master节点**** ****1)**** ****拉取所需镜像**** \[root@k8s-master \~\]# kubeadm config images list --config init-config.yaml ![](https://file.jishuzhan.net/article/1692059730773544961/eae584ae50204d5190692896fd8091a1.png) \[root@k8s-master \~\]# kubeadm config images pull --config init-config.yaml ![](https://file.jishuzhan.net/article/1692059730773544961/6f92196752bc4b86bdbff8f40d5f3c5c.png) ****2)**** ****安装matser节点**** \[root@k8s-master \~\]# kubeadm init --config=init-config.yaml //初始化安装K8S ![](https://file.jishuzhan.net/article/1692059730773544961/56db742a29d645a78619d390ad19747c.png) ****3)**** ****根据提示操作**** kubectl 默认会在执行的用户家目录下面的.kube 目录下寻找config 文件。这里是将在初始化时\[kubeconfig\]步骤生成的admin.conf 拷贝到.kube/config > ****\[root@k8s-master \~\]# mkdir -p $HOME/.kube**** > > ****\[root@k8s-master \~\]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config**** > > ****\[root@k8s-master \~\]# chown $(id -u):$(id -g) $HOME/.kube/config**** ![](https://file.jishuzhan.net/article/1692059730773544961/fbfc23f997c0499cb5181c0d24fc58c1.png) Kubeadm 通过初始化安装是不包括网络插件的,也就是说初始化之后是不具备相关网络功能的,比如 k8s-master 节点上查看节点信息都是"Not Ready"状态、Pod 的 CoreDNS无法提供服务等。 ![](https://file.jishuzhan.net/article/1692059730773544961/298655110488499380def578382ea2ce.png) ****6、安装node节点**** ****1)**** ****根据master安装时的提示信息**** > \[root@k8s-node01 \~\]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae ![](https://file.jishuzhan.net/article/1692059730773544961/d3cf44dd2ba94fdbb8ed5cb28e9d69e6.png) > \[root@k8s-master \~\]# kubectl get nodes > > \[root@k8s-node02 \~\]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae ![](https://file.jishuzhan.net/article/1692059730773544961/863d384d5cc2418999e09e6ce58a151a.png) ****Master操作:**** ****\[root@k8s-master \~\]# kubectl get nodes**** ![](https://file.jishuzhan.net/article/1692059730773544961/a2e0f3e71b0b4deaace6ee154a23b542.png) 前面已经提到,在初始化 k8s-master 时并没有网络相关配置,所以无法跟 node 节点通信,因此状态都是"NotReady"。但是通过 kubeadm join 加入的 node 节点已经在k8s-master 上可以看到。 ****7、安装flannel**** Master 节点NotReady 的原因就是因为没有使用任何的网络插件,此时Node 和Master的连接还不正常。目前最流行的Kubernetes 网络插件有Flannel、Calico、Canal、Weave 这里选择使用flannel。 ****所有主机:**** ****master上传kube-flannel.yml,所有主机上传flannel_v0.12.0-amd64.tar,cni-plugins-linux-amd64-v0.8.6.tgz**** > \[root@k8s-master \~\]# docker load \< flannel_v0.12.0-amd64.tar ![](https://file.jishuzhan.net/article/1692059730773544961/1c73a4b7e3a34edd8cada5c141b221b9.png) ****上传插件:**** ****\[root@k8s-master \~\]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz**** ****\[root@k8s-master \~\]# cp flannel /opt/cni/bin/**** ![](https://file.jishuzhan.net/article/1692059730773544961/9339907f58e346e9858350a3d7260570.png) ****master上传kube-flannel.yml**** ****master主机配置:**** \[root@k8s-master \~\]# kubectl apply -f kube-flannel.yml ![](https://file.jishuzhan.net/article/1692059730773544961/13dc2429fa6f47d6b3bee03c8f2fb78b.png) > \[root@k8s-master \~\]# kubectl get nodes > > \[root@k8s-master \~\]# kubectl get pods -n kube-system ![](https://file.jishuzhan.net/article/1692059730773544961/7bf27b856521451fa774849e7bedbfba.png) ****已经是ready状态**** ****8、部署测试应用**** ****1)**** ****所有node主机导入测试镜像**** \[root@k8s-master \~\]# docker pull nginx ![](https://file.jishuzhan.net/article/1692059730773544961/495e82d1d17447fc964073df328c4256.png) ****2)**** ****在Kubernetes集群中创建一个pod,验证是否正常运行。**** \[root@k8s-master \~\]# mkdir demo \[root@k8s-master \~\]# cd demo \[root@k8s-master demo\]# vim nginx-deployment.yaml ![](https://file.jishuzhan.net/article/1692059730773544961/f3dddc51b77d49bab62519b62bf7abb8.png) 创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。通过 get pods 可以查看到 Pod 容器资源已经自动创建完成。 ****\[root@k8s-master demo\]# kubectl create -f nginx-deployment.yaml**** ****\[root@k8s-master demo\]# kubectl get pods**** ![](https://file.jishuzhan.net/article/1692059730773544961/ac1a7bba3e714253888688dcdfdaa537.png) ****\[root@k8s-master demo\]# kubectl get pods -o wide**** ![](https://file.jishuzhan.net/article/1692059730773544961/b0eb760d336d4bb6928320efb46f3706.png) ****3)**** ****创建Service资源清单**** 在创建的 nginx-service 资源清单中,定义名称为 nginx-service 的 Service、标签选择器为 app: nginx、type 为 NodePort 指明外部流量可以访问内部容器。在 ports 中定义暴露的端口库号列表,对外暴露访问的端口是 80,容器内部的端口也是 80。 ****\[root@k8s-master demo\]# vim nginx-service.yaml**** ![](https://file.jishuzhan.net/article/1692059730773544961/34e963e34b3e4919bd24212279fd83b8.png) ****\[root@k8s-master1 demo\]# kubectl create -f nginx-service.yaml**** ****\[root@k8s-master demo\]# kubectl get svc**** ![](https://file.jishuzhan.net/article/1692059730773544961/ab088191a3ee4cc0a255b0840913bed8.png) .访问测试 ****\[root@k8s-master demo\]#**** ****curl 10.101.253.90:80**** ![](https://file.jishuzhan.net/article/1692059730773544961/8311ebd35450499e8f0ed94af92767c3.png) ****通过浏览器访问nginx:**** [http://192.168.100.131:31](http://192.168.200.111:32188 "http://192.168.100.131:31")****367**** ![](https://file.jishuzhan.net/article/1692059730773544961/5fa950ef3eda4e1a877cf2fc920a1799.png) ## ****三、**** ****部署Prometheus监控平台**** ****1、**** ****准备Prometheus相关YAML文件**** ****在master节点/opt目录下新建pgmonitor目录**** > \[root@k8s-master \~\]# mkdir pgmonitor > > \[root@k8s-master \~\]# cd pgmonitor/ ****将下载yaml包上传至/opt/pgmonitor目录并解压**** > \[root@k8s-master \~\]# unzip k8s-prometheus-grafana-master.zip ![](https://file.jishuzhan.net/article/1692059730773544961/7333c13ab92c4a2baf3213b41236ced4.png) ****2、部署prometheus**** ****1)**** ****部署守护进程**** > \[root@k8s-master pgmonitor\]# cd k8s-prometheus-grafana-master/ > > \[root@k8s-master k8s-prometheus-grafana-master\]# kubectl create -f ****node-exporter.yaml**** ****2)**** ****部署其他yaml文件**** > 进入/pgmonitor/k8s-prometheus-grafana-master/prometheus目录 > > \[root@k8s-master k8s-prometheus-grafana-master\]# cd prometheus ****3)**** ****部署rbac**** > \[root@k8s-master prometheus\]# kubectl create -f ****rbac-setup.yaml**** ****4)**** ****部署configmap.yaml**** > \[root@k8s-master prometheus\]# kubectl create -f ****configmap.yaml**** ****5)**** ****部署prometheus.deploy.yml**** > \[root@k8s-master prometheus\]# kubectl create -f ****prometheus.deploy.yml**** ****6)**** ****部署prometheus.svc.yml**** > \[root@k8s-master prometheus\]# kubectl create -f ****prometheus.svc.yml**** ****7)**** ****查看prometheus状态**** > \[root@k8s-master prometheus\]# kubectl get pods -n kube-system ![](https://file.jishuzhan.net/article/1692059730773544961/0645104668784b5fbf480008614c7e0b.png) ****稍等一会,再次查看!**** > \[root@k8s-master prometheus\]# kubectl get pods -n kube-system ![](https://file.jishuzhan.net/article/1692059730773544961/80633e7eca0847c083c521597467b4bd.png) ## ****四、**** ****部署Grafana服务**** ****1、部署Grafana相关yaml文件**** > 进入/opt/pgmonitor/k8s-prometheus-grafana-master/grafana目录 > > \[root@k8s-master prometheus\]# cd ../grafana/ ****1)**** ****部署grafana-deploy.yaml**** > \[root@k8s-master grafana\]# kubectl create -f ****grafana-deploy.yaml**** ****2)**** ****部署grafana-svc.yaml**** > \[root@k8s-master grafana\]# kubectl create -f ****grafana-svc.yaml**** ****3)**** ****部署grafana-ing.yaml**** > \[root@k8s-master grafana\]# kubectl create -f ****grafana-ing.yaml**** ****4)**** ****查看Grafana状态**** > \[root@k8s-master grafana\]# kubectl get pods -n ![](https://file.jishuzhan.net/article/1692059730773544961/a0d65accb10a4988afc927e7349bd182.png) ****2、配置Grafana数据源**** ****1)**** ****查看grafana的端口**** \[root@k8s-master grafana\]# kubectl get svc -n ![](https://file.jishuzhan.net/article/1692059730773544961/b31b85746b6c4daf9a2f18b590c4aef3.png) ## 五、grafana web操作 ****2)**** ****通过浏览器访问**** grafana,http://\[masterIP\]:\[grafana端口

例如:http://192.168.100.131:30503,默认的用户名和密码:admin/admin

3) 设置DataSource

设置显示数据的模版

输入315并移除光标,等一会儿即可进入下一个页面

选择自己定义的数据源名称

至此已经利用Prometheus+Granfana监控了Kubernetes平台。

相关推荐
ghostwritten1 小时前
Docker Registry Clean
运维·docker·容器
宋冠巡2 小时前
Windows安装Docker(Docker Desktop)
windows·docker·容器
小马爱打代码3 小时前
Kubernetes 中部署 Ceph,构建高可用分布式存储服务
分布式·ceph·kubernetes
阿噜噜小栈3 小时前
最新国内可用的Docker镜像加速器地址收集
运维·笔记·docker·容器
云上艺旅3 小时前
K8S学习之基础六十八:Rancher创建deployments资源
学习·云原生·容器·kubernetes·rancher
rider1893 小时前
【4】搭建k8s集群系列(二进制部署)之安装master节点服务(kube-apiserver)
云原生·容器·kubernetes
海鸥815 小时前
podman和与docker的比较 及podman使用
docker·容器·podman
GreenMountainEcho11 小时前
Kubernetes 入门篇之 Node 安装与部署
云原生·容器·kubernetes
zyk_52012 小时前
Docker desktop如何汉化
运维·docker·容器
韭菜盖饭12 小时前
解决Docker端口映射后外网无法访问的问题
运维·docker·容器