✍️ 前置条件: 熟悉 dockerlinux

Wsl

🌟 了解 WSL

这是微软官网的介绍

⭐️ 首先介绍一下 WSl是什么东西:适用于 LinuxWindows 子系统 (WSL) 是 Windows 的一项功能,可用于在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验

  • 使用 WSL 安装和运行各种 Linux 发行版,例如 UbuntuDebianKali 等。 安装 Linux 发行版并从 Microsoft Store 接收自动更新、导入 Microsoft Store 中不可用的 Linux 发行版,或构建你自己的客户 Linux 发行版。
  • 将文件存储在独立的 Linux 文件系统中,具体取决于安装的发行版。
  • 运行命令行工具,例如 BASH
  • 运行常用的 BASH 命令行工具(例如 grepsedawk)或其他 ELF-64 二进制文件。
  • 运行 Bash 脚本和 GNU/Linux 命令行应用程序,包括:
  • 工具:vimemacstmux
  • 语言:NodeJSJavaScriptPythonRubyC/C++C#F#、Rust Go` 等。
  • 服务:SSHDMySQLApachelighttpdMongoDBPostgreSQL
  • 使用自己的 GNU/Linux 分发包管理器安装其他软件。
  • 使用类似于 Unix 的命令行 shell 调用 Windows 应用程序。
  • Windows 上调用 GNU/Linux 应用程序。
  • 运行直接集成到 Windows 桌面的 GNU/Linux 图形应用程序
  • 使用你的设备 GPU 加速 Linux 上运行的机器学习工作负载。

⭐️ Wsl2

  • 安装 Linux 发行版时,WSL 2 是默认发行版类型。 WSL 2 使用虚拟化技术在轻量级实用工具虚拟机 (VM) 中运行 Linux 内核。 Linux 发行版作为独立的容器在 WSL 2 托管 VM 内运行。 通过 WSL 2 运行的 Linux 发行版将共享同一网络命名空间、设备树(而非 /dev/pts)、CPU/内核/内存/交换空间、/init 二进制文件,但有自己的 PID 命名空间、装载命名空间、用户命名空间、Cgroup 命名空间和 init 进程。
  • WSL 2 提高了文件系统性能,并且与 WSL 1 体系结构相比增加了完整的系统调用兼容性。 详细了解 WSL 1 和 WSL 2 的比较。
  • 单个 Linux 分发版可以在 WSL 1 或 WSL 2 体系结构中运行。 每个分发版可随时升级或降级,并且你可以并行运行 WSL 1 和 WSL 2 分发版。 请参阅设置 WSL 版本命令。

⭐️ 我是这么粗略的理解的,它可以使用一个轻量级的虚拟机,在 windows本地运行 linux系统,不需要像 Vmwarehyper-v一样,它和 windows是融为一体的

🌟 配置 WSL和安装linux

⚠️ 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令

1️⃣ 首先就需要打开控制面板->程序->启动或关闭 windows功能中启动 linux子系统的功能,还需要打开虚拟机平台(不需要打开 Hyper-v),之后重启

image-20240508155447327

2️⃣重启后打开微软的 sotre,搜索你想要安装的 linux版本,然后点击下载就好了

image-20240508155617175

3️⃣ 安装之后先不要急,先打开 powershell,先下载 WSL

wsl --install //下载
wsl --update //以防止后面出错更新一下

4️⃣ 打开安装好的 linux子系统,按 win键搜索可以打开,在应用中也可以打开,在 windows新版终端内也可以打开

image-20240508160416955

image-20240508160450813

会让你设置用户名和密码,这里我就不贴图了,这样就可以成功进入系统了

image-20240508160609486

5️⃣ 注意,你可以在 mnt中访问 windows本机中的各种盘,这个一个非常棒的一个点

🌟 将子系统迁移

迁移会重置数据

⭐️ 默认是安装在 C盘的,我可不想我的 C盘爆炸,使用迁移来迁移这个子系统

1️⃣ 查看子系统

wsl -l -v

  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

2️⃣ 使用--export选项来导出(有点像 docker的导出镜像和导入镜像操作哦)

wsl --sutdown
wsl --export Ubuntu-22.04 G:\software\Ubuntu_22.04.tar

3️⃣ 然后要注销卸载掉之前的那个子系统

 wsl --unregister Ubuntu-22.04

