K8s
Alpine Linux 🌲 K8s 10 分钟速成
摘要
本指南将帮助您在 10 分钟内将全新的 Alpine Linux 安装部署到 Kubernetes K8 集群中。
为什么 ✨
我最近开始学习 Kubernetes,并在大约一个小时内使用 Alpine 构建了一个 k3 集群,这是一次很棒的体验。我认为下一步应该是 K8s,但我没有找到关于 Alpine 上 K8s 的任何资料。本指南是我第一次尝试的结果,并融入了贡献者的高质量笔记。Kubernetes 🦄 非常棒。
贡献者
- Matthew Rogers Github LinkedIn
- Mike Zolla Github LinkedIn
- Matthew Emmett Github LinkedIn
- Richard Aik Github LinkedIn
在 Alpine Linux 🌲 上构建 K8s
前提条件 🔍
您需要安装 Alpine Linux(本指南基于 3.17 标准镜像编写),并具备互联网访问。我建议每个节点至少配备 2 个 CPU、4GB 内存和 10GB 磁盘空间。
对于 HA 控制平面,您至少需要三个节点
1. 设置仓库 📗
更新您的 /etc/apk/repositories 下的仓库,以包含 community、edge community 和 testing。
/etc/apk/repositories 的内容/etc/apk/repositories
2. 节点设置 🖥️
这一系列命令解决了一系列递增的问题,并设置系统(如果是第一个控制节点),以便 kubectl/kubeadm 在下次登录时通过链接配置正确运行。
这里的结果为您提供了一个功能正常的节点,该节点可以加入现有集群,或者成为新集群的第一个控制平面。 🎶
添加用于网络连接的内核模块
# echo "br_netfilter" > /etc/modules-load.d/k8s.conf # modprobe br_netfilter # sysctl net.ipv4.ip_forward=1 # echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
内核配置
# echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf # sysctl net.bridge.bridge-nf-call-iptables=1
安装 Kubernetes 软件包
# apk add cni-plugin-flannel # apk add cni-plugins # apk add flannel # apk add flannel-contrib-cni # apk add kubelet # apk add kubeadm # apk add kubectl # apk add containerd # apk add uuidgen # apk add nfs-utils
移除 swap
# cp -av /etc/fstab /etc/fstab.bak # sed -i '/swap/s/^/#/' /etc/fstab # swapoff -a
修复 prometheus 错误
# mount --make-rshared /
- echo "#!/bin/sh" > /etc/local.d/sharemetrics.start
- echo "mount --make-rshared /" >> /etc/local.d/sharemetrics.start
- chmod +x /etc/local.d/sharemetrics.start
- rc-update add local
修复 id 错误消息
# uuidgen > /etc/machine-id
将 containerd sandbox_image 更新到最新版本(在 K8S v1.30 中为 pause:3.9)
# sed -i 's/pause:3.8/pause:3.9/' /etc/containerd/config.toml
在所有控制平面和工作节点上添加 Kubernetes 服务
# rc-update add containerd # rc-update add kubelet # rc-service containerd start
启用时间同步(如果使用默认 chrony,则在 3.20 中不需要)
# rc-update add ntpd # rc-service ntpd start
选项 1 - 使用 flannel 作为您的 CNI
注意:在较新版本的 flannel 软件包上,这可能不再必要
# ln -s /usr/libexec/cni/flannel-amd64 /usr/libexec/cni/flannel
选项 2 - 使用 calico 作为您的 CNI 注意:如果您使用 calico,则在 3.20 中这是必需的
# ln -s /opt/cni/bin/calico /usr/libexec/cni/calico # ln -s /opt/cni/bin/calico-ipam /usr/libexec/cni/calico-ipam
锁定您的版本!如果您更新并且节点失去同步,它会崩溃。
# apk add 'kubelet=~1.30' # apk add 'kubeadm=~1.30' # apk add 'kubectl=~1.30'
您的空白节点现在已准备就绪!如果是第一个节点,您需要创建一个控制节点。
3. 设置控制平面 (新集群!) 🦾
运行此命令以启动集群,然后应用网络。
#do not change subnet kubeadm init --pod-network-cidr=10.244.0.0/16 --node-name=$(hostname) mkdir ~/.kube ln -s /etc/kubernetes/admin.conf /root/.kube/config kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
您现在拥有一个控制平面。这也为您提供了在空白节点上运行的命令,以将它们作为工作节点添加到此集群中。
4. 加入集群。 🐜
运行此命令从控制平面获取加入命令,然后您将在新的工作节点上运行该命令。
kubeadm token create --print-join-command
奖励 💰
在 K8s 上设置 NFS 挂载
这可以是共享的 NFS 存储,以允许自动持久卷声明实现。您需要更新您的 IP 地址和导出信息。
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=192.168.1.31 \ --set nfs.path=/exports/cluster00
现在为集群设置默认存储类。
kubectl get storageclass kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
系统检查 👀
检查您的系统。
kubectl get nodes kubectl get all kubectl events -A
云端奖励 🌦️
云初始化版本的描述可在 K8s_with_cloud-init 中找到