wsl部署k8s

部署前奏

我司用的是K8s,虽然我也挺熟练换镜像查日志等基础操作,甚至修改容器代码也做过,不过还是在自己本地搭一个,玩一下,以备后续。

  • 检查cpu架构uname -m
  • 安装好docker
  • 安装好wsl2
  • 建议提前迁移wsl位置

部署流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 # 下载 KinD 二进制文件,请注意对应架构adm64?arm64?
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.8.1/kind-linux-amd64
# 标记为可执行文件
chmod +x ./kind
# 移动到 PATH 目录下去
mv ./kind /usr/local/bin/

# TODO,记得提前下载安装 kubectl 二进制文件(请注意开代理,不然几乎没法下载)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 总共三个工具,一起下载了
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubeadm"

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubelet"
# 移动并给与权限
sudo mv kubectl kubeadm kubelet /usr/local/bin/
sudo chmod +x /usr/local/bin/kubectl /usr/local/bin/kubeadm /usr/local/bin/kubelet

准备条件就绪,接下来:

1
2
3
4
5
6
7
8
 # 检查是否设置了 KUBECONFIG 环境变量
echo $KUBECONFIG
# 检查是否存在 .kube 目录,不需要手动创建
ls $HOME/.kube
# 使用 kind 命令创建一个名为 develop 的集群
kind create cluster --name develop
# 创建后检查 .kube 目录
ls $HOME/.kube

来,照着攻略玩一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 获取集群名字,删除集群
kind get clusters
kind delete cluster --name develop
# 停止集群,由于我们只有一个节点,那么直接docker stop即可。如果你有三个节点,那么一个一个都需要停止
docker stop develop-control-plane
#启动同理
docker start xxxxxx
# 那么继续创建三个节点的集群
# 创建一个3节点集群的配置文件
cat << EOF > kind-3nodes.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF
# 使用配置文件创建新的集群
kind create cluster --name wslkindmultinodes --config ./kind-3nodes.yaml

1
2
3
4
5
6
7
8
9
# 查看集群上下文
kubectl config get-contexts
# 查看当前上下文
kubectl config current-context
# 你可以合并多个kubectl配置,来管理多个上下文。然后使用命令来切换上下文
kubectl config use-context sit
# 合并配置文件
KUBECONFIG=~/.kube/config1:~/.kube/config2 kubectl config view --merge --flatten > ~/.kube/config

部署应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
apiVersion: apps/v1
kind: Deployment
metadata:
name: python-http-serv
spec:
selector:
matchLabels:
app: http
template:
metadata:
labels:
app: http
spec:
containers:
- name: http-container
image: python:3.9-alpine
command: [ "python3", "-mhttp.server", "8080" ]
ports:
- containerPort: 8080

---

apiVersion: v1
kind: Service
metadata:
name: python-http-serv
spec:
type: NodePort
selector:
app: http
ports:
- port: 80
targetPort: 8080
nodePort: 30080
1
2
3
4
5
6
7
8
9
10
$ docker pull python:3.9-alpine
$ kind load docker-image python:3.9-alpine -n test-1.27

$ kubectl apply -f deployment_python_http_svc_nodeport.yaml

$ kubectl get po

# 访问宿主机80端口(映射到控制平面节点的30080端口),可以看到一个HTML输出,其中包含Pod内容器的根目录下的文件列表
# 推荐使用浏览器访问
$ curl http://localhost/

参考文献

阳明的博客
我看的github学习资源


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!