✍️ 前置条件: 熟悉 docker
和 linux
Wsl
🌟 了解 WSL
这是微软官网的介绍
⭐️ 首先介绍一下 WSl
是什么东西:适用于 Linux
的 Windows
子系统 (WSL
) 是 Windows 的一项功能,可用于在 Windows
计算机上运行 Linux
环境,而无需单独的虚拟机或双引导。 WSL
旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验
- 使用
WSL
安装和运行各种Linux
发行版,例如Ubuntu
、Debian
、Kali
等。 安装Linux
发行版并从Microsoft
Store
接收自动更新、导入Microsoft
Store
中不可用的Linux
发行版,或构建你自己的客户Linux
发行版。 - 将文件存储在独立的
Linux
文件系统中,具体取决于安装的发行版。 - 运行命令行工具,例如
BASH
。 - 运行常用的
BASH
命令行工具(例如grep
、sed
、awk
)或其他ELF-64
二进制文件。 - 运行
Bash
脚本和GNU
/Linux
命令行应用程序,包括: - 工具:
vim
、emacs
、tmux
- 语言:
NodeJS
、JavaScript
、Python
、Ruby
、C/C++
、C#
和F#、
Rust、
Go` 等。 - 服务:
SSHD
、MySQL
、Apache
、lighttpd
、MongoDB
、PostgreSQL
。 - 使用自己的
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
系统,不需要像 Vmware
,hyper-v
一样,它和 windows
是融为一体的
🌟 配置 WSL
和安装linux
⚠️ 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令
1️⃣ 首先就需要打开控制面板->程序->启动或关闭 windows
功能中启动 linux
子系统的功能,还需要打开虚拟机平台(不需要打开 Hyper-v
),之后重启
2️⃣重启后打开微软的 sotre
,搜索你想要安装的 linux
版本,然后点击下载就好了
3️⃣ 安装之后先不要急,先打开 powershell
,先下载 WSL
wsl --install //下载
wsl --update //以防止后面出错更新一下
4️⃣ 打开安装好的 linux子系统
,按 win
键搜索可以打开,在应用中也可以打开,在 windows
新版终端内也可以打开
会让你设置用户名和密码,这里我就不贴图了,这样就可以成功进入系统了
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
官网,发现有 minikube
和 kind
这两个官方认可的工具来搭建 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️⃣ 但是由于关闭了初始化 kind
的 cni
(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