4️⃣ 开始导入,第一个目录为设置它磁盘文件系统存储的目录(如果使用过 vmware就知道,一个文件系统磁盘就相当于虚拟机的一个磁盘),第二个才是子系统

 wsl --import Ubuntu G:\software\Ubuntu22_04 G:\software\Ubuntu_22.04.tar --version 2

5️⃣ 导入后就和之前一样操作,重新配置

🌟 Wsl基础命令

https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands

⭐️ 搭建好后可以自行探索,对自己的子系统进行配置

kind

⭐️ 为什么使用 wsl+kind来搭建 kubernetes平台呢?是我的突发奇想,在以前 kuberntes1.15版本的时候只能使用 kubeadm来搭建 kubernetes(可能有其他方法当时我并不知道),最近在翻新计划(翻新我的稚嫩笔记)的时候逛了逛 kubernetes官网,发现有 minikubekind这两个官方认可的工具来搭建 kubernetes了,我先是用 vmware搭建虚拟机试了一下 minikube,发现它是直接在本地(单主机)启动一个 VM(轻量级虚拟机)然后搭建 kubernetes,非常简单的就完成了,然我很是兴奋,但是使用的还是 VM,我感觉开销还是大,直到我在它的官网上看到了一篇 minikube替代 DockerDesktop的方法。


DockerDesktop我并没有用过很多次,在安装它的时候我就觉得很麻烦很占用资源(有段时间很想用 dockerDesktop),然后就放弃了继续用 vmware搭建虚拟机,但是我回头一想,由于我使用的是 vmware1.15版本并不支持 hyper-v共存,用 Docker需要 hyper-v,这种方法行不通,我就想到之前使用过 linux子系统,脑子一个想法就冒出来了,我都用 wsl了直接使用 kind,使用容器搭建 kubernetes(之前使用过 docker搭建 openstack考拉),于是就有了这篇博客

🌟安装docker

1️⃣首先需要安装 docker,选择的红帽系可以看这篇博客的安装 docker部分Kubernetes的安装 - 七点半的菜市场 (tanc.fun)

初始准备
  modprobe -- ip_vs
  modprobe -- ip_vs_rr
  modprobe -- ip_vs_wrr
  modprobe -- ip_vs_sh
swapoff -a
iptables -F 
iptables -X 
iptables -Z  
Ubuntu安装 docker

1️⃣ 配置 apt源,在 /etc/apt/sourcce.list

deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

2️⃣ 执行 apt update

apt update

3️⃣ 配置 docker

apt-get -y install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

4️⃣ 下载 docker对应版本使用 apt-cache madison docker-ce


 docker-ce | 5:26.1.1-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:26.1.0-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:26.0.2-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:26.0.1-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:26.0.0-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:25.0.5-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:25.0.4-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:25.0.3-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:25.0.2-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:25.0.1-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:25.0.0-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.9-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.8-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.7-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.6-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.5-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.4-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.3-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.2-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.1-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:24.0.0-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:23.0.6-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:23.0.5-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:23.0.4-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:23.0.3-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:23.0.2-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:23.0.1-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:23.0.0-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.24~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.23~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.22~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.21~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.20~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.19~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.18~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.17~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.16~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.15~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.14~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.13~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages

安装

apt install -y docker-ce=5:25.0.5-1~ubuntu.22.04~jammy

5️⃣ 测试

docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

🌟 安装 Go

1️⃣ 下载 go预编译 linux包,All releases - The Go Programming Language (google.cn) 上传到 linux内,使用 tar解压到你需要指定的目录(这里随意)

tar zxvf go1.21.10.linux-amd64.tar.gz  -C /usr/local/golang

2️⃣ 解压缩完成后配置 PATH

export GO=/usr/local/golang/go
export PATH=$PATH:$GO/bin

刷新一下

source /etc/profile

3️⃣ 测试是否安装成功

root@Tc-Server:~# go version
go version go1.21.10 linux/amd64

4️⃣由于后面需要使用到 go install,需要配置代理和配置 apt源一个道理,我这里配置的是七牛云的代理

go env -w GO111MODULE=on
go env -w  GOPROXY=https://goproxy.cn,direct

🌟安装kind

1️⃣ 下载 kind,下载完成后在你的下载目录下就会有一个 go目录,里面的 bin目录就有 kind命令

