上官泰
2025-10-1 17:04:43
在开篇中我们宣布了博客园出海计划的启航,出海航船选择了阿里云。
第一件准备工作是在航船上组装集装箱 —— 搭建 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
安装所需的软件包- apt-get update
- apt-get install -y apt-transport-https ca-certificates curl gnupg
复制代码 添加 k8e 安装源的签名秘钥- curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
- chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
复制代码 添加 k8e 安装源- 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
- chmod 644 /etc/apt/sources.list.d/kubernetes.list
复制代码 apt-get 命令安装三驾马车- apt-get update
- apt-get install -y kubelet kubectl kubeadm
复制代码 确认版本- ~# kubelet --version
- Kubernetes v1.33.4
- ~# kubectl version
- Client Version: v1.33.4
- ~# kubeadm version -o short
- v1.33.4
复制代码 配置网络
开启 IPv4 包转发- echo "net.ipv4.ip_forward = 1" | tee /etc/sysctl.d/k8s.conf
- sysctl --system
复制代码 安装容器运行时 containerd
采用手动安装方式,安装的 containerd 版本是 2.1.4
下载并解压至 /usr/local- wget -c https://github.com/containerd/containerd/releases/download/v2.1.4/containerd-2.1.4-linux-amd64.tar.gz
- tar Cxzvf /usr/local containerd-2.1.4-linux-amd64.tar.gz
复制代码 通过 systemd 自动运行 containerd- mkdir -p /usr/local/lib/systemd/system
- wget -c https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /usr/local/lib/systemd/system/containerd.service
- systemctl daemon-reload
- systemctl enable --now containerd
复制代码 安装 runc- wget -c https://github.com/opencontainers/runc/releases/download/v1.3.1/runc.amd64
- install -m 755 runc.amd64 /usr/local/sbin/runc
复制代码 安装 CNI 插件- wget -c https://github.com/containernetworking/plugins/releases/download/v1.8.0/cni-plugins-linux-amd64-v1.8.0.tgz
- mkdir -p /opt/cni/bin
- tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.8.0.tgz
复制代码 生成 containerd 配置- mkdir /etc/containerd
- containerd config default > /etc/containerd/config.toml
复制代码 在 /etc/containerd/config.toml 中启用 SystemdCgroup- [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc]
- ...
- [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]
- SystemdCgroup = true
复制代码 重启 containerd 使配置生效- systemctl restart containerd
复制代码 安装 containerd 命令行工具 nerdctl- wget -c https://github.com/containerd/nerdctl/releases/download/v2.1.4/nerdctl-2.1.4-linux-amd64.tar.gz
- tar -zxf nerdctl-2.1.4-linux-amd64.tar.gz
- mv nerdctl /usr/bin/nerdctl
复制代码 将 nerdctl 的默认命名空间设置为 k8s.io- mkdir /etc/nerdctl
- echo 'namespace = "k8s.io"' | tee /etc/nerdctl/nerdctl.toml
复制代码 创建高可用集群
在 /etc/hosts 中添加 control-plane-endpoint 的主机名解析用 kubeadm 命令创建集群- kubeadm init \
- --control-plane-endpoint "kube-api:6443" \
- --upload-certs \
- --pod-network-cidr=10.0.0.0/8 \
- --skip-phases=addon/kube-proxy
复制代码 注:没有安装 kube-proxy 是因为会用 cilium 取代它
出现下面的输出说明集群创建成功了- Your Kubernetes control-plane has initialized successfully!
- ...
复制代码 注:上面的输出内容中包含加入 control-plane 与 worker 节点的命令,后面会用到
用 nerdctl ps 命令查看容器运行情况- root@kube-cp-01 ~ # nerdctl ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS
- f54d0fc6215a registry.k8s.io/kube-proxy:v1.33.4 "/usr/local/bin/kube…" About a minute ago Up
- 73cbd7ab3d69 registry.k8s.io/kube-scheduler:v1.33.4 "kube-scheduler --au…" About a minute ago Up
- 5ff05420d284 registry.k8s.io/kube-controller-manager:v1.33.4 "kube-controller-man…" About a minute ago Up
- 7031f91cfc16 registry.k8s.io/kube-apiserver:v1.33.4 "kube-apiserver --ad…" About a minute ago Up
- 2c79907098d4 registry.k8s.io/etcd:3.5.21-0 "etcd --advertise-cl…" About a minute ago Up
- 975b724b2814 registry.k8s.io/pause:3.10 "/pause" About a minute ago Up
复制代码 添加 kubectl 用到的配置文件- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码 查看节点运行情况- root@kube-cp-01 ~ # kubectl get nodes
- NAME STATUS ROLES AGE VERSION
- kube-cp-01 Ready control-plane 2m41s v1.33.4
复制代码 注:这里 control-plane node 处于 Ready 状态,如果用了 kube-proxy,要等完成安装 CNI 网络插件才会处于 Ready 状态
查看 pod 运行情况- root@kube-cp-01 ~ # kubectl get pods -n kube-system 1 ↵
- NAME READY STATUS RESTARTS AGE
- coredns-674b8bbfcf-994fx 0/1 Pending 0 2m40s
- coredns-674b8bbfcf-bsgdd 0/1 Pending 0 2m40s
- etcd-kube-cp-01 1/1 Running 0 2m46s
- kube-apiserver-kube-cp-01 1/1 Running 0 2m45s
- kube-controller-manager-kube-cp-01 1/1 Running 0 2m44s
- kube-proxy-vlvt9 1/1 Running 0 2m40s
- kube-scheduler-kube-cp-01 1/1 Running 0 2m44s
复制代码 coredns 处于 Pending 状态是因为还没安装 CNI 网络插件
安装 CNI 网络插件
选用 cilium 作为 CNI(容器网络接口) 插件
安装 cilium cli- wget -c https://github.com/cilium/cilium-cli/releases/download/v0.18.7/cilium-linux-amd64.tar.gz
- 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
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
相关推荐
|
|