在阿里云上搭建双节点 kubeadm 集群

在阿里云上搭建双节点 kubeadm 集群

本文章将带您在阿里云上搭建双节点 kubeadm 集群,此后假设您对容器技术及 Kubernetes(俗称 K8s)有基本的认知,例如完成 K8s 官网上的 Kubernetes Basics 教程或 edX 上的 LFS158x: Introduction to Kubernetes 课程。

此外,本教程假设您已经注册阿里云账号并开通 ECS 服务;当然,您可以尝试本地部署 kubeadm 集群或使用其他公有云,但具体程序可能因此有别,中途遇到的问题也可能不同;新手建议严格根据教程操作。

为何搭建 kubeadm 集群?

针对生产环境,很多公有云提供方便、快捷的托管 K8s 服务如阿里云的 ACK;针对 K8s 初学者及个人用户则有本地免配置快速部署的 Minikubekind。既然如此,为何要花时间与精力亲自部署 kubeadm 集群?

以下是您需要亲自部署 kubeadm 集群的一些可能的情况:

  • 您的业务需求需要透过高度定制的 K8s 集群实现,一般公有云托管 K8s 服务无法满足;
  • kubeadm 是一个厂商中立的工具,使用它搭建集群能避免供应商锁定;
  • 您在备考 云原生计算基金会 (CNCF)CKA 认证,搭建、维护 kubeadm 集群是每个 CKA 认证工程师必有的技能

实操环境

本教程采用 2 个阿里云 ECS 实例,规格 g7.large(2 vCPU、8G 内存),运行 Alibaba Cloud Linux 3.2104 LTS,使用 SSH 密钥登录 ecs-user 账号,采用 sudo 提权,其中 1 个实例 k8s-master0 将作为主节点、1 个实例 k8s-worker0 将成为工作节点。

为了方便着想,两个实例建议放在同一个 VPC 及安全组下,安全组只需对外开放 SSH (22/tcp) 端口。

配置主节点

事前配置

在主节点上安装 kubeadm 等 K8s 组件前先做一些配置,这样搭建集群时会更顺利一些,减少中途遇到的问题。

首先把 /opt/cni/bin/usr/local/sbin/usr/local/bin 三个路径加到当前用户的 PATH 中,一会儿组件的可执行文档将放到这些目录下:

echo "export PATH=\"/opt/cni/bin:/usr/local/sbin:/usr/local/bin:\$PATH\"" >> "$HOME/.bashrc" && \
    source "$HOME/.bashrc"

然后用 sudo visudo 命令编辑 sudoers 配置文档,把这一行:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

改为:

Defaults    secure_path = /opt/cni/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

接着把主节点 k8s-master0 的 VPC IP 地址导出到环境变量 K8S_CONTROL_PLANE 中,并把该 IP 地址与 k8s-control-plane 关联,把这个关联写到 /etc/hosts 中,其用处是使以后把控制平面升级为高可用架构铺路:

# 把 x.x.x.x 换成您 k8s-master0 主节点的 VPC IP 地址
export K8S_CONTROL_PLANE="x.x.x.x"
echo "$K8S_CONTROL_PLANE k8s-control-plane" | sudo tee -a /etc/hosts

接着安装 iproute-tc 软件包,解决 kubeadm 的一个警告:

sudo dnf install --refresh -y iproute-tc

然后加载 br_netfilter 内核模块并确保开机时自动加载,并启用 net.bridge.bridge-nf-call-iptablesnet.ipv4.ip_forward 两个内核参数,不然创建集群时会失败:

sudo modprobe br_netfilter
echo br_netfilter | sudo tee /etc/modules-load.d/kubernetes.conf
cat << EOF | sudo tee -a /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF
sudo sysctl -p

最后重启 k8s-master0 主节点:

sudo systemctl reboot

安装与启用 K8s 组件

我们将按顺序安装以下组件:

容器运行时 (CRI) K8s 版本 容器网络 (CNI)
containerd 1.7.1 1.26.5 Calico

容器运行时 (CRI) 是指 kubelet 创建容器时依赖的运行时,较常见的有 Docker(透过 cri-dockerd 兼容)、containerd、CRI-O,其中 containerd 的配置最为直接、简单,而 Docker 由于历史原因并不遵循 CRI 界面,所以自 K8s 上游 1.24 版本去掉 Dockershim 兼容层后需要额外安装配置 cri-dockerd 兼容层。

K8s 版本则使用 1.26.5,这个版本至今(2023-05-27)是 n - 1 小版本(n 指最新版本),不直接使用最新版本是为了以后方便实操演练 kubeadm 集群升级。

容器网络 (CNI) 则指 K8s 集群中 Pod 与 Pod 之间用以相互沟通的网络环境,需要至少实现以下的沟通渠道:

  • 容器间的沟通
  • Pod 间的沟通
  • Pod 与 Service 的沟通
  • 外部与 Service 的沟通

常见的 CNI 包括但不限于 Flannel、Calico,两者中 Flannel 相对简单,但 Calico 支持更多功能如网络策略。

以下教程取自于 K8s 官网的 Installing kubeadm [1] 教程及相关页面。

安装 containerd

安装 K8s 组件前需要做的第一件事是安装 CRI,这里我们采用 containerd [2]

首先参考 containerd GitHub 仓库的 Getting started 教程 [3] 安装 containerd、runc 及 CNI 插件。

这里采用 1.7.1 版本,把相关压缩包下载并解压到 /usr/local 下:

wget https://github.com/containerd/containerd/releases/download/v1.7.1/containerd-1.7.1-linux-amd64.tar.gz
sudo 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值