找回密码
 立即注册
首页 业界区 业界 博客园出海记-组装集装箱:自建 Kubernetes 集群 ...

博客园出海记-组装集装箱:自建 Kubernetes 集群

上官泰 2025-10-1 17:04:43
1.jpeg

在开篇中我们宣布了博客园出海计划的启航,出海航船选择了阿里云。
第一件准备工作是在航船上组装集装箱 —— 搭建 Kubernetes 集群。
出海根据地选在了阿里云新加坡机房,Kubernetes 集群用阿里云 ECS 自己搭建,没有使用阿里云容器服务 ACK。
首先购买一台 ECS 用于部署 Control Plane 节点,Control Plane 是指挥协调控制中心,不干具体活,所以不需要很高的配置,选择了2核4G的经济型 ECS 实例(ecs.e-c1m2.large),操作系统选用了 Ubuntu 24.04,加入新建的 kube 安全组(集群中的节点服务器都会加入这个安全组),主机名是 kube-cp-01。
准备工作

安装 k8s 三驾马车

安装 kubelet + kubeadm + kubectl,使用的版本是 1.33.4
安装所需的软件包
  1. apt-get update
  2. apt-get install -y apt-transport-https ca-certificates curl gnupg
复制代码
添加 k8e 安装源的签名秘钥
  1. curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  2. chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
复制代码
添加 k8e 安装源
  1. echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
  2. chmod 644 /etc/apt/sources.list.d/kubernetes.list
复制代码
apt-get 命令安装三驾马车
  1. apt-get update
  2. apt-get install -y kubelet kubectl kubeadm
复制代码
确认版本
  1. ~# kubelet --version
  2. Kubernetes v1.33.4
  3. ~# kubectl version
  4. Client Version: v1.33.4
  5. ~# kubeadm version -o short
  6. v1.33.4
复制代码
配置网络

开启 IPv4 包转发
  1. echo "net.ipv4.ip_forward = 1" | tee /etc/sysctl.d/k8s.conf
  2. sysctl --system
复制代码
安装容器运行时 containerd

采用手动安装方式,安装的 containerd 版本是 2.1.4
下载并解压至 /usr/local
  1. wget -c https://github.com/containerd/containerd/releases/download/v2.1.4/containerd-2.1.4-linux-amd64.tar.gz
  2. tar Cxzvf /usr/local containerd-2.1.4-linux-amd64.tar.gz
复制代码
通过 systemd 自动运行 containerd
  1. mkdir -p /usr/local/lib/systemd/system
  2. wget -c https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /usr/local/lib/systemd/system/containerd.service
  3. systemctl daemon-reload
  4. systemctl enable --now containerd
复制代码
安装 runc
  1. wget -c https://github.com/opencontainers/runc/releases/download/v1.3.1/runc.amd64
  2. install -m 755 runc.amd64 /usr/local/sbin/runc
复制代码
安装  CNI 插件
  1. wget -c https://github.com/containernetworking/plugins/releases/download/v1.8.0/cni-plugins-linux-amd64-v1.8.0.tgz
  2. mkdir -p /opt/cni/bin
  3. tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.8.0.tgz
复制代码
生成 containerd 配置
  1. mkdir /etc/containerd
  2. containerd config default > /etc/containerd/config.toml
复制代码
在 /etc/containerd/config.toml 中启用 SystemdCgroup
  1. [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc]
  2.   ...
  3.   [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]
  4.     SystemdCgroup = true
复制代码
重启 containerd 使配置生效
  1. systemctl restart containerd
复制代码
安装 containerd 命令行工具 nerdctl
  1. wget -c https://github.com/containerd/nerdctl/releases/download/v2.1.4/nerdctl-2.1.4-linux-amd64.tar.gz
  2. tar -zxf nerdctl-2.1.4-linux-amd64.tar.gz
  3. mv nerdctl /usr/bin/nerdctl
