使用Kind在EC2 Ubuntu实例创建K8s集群时遇kubeadm初始化失败及Docker错误
解决Kind创建K8s 1.21集群时的kubeadm初始化失败及Docker问题
第一步:检查并修复Docker环境
Kubernetes 1.21对Docker版本有明确兼容要求,需使用Docker 20.10.x系列(兼容范围为19.03.13+至20.10.x),先确认当前版本:
docker --version
若版本不符合,卸载旧版本后安装指定版本:
# 卸载现有Docker组件 sudo apt-get purge docker-ce docker-ce-cli containerd.io # 安装依赖包 sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 配置Docker稳定源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装兼容K8s 1.21的Docker版本 sudo apt-get update && sudo apt-get install -y docker-ce=5:20.10.24~3-0~ubuntu-$(lsb_release -cs) docker-ce-cli=5:20.10.24~3-0~ubuntu-$(lsb_release -cs) containerd.io
接下来配置Docker的cgroup驱动为systemd(与Kubeadm默认驱动一致,避免初始化冲突):
sudo mkdir -p /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF # 重启Docker服务使配置生效 sudo systemctl daemon-reload sudo systemctl restart docker # 验证cgroup驱动配置 docker info | grep -i cgroup
输出需显示Cgroup Driver: systemd。
第二步:配置Docker用户权限
避免每次执行Docker/Kind命令都使用sudo:
sudo usermod -aG docker $USER # 无需重新登录,执行以下命令立即生效权限 newgrp docker
第三步:安装兼容K8s 1.21的Kind版本
Kind版本需与K8s版本匹配,针对K8s 1.21,推荐使用Kind v0.11.x系列(v0.12+版本对旧K8s版本支持有限):
# 下载Kind v0.11.1二进制文件 curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64 # 赋予执行权限 chmod +x ./kind # 移动到系统PATH目录 sudo mv ./kind /usr/local/bin/ # 验证Kind版本 kind --version
第四步:创建K8s 1.21集群
方式1:命令行直接创建
使用官方兼容的镜像创建集群,确保版本匹配:
kind create cluster --name my-cluster --image kindest/node:v1.21.14@sha256:8a4e9bb3f415d2bb81629ce33ef9c76ba514c14d707f9797a01e3216376ba093
方式2:使用Kind配置文件(自定义集群参数)
创建kind-config.yaml文件:
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane image: kindest/node:v1.21.14@sha256:8a4e9bb3f415d2bb81629ce33ef9c76ba514c14d707f9797a01e3216376ba093 kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: cgroup-driver: systemd
执行创建命令:
kind create cluster --name my-cluster --config kind-config.yaml
第五步:验证集群状态
创建完成后检查节点和组件状态:
# 获取集群节点信息 kubectl get nodes --context kind-my-cluster # 检查K8s核心组件状态 kubectl get componentstatuses
若仍出现kubeadm初始化错误,导出日志定位问题:
# 导出Kind集群日志到本地目录 kind export logs --name my-cluster ./kind-logs # 查看kubeadm初始化详细日志 cat ./kind-logs/control-plane/kubeadm-init.log
内容的提问来源于stack exchange,提问作者rishabh dixit
相关产品推荐
相关产品推荐

