在现代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+。
- 权限: 拥有
sudo
或root
权限。 - 网络: 确保服务器可以访问外网,并且(如果是多节点集群)节点之间网络互通。
二、 第一阶段:准备节点环境 (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世界的apt
或yum
。
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/年 |
购买 |
- 更多搬瓦工套餐请访问:2025|搬瓦工VPS所有在售方案整理
- 搬瓦工注册教程参考:2025|搬瓦工最新购买教程附支付宝/银联/微信付款教程
- 搬瓦工最新优惠码:2025|搬瓦工VPS优惠码(长期更新)
优惠提示: 在结算时,不要忘记使用本站提供的最新搬瓦工优惠码 BWHCGLUKKB,可享受高达6.78%的循环折扣!