利用kind在WIN10 WSL2 中搭建 K8s 环境

臭大佬 2023-09-04 21:48:17 2404
linux  Go 
简介 在 WIN10 WSL2 中搭建 K8s 环境

利用kindWIN10 WSL2 中搭建 K8s 环境

安装kubectl

Ubuntu上安装kubectl,您可以按照以下步骤进行操作:
打开终端,并使用以下命令下载kubectl的最新版本:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

接下来,将kubectl二进制文件移动到goPath目录下,并为其添加可执行权限:

sudo mv ./kubectl /www/wwwroot/go/goPath/bin/kubectl

验证kubectl是否正确安装。运行以下命令来检查kubectl的版本:

kubectl version --client

如果kubectl安装成功,您将看到与kubectl相关的版本信息。

kind安装

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /www/wwwroot/go/goPath/bin

如果遇到错误kind: command not found查看go是否安装可执行文件ls $GOPATH/bin

如果有kind,检查你的系统的 PATH 环境变量是否包含了 $GOPATH/bin目录。你可以在终端中执行以下命令来确认
echo $PATH不存在则执行export PATH=$PATH:$GOPATH/bin

再次执行kind,如果不生效,执行如下:

source ~/.bashrc

注意:当.bashrc配置错会导致基础命令无法使用,如执行lsCommand 'ls' is available in '/bin/ls',这时需要执行export PATH=/usr/bin:bin

创建集群

docker启动的情况下执行:

kind create cluster --name tsk8s

根据配置文件创建

kind create cluster --name tsk8s --config kind-ingress.yaml

kind-ingress.yaml 文件如下:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: ingress-test
nodes:
- role: control-plane
  image: kindest/node:v1.26.3@sha256:61b92f38dff6ccc29969e7aa154d34e38b89443af1a2c14e6cfbd2df6419c66f # 指定 Kubernetes 的版本
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80 #节点端口
    hostPort: 81  # 主机端口
    protocol: TCP
  - containerPort: 443 # 节点端口
    hostPort: 444 # 主机端口
    protocol: TCP
列出集群
kind get clusters

kind
tsk8s

切换群集
# 切换到群集`kind`
kubectl cluster-info --context kind-kind
# 切换到群集`tsk8s`
kubectl cluster-info --context kind-tsk8s
查看节点

默认只有一个

kubectl get nodes
删除群集
kind delete cluster --name tsk8s
将图像加载到集群中

本机镜像加载到 Kind 群集

kind load docker-image myimage:tag --name tsk8s
获取集群节点上存在的图像列表

先要知道节点名

 kubectl get nodes

NAME STATUS ROLES AGE VERSION
tsk8s-control-plane Ready control-plane 10d v1.26.3

docker exec -it my-node-name crictl images

其中my-node-name是Docker容器的名称(例如,kind-control-plane)

使用 Dashboard

我们除了可以用 kubectl 命令行来控制 K8s 外,我们还可以利用 Dashboard 图形界面来进行一些操作。

安装

下载配置文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
部署Dashboard
kubectl apply -f recommended.yaml
查看 Dashboard 的 pod
kubectl get pods -n kubernetes-dashboard

如果 STATUS 不是 Running,调整后执行

kubectl delete -f recommended.yaml
kubectl apply -f recommended.yaml
开启 Dashboard 连接
kubectl proxy

访问:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

创建用户

创建文件 user.yaml,内容如下

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

创建用户

kubectl apply -f user.yaml

获取登录的 token

kubectl -n kubernetes-dashboard create token admin-user

复制 token 并将其粘贴到登录屏幕

清理和后续步骤

删除管理员ServiceAccount和ClusterRoleBinding

kubectl -n kubernetes-dashboard delete serviceaccount admin-user
kubectl -n kubernetes-dashboard delete clusterrolebinding admin-user
问题一

当执行kubectl -n kubernetes-dashboard create token admin-usererror: failed to create token: serviceaccounts "admin-user" not found,先执行如下命令:

kubectl create sa admin-user -n kubernetes-dashboard

再次执行获取token

kubectl -n kubernetes-dashboard create token admin-user

部署 ingress

ingress 是 Kubernetes 的一种网络服务,它用于将外部流量引入到集群中的服务。它可以用于将 HTTP 和 HTTPS 流量从外部世界引入到集群中的服务,并对流量进行路由和负载均衡。

这里以 ingress-nginx 为例:

创建群集