WSL2 Ubuntu+K8s+Docker开发环境部署

5,172 阅读4分钟

前言

WSL2虽然饱受各种非议,但的确比过往装VMware workstation使用虚拟机的感受好了很多,特别是很多公司大公司禁止安装虚拟机软件或者盗版软件,在操作系统中做了大量的限制。而Windows自带的wsl2成了非常好的选择,资源占用比虚拟机要低,不会有太多额外的后台资源占用。 随着分布式和微服务的发展,k8s环境逐渐成为基础架构和运维的标准,哪怕对于个人开发实验而言,熟悉k8s后,能够帮忙节省大量的维护和配置时间,是每个IT从业人员都应该学习的基础知识技能,可以帮助你更高效的开展工作。

WSL2安装

2022年了,Win10或者Win11升级到最新版本即可。 启用Windows 子系统功能,使用管理员权限打开一个 PowerShell 窗口,输入以下命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

还需要再启用虚拟机平台功能,在 PowerShell 中输入以下命令,重启系统:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重启后,在 PowerShell 中输入以下命令,将 WSL 默认版本改为 WSL2:

wsl --set-default-version 2

接下来在 Microsoft Store 中找一个 Ubuntu进行安装,建议安装20.04版本,使用者比较多,相关的依赖包容易找,相关问题在网上容易找到答案。之前笔者使用的Debian遇到各种奇怪的问题,解决起来非常花时间。 安装后在 PowerShell 中执行 wsl -l -v 可以看到当前的ubuntu版是否跑在 WSL2 中。

网络互通

WSL2 不和 Windows 共享一个 localhost,Windows 访问 WSL2 启动的网络服务,可以直接使用 localhost,但是 WSL2访问 Windows 启动的网络服务这种方式就不行了,可以使用在Ubuntu中输入以下命令查看Windows连接的IP:

ip route | grep default | awk '{print $3}'

文件系统互通

WSL2 访问 Windows 文件系统依然通过挂载分区的方式,Windows 下的磁盘会被挂载在 /mnt 下,例如 /mnt/c。 在 Ubuntu中,可以使用 explorer.exe . 可以直接打开Windows资源管理器访问当前路径的ubuntu目录,可以非常方便的跨系统处理文件。

Docker安装

Docker安装比较简单,直接在官方下载docker的desktop版本,其中已加入了对于WSL2的支持。 Docker Desktop for Mac and Windows | Docker 安装完后启动对WSL2的支持即可。 image.png

启动systemd支持

由于WSL2当前不支持systemd,所以systemctl命令无法使用,这会限制K8s的使用,目前有一些开源脚本可以替代。 首先安装git命令

sudo apt install git

然后运行脚本

git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
cd ubuntu-wsl2-systemd-script/
bash ubuntu-wsl2-systemd-script.sh

之后就可以使用systemctl了,不过目前看起来如果系统重启后,需要重新执行ubuntu-wsl2-systemd-script.sh,可以尝试加入启动项中。

安装K8s

虽然Docker desktop中有建K8s的选项,但启动很慢,不建议使用,Docker总想去侵占容器编排的活儿,所以建议还是自己在Ubuntu中安装。

sudo apt-get install -y apt-transport-https

需要以root用户执行

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

安装kubelet、kubeadm和kubectl

  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。
  • kubeadm:用来初始化集群的指令。
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

使用kind快速部署K8s

kind 即 Kubernetes In Docker,顾名思义,就是将 K8s 所需要的所有组件,全部部署在一个docker容器中,是一套开箱即用的 K8s 环境搭建方案。使用 kind 搭建的集群无法在生产中使用,但是如果你只是想在本地简单的玩玩 K8s,不想占用太多的资源,那么使用 kind 是你不错的选择。同样,kind 还可以很方便的帮你本地的 k8s 源代码打成对应的镜像,方便测试。 kind只是一个二进制的文件,直接下载下来就可以使用。

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /bin/

查看安装情况

kind version 

最简单的情况,我们使用一条命令就能创建出一个单节点的 K8s 环境

kind create cluster 

至此,整个环境部署就已经完成,后续会继续开发配置等相关的讲解,文章内容也会持续修正更新。