go install sigs.k8s.io/kind@v0.22.0

2️⃣ 给 kind配置 PATH

export KIND=/usr/local/golang/kind
export PATH=$PATH:$GO/bin:$KIND/bin

3️⃣ 配置好了之后就算是安装完成了

kind version

🌟安装 kubernetes

1️⃣ 首先需要配置配置文件,配置文件名字无所谓,它和 kubernetes的资源清单差不多,详情可以看:https://kind.sigs.k8s.io/docs/user/configuration/

root@Tc-Server:/opt/kind_config# cat kind_config.yaml
apiVersion: kind.x-k8s.io/v1alpha4 ##端口
kind: Cluster
name: clusterone ##配置集群名
networking: ##配置网络
  podSubnet: 10.10.0.0/24 ##容器ip段
  serviceSubnet: 10.20.0.0/24 ##Service ip段
  disableDefaultCNI: true ##关闭默认的CNI,后面可能装fannel或者Calico
nodes: ##配置集群主机
- role: control-plane ##一台controller
  image: kindest/node:v1.28.7@sha256:9bc6c451a289cf96ad0bbaf33d416901de6fd632415b076ab05f5fa7e4f65c58 ##配置镜像地址
  extraMounts: ##配置挂载
  - hostPath: /opt/masterOne
    containerPath: /file
    readOnly: false
  extraPortMappings: ##配置nodePort
  - containerPort: 22
    hostPort: 31022
    protocol: TCP
- role: worker ##配置worker节点
  image: kindest/node:v1.28.7@sha256:9bc6c451a289cf96ad0bbaf33d416901de6fd632415b076ab05f5fa7e4f65c58
  extraMounts:
  - hostPath: /opt/nodeOne
    containerPath: /file
    readOnly: false
  extraPortMappings:
  - containerPort: 22
    hostPort: 31023
    protocol: TCP

2️⃣ 启动集群

root@Tc-Server:/opt/kind_config# kind create cluster  --config kind_config.yaml
Creating cluster "clusterone" ...
 ✓ Ensuring node image (kindest/node:v1.28.7) 🖼
 ✓ Preparing nodes 📦 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing StorageClass 💾
 ✓ Joining worker nodes 🚜
Set kubectl context to "kind-clusterone"
You can now use your cluster with:

kubectl cluster-info --context kind-clusterone

Have a nice day! 👋

3️⃣ 安装好后在本地会有两个 docker容器代表集群

CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS                    PORTS                                              NAMES
bf3ec52b4cd1   kindest/node:v1.28.7   "/usr/local/bin/entr…"   2 hours ago    Up 2 hours                0.0.0.0:31022->22/tcp, 127.0.0.1:43481->6443/tcp   clusterone-control-plane
fb817ac6f110   kindest/node:v1.28.7   "/usr/local/bin/entr…"   2 hours ago    Up 2 hours                0.0.0.0:31023->22/tcp                              clusterone-worker

4️⃣ 但是由于关闭了初始化 kindcni(kind默认的是 kindnet),现在两个节点都是 NotReady,这时候就需要配置 Calico

NAME                       STATUS     ROLES           AGE     VERSION
clusterone-control-plane   NotReady   control-plane   4m10s   v1.28.7
clusterone-worker          NotReady   <none>          3m47s   v1.28.7

🌟安装 Calico

⭐️ 本来是打算安装 fannel的,因为这个我比较了解 Calico没接触过,但是 fannel部署在 worker节点的那个容器老报错,(修改了 pcird的)

⭐️这是官网https://docs.tigera.io/calico/latest/getting-started/kubernetes/kind

1️⃣ 配置 hosts,以防万一,解析不到 raw.github

185.199.108.133 raw.githubusercontent.com

2️⃣ 执行

root@Test:/opt/kind_config# kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/calico.yaml

3️⃣ 再次查看

NAME                       STATUS   ROLES           AGE    VERSION
clusterone-control-plane   Ready    control-plane   143m   v1.28.7
clusterone-worker          Ready    <none>          142m   v1.28.7

4️⃣ 编写资源清单,创建一个pod试一下

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: test
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80
      protocol: TCP

5️⃣ 运行

 kubectl apply -f nginx_test.yaml

//查看
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          134m