搬瓦工VPS
Bandwagonhost

2025最新实践:在Linux VPS上部署Kubernetes (K8s) 与Prometheus监控

在现代IT架构中,Kubernetes (K8s) 与 Prometheus 的组合已成为容器编排与可观测性的“黄金标准”。拥有一个自己的K8s集群,无论对于学习、开发测试,还是部署高可用应用,都极具价值。本教程将摒弃一些过时的方法(如旧版软件源、docker-shim等),为您提供一套截至2025年9月,在任何主流Linux VPS(如搬瓦工)上,从零开始部署一个现代化、安全、高效的Kubernetes集群,并集成Prometheus全家桶监控的完整流程。

一、 基础概念与准备工作

在正式开始部署之前,让我们先快速了解几个核心概念和需要满足的基本条件,这有助于我们更好地理解后续的每一步操作。

1.1 Kubernetes & Prometheus 简介

  • Kubernetes (K8s): 一个开源的容器编排平台,能自动化管理容器化应用的部署、扩展和运维。
  • Prometheus: 一款顶级的开源监控与告警系统,与Grafana结合,能提供极其强大的数据可视化能力。

1.2 准备条件

  • VPS服务器: 至少一台。最低建议配置:2核CPU / 2GB内存(仅供最小化测试)。推荐使用像搬瓦工CN2 GIA-E或香港套餐这样拥有高性能CPU和NVMe硬盘的VPS,以获得更流畅的控制平面和监控体验。
  • 操作系统: Ubuntu 22.04+ 或 Debian 12+。
  • 权限: 拥有sudoroot权限。
  • 网络: 确保服务器可以访问外网,并且(如果是多节点集群)节点之间网络互通。

二、 第一阶段:准备节点环境 (Node Preparation)

在安装Kubernetes之前,我们需要对Linux系统进行一些基础配置,确保它满足K8s的运行要求。这个阶段的操作是后续所有步骤的基石,请在所有将要成为K8s节点的VPS上执行。

2.1 关闭Swap分区 (K8s要求)

Kubernetes的设计理念要求内存的分配和管理是可预测的,而Swap(虚拟内存)机制会干扰调度器的决策。因此,官方强制要求在所有节点上关闭Swap。

sudo swapoff -a
# 为了永久关闭,需要注释掉/etc/fstab中的swap配置
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

2.2 配置内核参数与加载模块

为了让容器网络(Pod之间的通信)能够正常工作,我们需要调整一些内核参数,启用IP转发和iptables桥接功能。

sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system

2.3 安装Containerd容器运行时

从K8s 1.24版本开始,Docker不再是内置的容器运行时。我们遵循社区的最佳实践,安装轻量且高效的containerd作为容器的运行环境。

sudo apt-get update
sudo apt-get install -y containerd

# 生成默认配置文件
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

# 【重要】修改配置文件,启用systemd cgroup驱动
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 重启并启用containerd
sudo systemctl restart containerd
sudo systemctl enable containerd

三、 第二阶段:安装Kubernetes组件

环境准备就绪后,我们开始安装Kubernetes的核心组件,俗称“三剑客”:kubelet, kubeadm, kubectl

3.1 添加Kubernetes官方软件源 (2025最新方法)

为了确保能安装到官方维护的、最新版本的Kubernetes,我们需要添加其官方软件源。旧的packages.cloud.google.com源已不推荐,我们采用新的社区源pkgs.k8s.io和更安全的GPG密钥添加方法。

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

# 添加新的GPG密钥(安全方法)
sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 添加软件源
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

(注意:v1.30是示例版本,您可以根据需要替换为最新的稳定版)

3.2 安装kubelet, kubeadm, kubectl

现在,我们从刚刚添加的源中,安装这三个核心组件。

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 防止自动更新造成版本错乱

四、 第三阶段:初始化Kubernetes集群

这是最激动人心的阶段,我们将亲手“点燃”我们的Kubernetes集群,让主节点(Master Node)正式上线。此阶段操作仅在主节点上执行。

4.1 初始化主节点

我们使用kubeadm init命令来完成集群的初始化工作。

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository=registry.k8s.io
  • --pod-network-cidr: 为Pod网络指定地址段,后续的Flannel网络插件默认使用这个段。
  • --image-repository: 指定使用官方社区镜像仓库registry.k8s.io,避免国内访问k8s.gcr.io可能遇到的网络问题。

初始化成功后,屏幕会输出一条kubeadm join ...的命令,请务必复制并保存好,这是将来添加其他工作节点(Worker Node)时要用的“通行证”。

4.2 配置kubectl

