Ubuntu 22.04 WSL2 安装 K8s
Ubuntu 安装 K8s
前提
已安装 containerd 或 Docker(自带 containerd)。
本文已安装 Docker v28.5.1,自带 containerd v1.7.28。参考 ubuntu安装docker。
一、安装 Kubernetes
1.安装需要的包
更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
2.下载用于 Kubernetes 软件包仓库的公共签名密钥
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
3.添加 Kubernetes apt 仓库
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list
4.安装 kubelet、kubeadm 和 kubectl
更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
本文使用的版本是 v1.28.2 :
5.启用 kubelet 服务
sudo systemctl enable --now kubelet
kubelet 现在每隔几秒就会重启,在 CrashLoop 状态中等待 kubeadm 发布指令。CrashLoop 状态是正常现象,初始化控制平面后,kubelet 将正常运行。
二、初始化控制平面
1.配置 linux:禁用交换分区,启动 systemd,启用 cgroup v2
Ubuntu 22.04 WSL2 通过 .wslconfig 文件完成以上配置。在 Windows 目录 C:\Users<用户名> 下新建 .wslconfig 文件,添加配置:
[wsl2]
# 关闭交换分区
swap = 0
# 启用 cgroup v2
kernelCommandLine = cgroup_no_v1=all systemd.unified_cgroup_hierarchy=1
# 限制内存和 CPU
memory = 4GB
processors = 4
修改后,重启。
检查 systemd 是否启动。输出 systemd,说明 systemd 正在运行,输出 init 或其他内容,说明未正确启动:
ps -p 1 -o comm=
检查 cgroup v2 是否启用。对于 cgroup v2,输出为 cgroup2fs,对于 cgroup v1,输出为 tmpfs:
stat -fc %T /sys/fs/cgroup/
2.配置 containerd:配置 systemd cgroup 驱动,重载沙箱(pause)镜像
如果直接改 /etc/containerd/config.toml 可能不成功,因为这个文件不完整。首先重写原文件:
sudo containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
编辑 /etc/containerd/config.toml:
sudo vim /etc/containerd/config.toml
# 配置 systemd cgroup 驱动
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true # 改为true
# 重载沙箱(pause)镜像
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9" # 改为阿里云源
修改后,重启 containerd:
sudo systemctl daemon-reload
sudo systemctl restart containerd
3.初始化控制平面
sudo kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.28.2 \
--pod-network-cidr=10.244.0.0/16
第一次 init 没成功,再次尝试可能失败,这时可以用下面的命令将节点恢复到安装前的状态:
sudo kubeadm reset -f
看到以下输出,就说明初始化成功了:
按照命令行输出的提示,执行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.安装 Pod 网络插件
选择最简单、最常用的 Flannel 进行安装:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
安装完成后,查看节点状态:
kubectl get nodes
首次查看,STATUS 显示 NotReady ,等待几十秒后再次查看,应该变成 Ready:
三、配置 containerd 镜像加速
1.修复 crictl 报错
crictl 是用于 Kubernetes 节点上与 containerd 交互的命令行工具。可以用以下命令查看镜像:
sudo crictl images
首次使用遇到报错:Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory.
执行以下命令可修复:
sudo crictl config runtime-endpoint unix:///run/containerd/containerd.sock
2.添加镜像加速器地址
未添加镜像加速器地址时,尝试拉取 nginx 镜像会报超时。
编辑 containerd 配置文件:
sudo vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] #添加该行
endpoint = ["https://docker.1ms.run"] #添加该行
重启 containerd:
sudo systemctl daemon-reload
sudo systemctl restart containerd
再次尝试拉取 nginx 镜像,成功:
sudo crictl pull nginx

四、测试(启动 nginx)
使用 Kubernetes 启动 nginx:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
查看 pod 和 service:
kubectl get pod,svc

查看 nginx pod 信息,发现调度失败:
kubectl describe pod nginx-7854ff8877-9m66z #改为 kubectl get pod 命令查出的 nginx pod name

这是因为本文只配置了一台服务器,既作为控制平面节点,又作为工作节点,而 Kubernetes 默认会给控制平面节点添加一个污点(Taint),普通 Pod 不允许调度到这个节点上,除非配置了容忍(Toleration)。可以通过以下命令查看污点:
kubectl describe node <节点名> | grep Taint
通过以下命令移除污点:
kubectl taint nodes <节点名> node-role.kubernetes.io/control-plane:NoSchedule-
再查 nginx pod 信息,发现启动成功:
可以在浏览器中访问到 nginx 页面:
http://<自己的服务器IP>:<kubectl get svc 命令查出的 nginx 端口号>
删除 nginx 的命令:
kubectl delete deployment nginx
参考:
[1]:【最全】完整版Kubernetes(K8S)全套入门+微服务实战项目,带你一站式深入掌握K8S核心能力
[2]:Ubuntu安装K8S(1.28版本,基于containrd)
[3]:安装 kubeadm(k8s官方文档)
[4]:WSL 关闭swap
[5]:配置 cgroup 驱动(k8s官方文档)
[6]:failed to get sandbox image \\“registry.k8s.io/pause:3.6\\“: failed to pull image \\“registry.k8
[7]:容器运行时(k8s官方文档)
[8]:使用 kubeadm 创建集群(k8s官方文档)
[9]:GitHub - flannel-io/flannel
[10]:while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory 错误修复
[11]:Container 命令ctr、crictl 命令
[12]:ubuntu安装docker
更多推荐



所有评论(0)