温馨提示×

ubuntu部署k8s需要哪些步骤

小樊
38
2025-12-24 12:13:59
栏目: 智能运维

Ubuntu 部署 Kubernetes 的标准步骤

一 环境准备

  • 系统要求:64 位 Ubuntu、至少 2 核 CPU4GB 内存20GB 磁盘;各节点建议统一操作系统与内核版本,并配置静态 IP主机名(便于管理)。
  • 基础工具:更新索引并安装常用工具(如 apt-transport-https、curl、ca-certificates)。
  • 容器运行时:安装 Dockercontainerd(二选一,下文给出两种做法)。
  • 内核与网络:开启 br_netfilteroverlay 模块,开启桥接流量转发;禁用 Swap;确保 kubelet 开机自启。
  • 建议:节点间时间同步(如 chrony),并规划好用于 apiserver 的网卡与 Pod 网段(如 10.244.0.0/1610.10.0.0/16)。

二 安装容器运行时

  • 方案 A Docker(示例)
    • 安装:sudo apt update && sudo apt install -y docker.io
    • 启动与自启:sudo systemctl start docker && sudo systemctl enable docker
    • 建议将 Docker 的 cgroup 驱动设为 systemd(与 kubelet 一致):
      • /etc/docker/daemon.json { “exec-opts”: [“native.cgroupdriver=systemd”], “log-driver”: “json-file”, “log-opts”: { “max-size”: “100m” }, “storage-driver”: “overlay2” }
      • 使配置生效:sudo systemctl daemon-reload && sudo systemctl restart docker
  • 方案 B containerd(示例)
    • 安装:sudo apt install -y containerd.io
    • 生成默认配置并启用 SystemdCgroup:
      • sudo mkdir -p /etc/containerd
      • containerd config default | sudo tee /etc/containerd/config.toml
      • 在 /etc/containerd/config.toml 中将 SystemdCgroup = true
    • 启动与自启:sudo systemctl start containerd && sudo systemctl enable containerd
      说明:两种运行时均可与 kubeadm 配合使用,关键在于 cgroup 驱动与 kubelet 保持一致。

三 安装 kubeadm kubelet kubectl

  • 添加 Kubernetes APT 源(示例为国内镜像,提升可达性)
    • curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
    • echo “deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list
  • 安装指定版本(示例:1.23.3;可按需调整)
    • sudo apt update && sudo apt install -y kubeadm=1.23.3-00 kubelet=1.23.3-00 kubectl=1.23.3-00
    • 锁定版本:sudo apt-mark hold kubeadm kubelet kubectl
  • 启动 kubelet:sudo systemctl enable --now kubelet
    提示:若国内拉取镜像受限,可先通过镜像仓库拉取所需组件镜像并重新打 tag(见下文“镜像准备”)。

四 初始化控制平面与网络插件

  • 控制平面初始化(Master)
    • 预拉取镜像(可选,提升成功率):kubeadm config images list --kubernetes-version v1.23.3
    • 初始化命令(按需替换参数):
      • sudo kubeadm init \ –pod-network-cidr=10.244.0.0/16 \ –apiserver-advertise-address=YOUR_MASTER_IP \ –kubernetes-version=v1.23.3
    • 若初始化异常或中断,先执行:sudo kubeadm reset 再重试
  • 配置 kubectl(普通用户)
    • mkdir -p $HOME/.kube
    • sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装网络插件(二选一)
    • Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    • Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
  • 验证:kubectl get nodes 应显示 Ready 状态
    说明:Pod 网段需与所选网络插件默认网段匹配(如 Flannel 常用 10.244.0.0/16)。

五 加入工作节点与验证

  • 获取加入命令
    • 在 Master 查看:kubeadm token create --print-join-command
    • 或复制初始化完成时的输出:kubeadm join MASTER_IP:6443 --token TOKEN --discovery-token-ca-cert-hash sha256:HASH
  • 在工作节点执行上述 join 命令,完成后回到 Master:kubectl get nodes 应看到所有节点 Ready
  • 快速业务验证
    • 部署测试应用:kubectl create deployment nginx --image=nginx
    • 暴露服务:kubectl expose deployment nginx --port=80 --target-port=80 --type=ClusterIP
    • 查看服务:kubectl get svc nginx
  • 常见问题与排障
    • 镜像拉取失败:使用国内镜像源预先拉取并打 tag(见上文“镜像准备”)
    • cgroup 驱动不一致:确保 Docker/containerd 与 kubelet 均使用 systemd
    • 节点 NotReady:检查 Pod 网段与网络插件是否匹配、节点网络与防火墙策略是否放行 6443/10250 等端口
    • 忘记 join 命令:在 Master 重新生成(kubeadm token create --print-join-command)

0