温馨提示×

Ubuntu k8s部署要注意什么

小樊
44
2026-10-28 11:57:02
栏目: 智能运维

在 Ubuntu 上部署 Kubernetes(k8s)时,无论是单节点测试还是生产集群,都有一些关键点和“坑”需要注意。下面按部署前 → 部署中 → 部署后 → 生产注意来梳理。


一、部署前准备(非常重要)

1. 系统版本与内核

  • Ubuntu 推荐版本
    • 22.04 LTS / 24.04 LTS(长期支持)
  • 内核要求
    • 建议 ≥ 5.x
    • 生产环境开启:
      uname -a
      
  • 禁用旧内核特性冲突(如 iptables 模式)

2. 关闭 Swap(必须)

Kubernetes 不支持 Swap

sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab

验证:

free -h

3. 禁用防火墙或正确放行端口

测试环境:

sudo ufw disable

生产环境需放行:

  • API Server: 6443
  • kubelet: 10250
  • NodePort: 30000-32767
  • etcd / flannel / calico 相关端口

4. 配置内核参数(网络相关)

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

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

sudo sysctl --system

5. 容器运行时选择

K8s 已弃用 Docker(1.24+) 推荐:

  • containerd(官方推荐)
  • 或 CRI-O

安装 containerd:

sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd

二、安装 Kubernetes 组件

1. 添加 apt 源

sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/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.29/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt update

2. 安装 kube 组件

sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

三、初始化集群(Master)

1. 初始化

sudo kubeadm init \
  --pod-network-cidr=10.244.0.0/16

使用 Flannel 时必须是 10.244.0.0/16


2. 配置 kubectl

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

3. 安装网络插件(必须)

否则节点永远 NotReady

Flannel:

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

Calico(生产推荐):

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

四、Node 加入集群

Master 初始化后会输出:

kubeadm join 192.168.x.x:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx

如果忘了:

kubeadm token create --print-join-command

五、常见坑总结

❌ 1. 节点 NotReady

原因:

  • 没装 CNI 插件
  • 网络不通
  • Swap 没关

❌ 2. Pod 无法联网

  • 检查 bridge-nf-call
  • 检查防火墙
  • 检查 CIDR 是否冲突

❌ 3. 时间不同步

sudo apt install -y chrony
sudo systemctl enable --now chrony

❌ 4. 磁盘空间不足

kubelet 默认会驱逐节点:

  • /var/lib/kubelet
  • /var/lib/containerd

六、生产环境额外注意

✅ 高可用:

  • 多 Master(keepalived + HAProxy)
  • etcd 外部或堆叠

✅ 安全:

  • 禁用匿名访问
  • 使用 RBAC
  • 限制 API Server 暴露

✅ 监控:

  • Prometheus + Grafana
  • Loki / EFK

✅ 备份:

  • etcd 快照
ETCDCTL_API=3 etcdctl snapshot save snap.db

七、快速检查清单

✅ Ubuntu LTS
✅ Swap off
✅ 防火墙正确
✅ containerd
✅ kubeadm/kubelet/kubectl
✅ CNI 插件
✅ 时间同步
✅ 内核参数

如果你愿意,我可以:

  • 给你一份 Ubuntu + kubeadm 一键部署脚本
  • 或 生产级 HA 架构图
  • 或 云服务器 / 虚拟机差异说明

你现在是 学习 / 测试 / 生产 哪种场景?

0 踩