Kubernetes (K8s) 部署指南 (使用 k3s)
本指南将向您展示如何在 Debian 系统上安装 k3s,一个由 Rancher (现为 SUSE 的一部分) 开发的轻量级 Kubernetes 发行版。k3s 极大地简化了 Kubernetes 的安装和运维,是学习、开发、边缘计算和物联网场景的理想选择。
什么是 Kubernetes 和 k3s?
- Kubernetes (K8s): 是一个开源的容器编排平台,用于自动部署、扩展和管理容器化应用程序。它已成为容器化世界的标准。
- k3s: 是一个完全兼容、经过 CNCF 认证的 Kubernetes 发行版。它被打包成一个小于 100MB 的二进制文件,移除了很多非默认和旧有的功能,并用更轻量的组件替代。这使得它的资源占用极小(推荐内存仅需 512MB),启动速度极快。
步骤 1: 系统准备
在安装 k3s 之前,我们需要对 Debian 系统进行一些基础配置。
1.1 系统更新
确保您的系统是最新状态。
sudo apt-get update
sudo apt-get upgrade -y
1.2 禁用 Swap (推荐)
Kubernetes 的调度器在计算节点可用资源时,不希望考虑 Swap 空间。禁用它可以提高集群的稳定性和可预测性。
# 临时禁用
sudo swapoff -a
# 永久禁用:编辑 fstab 文件,注释掉 swap 分区行
# 使用 sed 命令快速注释掉所有包含 "swap" 的行
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
1.3 配置内核参数
为了让 Kubernetes 的网络正常工作,需要启用一些内核模块和网络设置。
# 加载必要的内核模块
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置 sysctl 参数,这些设置在重启后也会保持
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 应用所有 sysctl 配置
sudo sysctl --system
步骤 2: 安装 k3s
k3s 提供了一个非常方便的安装脚本,可以一键完成安装。
curl -sfL https://get.k3s.io | sh -
这个命令会下载最新的 k3s 安装脚本并执行。脚本会自动检测您的系统,并以最佳方式安装 k3s 服务。
安装完成后,k3s 服务 (k3s.service
) 会自动启动并设置为开机自启。
步骤 3: 验证集群状态
3.1 检查 k3s 服务
sudo systemctl status k3s
您应该能看到服务状态为 active (running)
。
3.2 使用 kubectl 检查节点
k3s 内置了 kubectl
命令。我们可以用它来检查集群的状态。
sudo k3s kubectl get node
如果一切正常,您会看到类似下面的输出,表示您的主节点 (master) 已经准备就绪 (Ready
)。
NAME STATUS ROLES AGE VERSION
my-node Ready control-plane,master 60s v1.28.x+k3s1
步骤 4: 配置 kubectl 访问
每次都输入 sudo k3s kubectl
很不方便。我们可以配置一个本地的 kubeconfig
文件,以便直接使用 kubectl
命令。
4.1 复制 Kubeconfig 文件
k3s 的配置文件位于 /etc/rancher/k3s/k3s.yaml
。
# 在您的用户主目录下创建 .kube 文件夹
mkdir -p $HOME/.kube
# 复制配置文件
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
# 将配置文件的所有权变更为您的当前用户
sudo chown $(id -u):$(id -g) $HOME/.kube/config
现在,您可以直接使用 kubectl
了!
kubectl get node
步骤 5: 部署一个示例应用
让我们部署一个简单的 Nginx 应用来测试集群是否正常工作。
5.1 创建 Deployment
kubectl create deployment nginx-test --image=nginx
这会创建一个 Deployment,Kubernetes 将在后台拉取 Nginx 镜像并启动一个 Pod。
5.2 查看 Pod 状态
kubectl get pods
等待片刻,直到 Pod 的状态变为 Running
。
5.3 暴露服务
默认情况下,Pod 只能在集群内部访问。我们需要创建一个 Service 来将它暴露出来。
# 使用 NodePort 类型暴露 Deployment
kubectl expose deployment nginx-test --port=80 --type=NodePort
5.4 查看服务并访问
kubectl get service nginx-test
您会看到类似这样的输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-test NodePort 10.43.172.115 <none> 80:31234/TCP 30s
这里的 31234
就是外部端口 (NodePort)。现在,您可以通过服务器的 IP 地址和这个端口号访问 Nginx 欢迎页面:http://<您的服务器IP>:31234
恭喜!您已经在 Debian 上成功部署并运行了一个完整的 Kubernetes 集群。