集群版本:v1.36
容器:containerd
部署监控只用在Master节点操作
需要
科学上网
配置代理环境
#Master节点配置代理,后面要加入仓库时会用到。
export http_proxy=http://172.30.30.2:7897
export https_proxy=http://172.30.30.2:7897
#容器也要配置代理环境,否则拉取不到镜像(所有节点执行)。
#创建 containerd 服务配置目录并写入代理配置
mkdir -p /etc/systemd/system/containerd.service.d
cat > /etc/systemd/system/containerd.service.d/proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://172.30.30.1:7897"
Environment="HTTPS_PROXY=http://172.30.30.1:7897"
Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
EOF
# 重新加载 systemd 配置并重启 containerd
systemctl daemon-reload
systemctl restart containerd
下载所需软件包
yum install helm -y
创建单独的名称空间
#创建单独的名称空间,保持节点干净整洁,也方便后续管理。
kubectl create namespace monitoring
添加Helm仓库
#加入prometheus-community仓库,刚才的代理用到了。
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
安装kube-prometheus-stack
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set grafana.adminPassword=Admin@123
#--namespace 指定名称空间
#--set grafana.adminPassword grafana登录密码
#这个命令会部署以下组件:
prometheus-prometheus-oper-prometheus: Prometheus Server
prometheus-grafana: Grafana 服务器
prometheus-prometheus-oper-alertmanager: Alertmanager
prometheus-kube-state-metrics: 用于监控 Kubernetes 资源对象(如 Deployment、Pod)的状态。
prometheus-prometheus-node-exporter: 用于收集集群每个节点的硬件和操作系统指标(DaemonSet)。
验证安装
# 检查 Pod 是否都正常运行
kubectl get pods -n monitoring
#检查 Service
kubectl get svc -n monitoring
暴露服务端口用于外部访问
#从外部浏览器访问,暴露两个即可,一个prometheus-grafana,一个prometheus-kube-prometheus-prometheus
kubectl edit svc -n monitoring prometheus-grafana
kubectl edit svc -n prometheus-kube-prometheus-prometheus
#将type模式改为NodePort
查看暴露的端口
kubectl get svc -n monitoring prometheus-grafana
kubectl get svc -n monitoring prometheus-kube-prometheus-prometheus
[root@master ~]# kubectl get svc -n monitoring prometheus-grafana
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-grafana NodePort 10.110.142.111 <none> 80:32022/TCP 172m
#端口也可不用随机,可以固定,同样的,用kubectl edit修改端口,将nodePort改为合适的端口。
访问
在外部浏览器输入集群任意网卡IP+端口,即可访问。
http://172.30.30.135:32022 grafana
http://172.30.30.135:32156 prometheus
删除代理
监控部署结束后,就可以删除系统代理和容器内部的代理了,若不关闭,当从外部关闭代理软件时,容器内部就会出问题,查看节点和Pod会出错。
rm -rf /etc/systemd/system/containerd.service.d/proxy.conf
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY
排错
在访问prometheus时,发现以下报错。
Server time is out of sync Detected a time difference of 1m 30.295s between your browser and the server. You may see unexpected time-shifted query results due to the time drift.
显示时间有问题。但集群明明已经做了时间同步,也确认过。此时则就是本地电脑的时间问题。
- 右键任务栏右下角时间 → 调整日期/时间
- 确保 自动设置时间 为 开
- 点击 立即同步(或重新开关自动同步)
其他
因为此时无论访问集群的那个节点,都可以访问到监控,若是想固定下来,可以使用firewalld或者iptables的方法。禁止其他节点(node1、node2)响应 NodePort 端口的请求。
#firewalld方法
# 在 node1 和 node2 上分别执行
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 port port="32022" protocol="tcp" reject'
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 port port="32156" protocol="tcp" reject'
firewall-cmd --reload
#iptables
# 在 node1 和 node2 上分别执行
iptables -A INPUT -p tcp --dport 32022 -j REJECT
iptables -A INPUT -p tcp --dport 32156 -j REJECT
# 保存规则(以 iptables-save 持久化)
确保master节点允许访问。(此时已经打开了防火墙)
# 在 master 上执行
firewall-cmd --permanent --add-port=32022/tcp
firewall-cmd --permanent --add-port=32156/tcp
firewall-cmd --reload
替代方案(更 Kubernetes 原生)
如果希望从根本上不让 kube-proxy 在特定节点上监听 NodePort,目前标准 Kubernetes 不支持按节点禁用 NodePort。但可以:
1. 将 Service 改回
ClusterIP
2. 在 master 上部署一个nginx或kubectl port-forward作为入口,但会引入单点故障。
生产环境中,建议使用Ingress来做更好。为裸机集群提供负载均衡能力的 MetalLB 也是一个很好的选择。可以根据自己的实际情况来选择。
它的工作流程如下:
1. 外部请求访问集群的某个域名或路径。
2. 请求被该控制器接收,并根据预先定义的Ingress规则,判断应转发至哪个内部 Service。
3. 控制器在转发前,会根据配置执行白名单检查,只允许来源IP在列表中的请求通过。
4. 合法的请求被继续转发至对应的后端 Service,完成访问。
0 条评论
发表评论需要 登录
还没有账号?立即注册