ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

K8s 运维系列 | 第 2 天:环境搭建——minikube 与 kubeadm 快速部署集群运维实战与AI漫画教程 | 恒星博客

K8s 运维系列 | 第 2 天:环境搭建——minikube 与 kubeadm 快速部署集群运维实战与AI漫画教程 | 恒星博客 在上一篇中我们建立了对 Kubernetes 整体架构的认知控制平面负责调度与状态协调节点上的 kubelet 与容器运行时负责真正跑容器。但「看懂架构」和「上手操作」之间还隔着一层最容易被新手卡住的东西——环境。很多人不是学不会 K8s而是连一套能跑的集群都搭不起来最后在安装报错中放弃了。这一篇我们就来解决这个问题用两种主流方式把 Kubernetes 环境搭起来。一种是轻量级的minikube适合本地学习与开发另一种是生产向的kubeadm适合搭建真实的、可扩展的集群。掌握这两条路径后续 28 天所有的实验都有落脚点。一、两种工具的核心定位1. minikube一键起一个单节点集群minikube 会在本机启动一个虚拟机或容器里面内置了一个单节点的 Kubernetes 集群。它把控制平面和节点「揉」在一起一条命令就能把整套环境跑起来非常适合第一次接触 K8s 的人理解概念、做实验。它的优势是极低的入门成本缺点是它本质上是单机模拟无法验证多节点调度、高可用等生产特性。2. kubeadm生产级集群的官方引导工具kubeadm 是 Kubernetes 官方提供的集群初始化工具负责完成kubeadm init初始化控制平面与kubeadm join加入工作节点两个核心动作。它不帮你管理节点生命周期只负责把各组件正确装配起来因此更适合用来搭建多节点、可长期运行的真实集群。两者的关系可以理解为minikube 是「练车场」kubeadm 是「正式上路」。二、环境准备容器运行时与系统配置无论用哪种方式底层都需要一个容器运行时。Kubernetes 从 1.24 起移除了对 Docker 作为默认运行时的依赖改用containerd作为标准运行时。在 Ubuntu 系统上先关闭 swap 并加载必要的内核模块# 关闭 swapKubernetes 要求sudoswapoff-asudosed-i/swap/d/etc/fstab# 加载内核模块sudomodprobe overlaysudomodprobe br_netfilter# 配置内核参数catEOF|sudotee/etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 net.bridge.bridge-nf-call-ip6tables 1 EOFsudosysctl--system接着安装 containerd 并生成默认配置sudoapt-getupdatesudoapt-getinstall-ycontainerd.iosudomkdir-p/etc/containerd containerd config default|sudotee/etc/containerd/config.toml/dev/nullsudosystemctl restart containerdsudosystemctlenablecontainerd三、方式一minikube 快速部署1. 安装 minikubecurl-LOhttps://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudoinstallminikube-linux-amd64 /usr/local/bin/minikube2. 启动集群minikube 支持多种驱动docker、kvm2、virtualbox 等。以最常用的 docker 驱动为例minikube start--driverdocker--cpus2--memory4096启动完成后验证集群状态minikube status kubectl get nodes正常情况下会看到一个名为minikube的节点处于Ready状态这就说明单节点集群已经就绪。3. 常用管理命令minikube dashboard# 打开 Web 控制台minikube stop# 停止集群保留数据minikube delete# 彻底删除集群minikubeservicemyapp# 暴露服务四、方式二kubeadm 部署多节点集群1. 安装 kubeadm、kubelet、kubectl三件套需要同时安装并锁定版本避免升级导致集群组件不匹配sudoapt-getupdatesudoapt-getinstall-yapt-transport-https ca-certificatescurlcurl-fsSLhttps://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key|sudogpg--dearmor-o/etc/apt/keyrings/kubernetes-apt-keyring.gpgechodeb [signed-by/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /|sudotee/etc/apt/sources.list.d/kubernetes.listsudoapt-getupdatesudoapt-getinstall-ykubelet kubeadm kubectlsudoapt-mark hold kubelet kubeadm kubectl2. 初始化控制平面节点在 master 节点执行kubeadm init指定 pod 网络网段sudokubeadm init --pod-network-cidr10.244.0.0/16 --kubernetes-versionv1.29.0初始化成功后终端会输出一串kubeadm join命令务必保存下来后续工作节点加入时要使用。为当前用户配置 kubectl 访问权限mkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config3. 部署 Pod 网络插件集群需要一个 CNI 网络插件才能让 Pod 之间互通以 Flannel 为例kubectl apply-fhttps://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml4. 加入工作节点在每台 worker 节点上执行初始化时保存的 join 命令形如下面这条token 与 IP 以实际输出为准sudokubeadmjoin192.168.1.100:6443--tokenabcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx回到 master 节点查看节点状态kubectl get nodes-owide当所有节点都显示Ready时多节点集群即搭建完成。五、常见问题与排查1. 节点一直是 NotReady多数情况是网络插件未生效用kubectl get pods -n kube-system查看 CNI 组件是否 Running。若 flannel 一直 CrashLoopBackOff检查/etc/containerd/config.toml中SystemdCgroup是否设为true与 kubelet 的 cgroup 驱动保持一致。2. kubeadm init 卡在等待控制平面通常是镜像拉取失败。可以提前用下面的命令预拉取镜像或配置国内镜像源sudokubeadm config images pull3. swap 未关闭导致 kubelet 启动失败Kubernetes 默认禁止在开启 swap 的节点上运行务必执行swapoff -a并持久化到/etc/fstab。六、总结这一篇我们走通了两条部署路径minikube一条命令起集群适合本地快速体验kubeadm完整装配控制平面与工作节点适合生产与多节点实验。环境就绪之后下一篇我们将正式进入 Kubernetes 最核心的对象体系——Pod、Label、Selector 与命名空间理解容器在集群中的真正「最小调度单元」。下期预告第 3 天《核心对象——Pod、Label、Selector 与命名空间》我们将拆解 Pod 的本质以及 Label 与 Selector 是如何让集群中的资源「对上暗号」的敬请期待。Making the absolute best of ourselves is not an easy task. It is a pleasurable pursuit…but it requires patience, persistence, and perseverance.做最好的自己并不容易这是很美好的愿望需要耐心、坚持和毅力
返回列表