复制代码
将 nerdctl 的默认命名空间设置为 k8s.io
  1. mkdir /etc/nerdctl
  2. echo 'namespace = "k8s.io"' | tee /etc/nerdctl/nerdctl.toml
复制代码
创建高可用集群

在 /etc/hosts 中添加 control-plane-endpoint 的主机名解析
  1. 127.0.0.1  kube-api
复制代码
用 kubeadm 命令创建集群
  1. kubeadm init \
  2.     --control-plane-endpoint "kube-api:6443"  \
  3.     --upload-certs \
  4.     --pod-network-cidr=10.0.0.0/8 \
  5.     --skip-phases=addon/kube-proxy
复制代码
注:没有安装 kube-proxy 是因为会用 cilium 取代它
出现下面的输出说明集群创建成功了
  1. Your Kubernetes control-plane has initialized successfully!
  2. ...
复制代码
注:上面的输出内容中包含加入 control-plane 与 worker 节点的命令,后面会用到
用 nerdctl ps 命令查看容器运行情况
  1. root@kube-cp-01 ~ # nerdctl ps   
  2. CONTAINER ID    IMAGE                                              COMMAND                   CREATED               STATUS
  3. f54d0fc6215a    registry.k8s.io/kube-proxy:v1.33.4                 "/usr/local/bin/kube…"    About a minute ago    Up   
  4. 73cbd7ab3d69    registry.k8s.io/kube-scheduler:v1.33.4             "kube-scheduler --au…"    About a minute ago    Up
  5. 5ff05420d284    registry.k8s.io/kube-controller-manager:v1.33.4    "kube-controller-man…"    About a minute ago    Up
  6. 7031f91cfc16    registry.k8s.io/kube-apiserver:v1.33.4             "kube-apiserver --ad…"    About a minute ago    Up
  7. 2c79907098d4    registry.k8s.io/etcd:3.5.21-0                      "etcd --advertise-cl…"    About a minute ago    Up   
  8. 975b724b2814    registry.k8s.io/pause:3.10                         "/pause"                  About a minute ago    Up      
复制代码
添加 kubectl 用到的配置文件
  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码
查看节点运行情况
  1. root@kube-cp-01 ~ # kubectl get nodes
  2. NAME         STATUS   ROLES           AGE     VERSION
  3. kube-cp-01   Ready    control-plane   2m41s   v1.33.4
复制代码
注:这里 control-plane node 处于 Ready 状态,如果用了 kube-proxy,要等完成安装 CNI 网络插件才会处于 Ready 状态
查看 pod 运行情况
  1. root@kube-cp-01 ~ # kubectl get pods -n kube-system                                                                                                                                                                1 ↵
  2. NAME                                 READY   STATUS    RESTARTS   AGE
  3. coredns-674b8bbfcf-994fx             0/1     Pending   0          2m40s
  4. coredns-674b8bbfcf-bsgdd             0/1     Pending   0          2m40s
  5. etcd-kube-cp-01                      1/1     Running   0          2m46s
  6. kube-apiserver-kube-cp-01            1/1     Running   0          2m45s
  7. kube-controller-manager-kube-cp-01   1/1     Running   0          2m44s
  8. kube-proxy-vlvt9                     1/1     Running   0          2m40s
  9. kube-scheduler-kube-cp-01            1/1     Running   0          2m44s
复制代码
coredns 处于 Pending 状态是因为还没安装 CNI 网络插件
安装 CNI 网络插件

选用 cilium 作为 CNI(容器网络接口) 插件
安装 cilium cli
  1. wget -c https://github.com/cilium/cilium-cli/releases/download/v0.18.7/cilium-linux-amd64.tar.gz
  2. tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
复制代码
安装 cilium
[code]root@kube-cp-01 ~ # cilium install --version 1.18.1 \  --namespace kube-system \  --set bpf.masquerade=true \  --set kubeProxyReplacement=trueℹ️  Using Cilium version 1.18.1
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册