1.关闭swap
swapoff -a
wsl这个命令没法关闭swap,需要用如下方法
#先cd到c盘,并创建.wslconfig文件
root@timer:/mnt/c/Users/xiaoqi# cat .wslconfig
[wsl2]
swap=0 # 关闭swap
[network]
generateResolvConf = false # 解决域名解析失败的问题
cmd进入命令行
wsl --shutdown 关闭所有的虚拟机
再bash进入 wsl,swap已关闭
2.service更换成systemd
Ubuntu默认是service启动服务,需要改成systemd方式
首先安装 Systemd 相关的依赖
apt install -yqq fontconfig daemonize
创建一个如下所示的脚本文件
# Create the starting script for SystemD
vi /etc/profile.d/00-wsl2-systemd.sh
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
if [ -z "$SYSTEMD_PID" ]; then
sudo /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
fi
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi
上面的脚本放置在 /etc/profile.d 目录下面,所以要让脚本生效,我们需要退出当前 session,重新进入即可,再次登录session,我们会发现系统PID为1的进程已经变成systemd。
这样就成功了
3.安装docker
apt-get install docker.io
如果需要配置为开机启动,可执行以下命令
systemcd enable docker
systemcd start docker
root@timer:~# docker --version
Docker version 20.10.14, build a224086
这样子的docker就成功了
注意:如果没有源,记得更换国内的源,然后运行下面的命令
apt-get update
apt-get upgrade
4.安装kubelet组件
使得 apt 支持 ssl 传输
apt-get update && apt-get install -y apt-transport-https
下载 gpg 密钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
添加 k8s 镜像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
更新源列表
apt-get update
安装 kubectl,kubeadm以及 kubelet
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
注意:这时候运行k8s 会运行不起来,如下状态说明已经安装成功了
5.使用kind安装k8s集群
下载kind二进制文件
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.8.1/kind-$(uname)-amd64
# 标记为可执行文件
chmod +x ./kind
# 移动到 PATH 目录下去
mv ./kind /usr/bin/
创建单节点集群
root@timer:~# kind create cluster --name wsl2-k8s
Creating cluster "wsl2-k8s" ...
✓ Ensuring node image (kindest/node:v1.18.2) ????
✓ Preparing nodes ????
✓ Writing configuration ????
✓ Starting control-plane ????️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️
✓ Installing CNI ????
✓ Installing StorageClass ????
Set kubectl context to "kind-wsl2-k8s"
You can now use your cluster with:
kubectl cluster-info --context kind-wsl2-k8s
Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community ????
root@timer:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29aa95a61d87 kindest/node:v1.18.2 "/usr/local/bin/entr…" 3 minutes ago Up 3 minutes 127.0.0.1:44671->6443/tcp wsl2-k8s-control-plane
root@timer:~# docker ps |grep "kindest\/node"|awk '{print $1}'
29aa95a61d87
root@timer:~# docker cp 29aa95a61d87:/kind/bin/kubectl /usr/bin/
root@timer:~# kubectl get node
NAME STATUS ROLES AGE VERSION
wsl2-k8s-control-plane Ready master 4m46s v1.18.2
kube-apiserver的6443端口暴露到docker宿主机的44671端口
进入到node节点的容器内
如上所示,一个单节点的kubernetes集群就创建好了,那如何创建多节点kubernetes集群呢
创建多节点kubernetes集群
删除现有集群
# 获取创建的集群名字
kind get clusters
# 删除集群
kind delete cluster --name wsl2-k8s
创建一个3节点集群的配置文件
root@timer:~# cat kind-3nodes.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
创建集群
root@timer:~# kind create cluster --name wsl2-3nodes --config ./kind-3nodes.yaml
Creating cluster "wsl2-3nodes" ...
✓ Ensuring node image (kindest/node:v1.18.2) ????
✓ Preparing nodes ???? ???? ????
✓ Writing configuration ????
✓ Starting control-plane ????️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️
✓ Installing CNI ????
✓ Installing StorageClass ????
✓ Joining worker nodes ????
Set kubectl context to "kind-wsl2-3nodes"
You can now use your cluster with:
kubectl cluster-info --context kind-wsl2-3nodes
Have a nice day! ????
root@timer:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
wsl2-3nodes-control-plane Ready master 93s v1.18.2
wsl2-3nodes-worker Ready <none> 51s v1.18.2
wsl2-3nodes-worker2 Ready <none> 51s v1.18.2
root@timer:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
67bcbe67747d kindest/node:v1.18.2 "/usr/local/bin/entr…" 2 minutes ago Up 2 minutes wsl2-3nodes-worker
b5d9f5a30a98 kindest/node:v1.18.2 "/usr/local/bin/entr…" 2 minutes ago Up 2 minutes wsl2-3nodes-worker2
74c504c4a04b kindest/node:v1.18.2 "/usr/local/bin/entr…" 2 minutes ago Up 2 minutes 127.0.0.1:39877->6443/tcp wsl2-3nodes-control-plane
以上。