单节点k8s安装部署文档
在 Ubuntu 中使用阿里源部署单节点 Kubernetes 集群
本教程是在 Ubuntu 操作系统中使用阿里云镜像源部署单节点 Kubernetes 集群。将使用 kubeadm 工具进行部署。
前提条件:
- 已安装 Docker (本教程省略 Docker 安装步骤)
 - Ubuntu 操作系统 (当前版本:
Linux shumo-ai 5.11.0-27-generic #29~20.04.1-Ubuntu SMP Wed Aug 11 15:58:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux) - 官方建议至少 2GB RAM 和 2 CPU 核心
 - 稳定的网络连接(当前教程为联网教程)
 - root 或具有 sudo 权限的用户
 
步骤 1: 更新系统并安装依赖
更新系统软件包列表:
1
sudo apt update
安装必要的依赖包:
1
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
步骤 2: 添加阿里云 Kubernetes 镜像源
添加阿里云 Kubernetes 镜像源:
1
2
3
4curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF更新软件包列表:
1
sudo apt update
步骤 3: 安装 kubeadm、kubelet 和 kubectl
安装 kubeadm、kubelet 和 kubectl:
1
sudo apt install -y kubelet kubeadm kubectl
设置 kubelet 开机自启:
1
sudo systemctl enable kubelet
步骤 4: 初始化 Kubernetes 控制平面
初始化 Kubernetes 控制平面:
1
sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers
如果遇到报错,可以添加参数
--v=5输出详细报错内容,根据报错内容进行排查。
此命令将输出类似以下内容:
1  | Your Kubernetes control-plane has initialized successfully!  | 
按照输出提示,执行以下命令配置 kubectl:
1
2
3mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
步骤 5: 安装 Pod 网络插件
安装 Calico 网络插件:
1
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
步骤 6: 移除 Master 节点污点
默认情况下,Kubernetes Master 节点会打上污点,防止普通 Pod 调度到该节点。对于单节点集群,我们需要移除该污点:
查看节点名称:
1
kubectl get nodes
移除污点:
1
kubectl taint nodes <node-name> node-role.kubernetes.io/master-
将
<node-name>替换为实际的节点名称。
步骤 7: 验证集群状态
查看节点状态:
1
kubectl get nodes
输出应显示节点状态为
Ready。查看 Pod 状态:
1
kubectl get pods --all-namespaces
输出应显示所有 Pod 状态为
Running或Completed。
如果没有问题,目前就已经安装好了
官方注意事项:
在许多教程中,并不推荐单节点部署,因此需要注意以下几点:
- 单节点不利于实际生产环境,生产环境建议使用多节点集群。
 - 单节点集群存在单点故障风险,建议在生产环境中使用高可用方案。
 - 您可以根据需要选择其他 Pod 网络插件,例如 Flannel、Weave Net 等。
 
参考文档:
- Kubernetes 官方文档: https://kubernetes.io/docs/home/
 - 阿里云 Kubernetes 镜像源: https://mirrors.aliyun.com/kubernetes/apt/
 - Calico 网络插件: https://docs.projectcalico.org/
 
补充注意事项
注意事项一:单独下载镜像或查看下载的镜像列表
在执行 sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers 时,如果网络较差,或者希望预先下载镜像,或者想了解具体下载了哪些镜像,可以按照以下步骤操作:
查看需要下载的镜像列表
使用以下命令可以查看kubeadm初始化时需要下载的镜像列表:1
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
输出示例:
1
2
3
4
5
6
7registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.0
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.0
registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.0
registry.aliyuncs.com/google_containers/kube-proxy:v1.28.0
registry.aliyuncs.com/google_containers/pause:3.9
registry.aliyuncs.com/google_containers/etcd:3.5.9-0
registry.aliyuncs.com/google_containers/coredns:v1.10.1手动下载镜像
如果网络较差,可以手动下载这些镜像。使用以下命令:1
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
该命令会拉取所有需要的镜像到本地。
验证镜像是否下载成功
使用以下命令查看已下载的镜像:1
crictl images
确保所有需要的镜像都已下载完成。
继续初始化集群
镜像下载完成后,可以继续执行初始化命令:1
sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers
注意事项二:加载自定义镜像的命令 ctr -n k8s.io images import
在 Kubernetes 中,容器运行时(如 containerd)负责管理镜像。如果您有自定义的镜像文件(通常是 .tar 格式),可以使用 ctr 命令将其加载到容器运行时中。
为什么使用
ctr -n k8s.io images import?ctr是 containerd 的命令行工具,用于管理容器和镜像。-n k8s.io指定了命名空间,Kubernetes 使用的 containerd 命名空间是k8s.io。images import是用于导入镜像的命令。
如何使用该命令
假设您有一个自定义镜像文件my-custom-image.tar,可以使用以下命令导入:1
sudo ctr -n k8s.io images import my-custom-image.tar
验证镜像是否导入成功
使用以下命令查看已导入的镜像:1
sudo ctr -n k8s.io images list
确保您的自定义镜像已成功加载。
在 Kubernetes 中使用自定义镜像
在 Pod 的 YAML 文件中,可以直接引用自定义镜像的名称和标签。
注意事项三:CRI 集成插件被禁止的情况及处理方法
CRI(Container Runtime Interface)是 Kubernetes 与容器运行时(如 containerd、CRI-O)之间的接口。CRI 集成插件(如 cri-tools)可能会在某些情况下被禁止,以下是可能的原因及处理方法:
CRI 集成插件被禁止的常见原因
- 容器运行时未正确配置:如果容器运行时(如 containerd)未正确配置或未启动,CRI 插件可能无法正常工作。
 - Kubernetes 版本与 CRI 版本不兼容:某些 Kubernetes 版本可能需要特定版本的 CRI 插件。
 - 安全策略限制:某些安全策略(如 SELinux、AppArmor)可能会限制 CRI 插件的运行。
 - 网络问题:如果节点无法访问所需的镜像仓库或网络配置错误,CRI 插件可能无法拉取镜像。
 
处理方法
检查容器运行时状态
确保容器运行时(如 containerd)已正确安装并运行:1
sudo systemctl status containerd
如果未运行,可以启动并设置开机自启:
1
sudo systemctl enable --now containerd
检查 Kubernetes 与 CRI 的兼容性
确保 Kubernetes 版本与 CRI 插件版本兼容。可以参考 Kubernetes 官方文档中的版本兼容性列表。检查安全策略
如果启用了 SELinux 或 AppArmor,确保它们未阻止 CRI 插件的运行。可以尝试临时禁用 SELinux:1
sudo setenforce 0
如果问题解决,可以调整安全策略以允许 CRI 插件运行。
检查网络配置
确保节点可以访问所需的镜像仓库。可以尝试手动拉取镜像:1
crictl pull <image-name>
如果网络有问题,检查节点的 DNS 配置和防火墙规则。
重新初始化集群
如果问题仍然存在,可以尝试清理集群并重新初始化:1
2sudo kubeadm reset
sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers
离线下载方案
基于以上教程与官网提供的下载安装包可以实现离线安装部署,注意镜像版本对应关系。






