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 -y1.2 禁用 Swap (推荐)
Kubernetes 的调度器在计算节点可用资源时,不希望考虑 Swap 空间。禁用它可以提高集群的稳定性和可预测性。
# 临时禁用
sudo swapoff -a
# 永久禁用:编辑 fstab 文件,注释掉 swap 分区行
# 使用 sed 命令快速注释掉所有包含 "swap" 的行
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab1.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=NodePort5.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 集群。