【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

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

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

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

5、安装master节点

1) 拉取所需镜像

root@k8s-master \~# kubeadm config images list --config init-config.yaml

root@k8s-master \~# kubeadm config images pull --config init-config.yaml

2) 安装matser节点

root@k8s-master \~# kubeadm init --config=init-config.yaml //初始化安装K8S

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

Kubeadm 通过初始化安装是不包括网络插件的,也就是说初始化之后是不具备相关网络功能的,比如 k8s-master 节点上查看节点信息都是"Not Ready"状态、Pod 的 CoreDNS无法提供服务等。

6、安装node节点

1) 根据master安装时的提示信息

root@k8s-node01 \~# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae

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

Master操作:

root@k8s-master \~# kubectl get nodes

前面已经提到,在初始化 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

上传插件:

root@k8s-master \~# tar xf cni-plugins-linux-amd64-v0.8.6.tgz

root@k8s-master \~# cp flannel /opt/cni/bin/

master上传kube-flannel.yml

master主机配置:

root@k8s-master \~# kubectl apply -f kube-flannel.yml

root@k8s-master \~# kubectl get nodes

root@k8s-master \~# kubectl get pods -n kube-system

已经是ready状态

8、部署测试应用

1) 所有node主机导入测试镜像

root@k8s-master \~# docker pull nginx

2) 在Kubernetes集群中创建一个pod,验证是否正常运行。

root@k8s-master \~# mkdir demo

root@k8s-master \~# cd demo

root@k8s-master demo# vim nginx-deployment.yaml

创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。通过 get pods 可以查看到 Pod 容器资源已经自动创建完成。

root@k8s-master demo# kubectl create -f nginx-deployment.yaml

root@k8s-master demo# kubectl get pods

root@k8s-master demo# kubectl get pods -o wide

3) 创建Service资源清单

在创建的 nginx-service 资源清单中,定义名称为 nginx-service 的 Service、标签选择器为 app: nginx、type 为 NodePort 指明外部流量可以访问内部容器。在 ports 中定义暴露的端口库号列表,对外暴露访问的端口是 80,容器内部的端口也是 80。

root@k8s-master demo# vim nginx-service.yaml

root@k8s-master1 demo# kubectl create -f nginx-service.yaml

root@k8s-master demo# kubectl get svc

.访问测试

root@k8s-master demo# curl 10.101.253.90:80

通过浏览器访问nginx: http://192.168.100.131:31367

三、 部署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

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

稍等一会,再次查看!

root@k8s-master prometheus# kubectl get pods -n kube-system

四、 部署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

2、配置Grafana数据源

1) 查看grafana的端口

root@k8s-master grafana# kubectl get svc -n

五、grafana web操作

2) 通过浏览器访问

grafana,http://masterIP:grafana端口

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

3) 设置DataSource

设置显示数据的模版

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

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

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

相关推荐
Plastic garden3 小时前
Docker(1)
运维·docker·容器
gs801404 小时前
网络隐形杀手:从 Could not connect to SMTP host 报错深度剖析 Docker MTU 黑洞理论与实战
网络·docker·容器
程序猿阿伟4 小时前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
java_logo5 小时前
2026 Docker 国内镜像加速配置教程
运维·docker·容器·docker镜像·docker镜像源·docker镜像加速·docker镜像国内库
IT策士6 小时前
Docker从0到1再到 Kubernetes 实战:第15篇Compose 中的服务依赖、健康检查与启动顺序
docker·容器·kubernetes
Waay6 小时前
K8s Deployment 滚动更新与回滚深度详解(含踩坑实录+生产选型原理)
云原生·容器·kubernetes
顾默@6 小时前
双系统Ubuntu18.04升级22.04,安装docker进行openclaw安装
运维·docker·容器
蜀道山老天师7 小时前
Docker Compose 多容器编排实战:LNMP、Tomcat 集群、云桌面、Portainer、Zabbix 一键部署
运维·docker·容器·tomcat·zabbix
见牛羊8 小时前
docker理解
java·docker·容器
IT策士11 小时前
Docker 从 0 到 1 再到 Kubernetes 实战:第18篇 从 Docker Compose 到 Kubernetes 的思考
docker·容器·kubernetes