为了能以普通用户身份管理集群,我们需要配置kubectl命令行工具的访问凭证。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.3 部署网络插件 (CNI)

一个空的K8s集群,Pod之间还无法通信,需要安装网络插件(CNI)。我们以简单易用的Flannel为例。

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

4.4 验证集群状态

最后,我们来检查一下集群的健康状况。

kubectl get nodes

等待几分钟,当您看到节点状态从NotReady变为Ready时,恭喜您,您的K8s集群核心已成功就绪!

(可选) 如果您是单节点集群,需要解除主节点的角色限制,使其也能运行普通应用:

kubectl taint nodes --all node-role.kubernetes.io/master-
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

五、 第四阶段:部署Prometheus监控系统

现在,我们为健康的集群装上强大的“眼睛”——Prometheus监控套件。使用Helm包管理器,可以极大地简化这个过程。

5.1 安装Helm

Helm是Kubernetes生态系统中最流行的包管理器,如同K8s世界的aptyum

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

5.2 部署kube-prometheus-stack

我们将安装kube-prometheus-stack,这是一个包含了Prometheus, Grafana, Alertmanager等全套监控告警组件的“全家桶”,可以一站式解决所有监控需求。

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

helm install my-prometheus prometheus-community/kube-prometheus-stack \
  --namespace monitoring --create-namespace

等待安装完成后,使用 kubectl get pods -n monitoring 查看所有监控组件的Pod是否都处于Running状态。

六、 第五阶段:访问与使用

部署成功后,我们便可以访问监控系统的Web界面,查看我们集群的各项指标了。

6.1 访问Grafana仪表盘 (可视化)

Grafana是数据可视化的核心,它能将Prometheus采集到的枯燥数据,变成炫酷直观的图表。

为了方便测试,我们先通过端口转发的方式,将服务器上的Grafana端口映射到本地访问。

# 通过端口转发临时访问
kubectl --namespace monitoring port-forward svc/my-prometheus-grafana 3000:80

现在,在您本地电脑的浏览器中访问 http://127.0.0.1:3000

  • 默认用户名: admin
  • 默认密码查询方法:
    kubectl --namespace monitoring get secret my-prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
    

登录后,您会看到大量预设好的、极其专业的仪表盘,实时展示着您K8s集群的CPU、内存、网络、磁盘等各项性能指标。

总结

恭喜您!通过遵循最新的实践,您已经成功在VPS上搭建了一个现代化的Kubernetes集群,并为其配备了强大的“眼睛”——Prometheus与Grafana监控系统。这不仅仅是一次技术实践,更是您迈向云原生时代的坚实一步。从这里开始,您可以探索更多应用的容器化部署,享受自动化运维带来的高效与便捷。

搬瓦工最值得买的方案整理

以下搬瓦工套餐非广告植入,而是站长亲身使用后的真实推荐,希望能帮到有需要的朋友。

套餐 CPU 内存 硬盘 流量 带宽 机房 价格 购买
KVM线路 2核 1GB 20GB 1TB 1Gbps 9个机房 $49.99/年 购买
KVM线路 3核 2GB 40GB 2TB 1Gbps 9个机房 $52.99/半年
$99.99/年
购买
CN2 GIA-E 2核 1GB 20GB 1TB 2.5Gbps 日本软银
等14个机房
$49.99/季度
$169.99/年
购买
CN2 GIA-E 3核 2GB 40GB 2TB 2.5Gbps 日本软银
等14个机房
$89.99/季度
$299.99/年
购买
香港CN2 GIA 2核 2GB 40GB 0.5TB 2.5Gbps 香港|东京|
大阪|新加坡|
$89.99/月
$899.99/年
购买
香港CN2 GIA 4核 4GB 80GB 1TB 2.5Gbps 香港|东京|
大阪|新加坡|
$155.99/月
$1559.99/年
购买
东京TOKYO 2核 2GB 40GB 0.5TB 1.2Gbps 日本东京
CN2 GIA
$89.99/月
$899.99/年
购买
东京TOKYO 4核 4GB 80GB 1TB 1.2Gbps 日本东京
CN2 GIA
$155.99/月
$1559.99/年
购买

优惠提示: 在结算时,不要忘记使用本站提供的最新搬瓦工优惠码 BWHCGLUKKB,可享受高达6.78%的循环折扣!

【常驻小尾巴】
无论本文聊的是 VPS、脚本还是一杯拿铁,我们都为折腾留了一个出口——
👥 搬瓦工中文网QQ交流群:238290124
一句话简介:技术闲聊、优惠爆料、翻车互助、红包随机掉落。
我们在这里等你一起把不可能变成日常。