不用 Docker Desktop 在 Windowns/WSL 下使用 Docker +Kubernetes : 二、Kubernetes安装

一、问题起因

工作环境是Windows,需要使用Docker + K8s,但现在Docker DeskTop收费的原因,无法再继续使用,只能另辟蹊径找解决方案。
起初我的想法是使用MiniKube + HyperV的方式 (minikube start --driver=hyperv),在win下利用k8s虚拟机也可以用。但安装一直各种报错,遂放弃。
然后试着在WSL安装Docker,然后MiniKube + Docker的方式 (minikube start --driver=docker),但还是一直各种报错。无奈,遂放弃。
我的做法,当最一筹莫展的时候 – 去官网搜搜!!!
然后在kubernetes的官网找到一种安装k8s的解决方案 – KIND1
其使用文档可参考kind官网的快速起步2
这里有一篇在windows下安装过的体验文章3,可供参考。
下面记录下我的安装过程。

二、环境及准备

1.环境:

  • Win10,需要支持虚拟化,可以执行“systeminfo”命令来确认
  • Docker,可参看我上篇文章《不用 Docker Desktop 在 Windowns/WSL 下使用 Docker》,基于WSL安装Docker

2.工具:

下载下列工具,然后加到系统环境变量PATH中

  • Kind,根据kind官网,跳到了github的项目发布页,所以直接从github上下载即可4
  • kubectl,到k8s官方查找下载地址5

三、开始安装

1.创建集群

PS > kind create cluster

创建成功会看到下面截图内容:
不用 Docker Desktop 在 Windowns/WSL 下使用 Docker +Kubernetes : 二、Kubernetes安装_第1张图片
建好后,默认的Context是“kind-kind”。验证下,成功会提示以下信息:

PS > kubectl cluster-info --context kind-kind

Kubernetes control plane is running at https://127.0.0.1:56044
CoreDNS is running at https://127.0.0.1:56044/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

PS > kubectl get ns
NAME                 STATUS   AGE
default              Active   36m
kube-node-lease      Active   36m
kube-public          Active   36m
kube-system          Active   36m
local-path-storage   Active   36m

通过配置文件创建集群
由于我首先是在WSL中搭建的Docker服务,然后基于WSL中的这个Docker创建的K8S Service集群,后面使用的时候会有一个问题,影响到以后通过Service暴露NodePort。针对这种情况,参考kind官网,通过指定一个config文件建立集群6!!!
在这个配置文件中写上需要暴露的端口,后面就可以直接使用这些端口了。配置文件如下:

# cluster-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30001
    hostPort: 30001
    protocol: TCP
  - containerPort: 32000
    hostPort: 32000
    protocol: TCP
  - containerPort: 32001
    hostPort: 32001
    protocol: TCP

可以一次多加几个端口,以防后面不够用了,由于目前配置文件不支持range语法,只能一个端口一个端口的写上去。写完配置文件,运行下面命令创建集群:

PS > kind create cluster --config=cluster-config.yaml

2.安装免登录的kubernetes-dashboard

参考dashboard官网介绍7,安装dashboard直接使用下面命令安装即可。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

但这种默认方式安装的dashboard,每次使用都需要登录。登录密码很长,也没法记。所以我参考网上文章,进行了免登录模式的安装。具体步骤如下。

1.下载修改并部署recommended.yaml

我使用的是v2.7.0版本的recommended.yaml,下载地址
在recommended.yaml找到下面三处,进行修改:

    1. name为kubernetes-dashboard的Service,添加上面cluster-config.yaml中暴露的端口,并添加http端口,下面是指定了32001、32000两个端口,修改为如下内容:
      不用 Docker Desktop 在 Windowns/WSL 下使用 Docker +Kubernetes : 二、Kubernetes安装_第2张图片
    1. name为kubernetes-dashboard的kubernetes-dashboard的Service,修改为如下内容:
      不用 Docker Desktop 在 Windowns/WSL 下使用 Docker +Kubernetes : 二、Kubernetes安装_第3张图片
    1. name为kubernetes-dashboard的deployment,在spec:template:spec:containers下的容器kubernetes-dashboard,修改内容为如下:
      不用 Docker Desktop 在 Windowns/WSL 下使用 Docker +Kubernetes : 二、Kubernetes安装_第4张图片
      修改完毕,保存文件,名为dashboard-deploy-nologin.yaml。然后运行下面命令部署dashboard
kubectl apply -f dashboard-deploy-nologin.yaml

2.创建账户并绑定cluster-admin角色

新建yaml文件,dashboard-admin-user.yaml,内容如下:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
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,应用该yaml文件

kubectl apply -f dashboard-admin-user.yaml

3.为新建的账户生成token

kubectl -n kubernetes-dashboard create token admin-user

4.清除ServiceAccount、ClusterRoleBinding (可选)

如果需要,或创建账户出错,可用下面命令删除掉后重新执行

kubectl -n kubernetes-dashboard delete serviceaccount admin-user
kubectl -n kubernetes-dashboard delete clusterrolebinding admin-user

5.验证

# 新建了一个命名空间kubernetes-dashboard
PS > kubectl get ns
NAME                   STATUS   AGE
default                Active   82m
kube-node-lease        Active   82m
kube-public            Active   82m
kube-system            Active   82m
kubernetes-dashboard   Active   5m29s
local-path-storage     Active   82m
# 在命名空间下新建了对应的pod
PS > kubectl get pod -n kubernetes-dashboard
NAME                                        READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-7bc864c59-zdpqb   1/1     Running   0          6m32s
kubernetes-dashboard-5fbd7b954d-pz97f       1/1     Running   0          6m32s

浏览器中打开http://localhost:32000/,过一会儿就出现了dashboard界面。
不用 Docker Desktop 在 Windowns/WSL 下使用 Docker +Kubernetes : 二、Kubernetes安装_第5张图片

四、卸载

如果不想用了可用下面命令卸载dashboard,并删除k8s集群

1.删除k8s集群

kind delete cluster

2.卸载dashboard

    1. 删除pod
kubectl -n kubernetes-dashboard delete $(kubectl -n kubernetes-dashboard get pod -o name | grep dashboard)
    1. 强制删除pod
kubectl delete pod kubernetes-dashboard-59f548c4c7-6b9nj -n kubernetes-dashboard --force --grace-period=0
    1. 卸载相关资源
kubectl delete deployment kubernetes-dashboard -n kubernetes-dashboard 
kubectl delete deployment dashboard-metrics-scraper -n kubernetes-dashboard
kubectl delete service kubernetes-dashboard -n kubernetes-dashboard 
kubectl delete service dashboard-metrics-scraper -n kubernetes-dashboard 
kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
kubectl delete secret kubernetes-dashboard-csrf -n kubernetes-dashboard
kubectl delete secret kubernetes-dashboard-key-holder -n kubernetes-dashboard
kubectl delete clusterrolebinding kubernetes-dashboard -n kubernetes-dashboard
kubectl delete rolebinding kubernetes-dashboard -n kubernetes-dashboard
kubectl delete clusterrole kubernetes-dashboard -n kubernetes-dashboard
kubectl delete role kubernetes-dashboard -n kubernetes-dashboard 
kubectl delete configmaps kubernetes-dashboard-settings -n kubernetes-dashboard
kubectl delete sa kubernetes-dashboard -n kubernetes-dashboard
kubectl delete namespace kubernetes-dashboard

参考文章


  1. https://kubernetes.io/zh-cn/docs/tasks/tools/ ↩︎

  2. https://kind.sigs.k8s.io/docs/user/quick-start/ ↩︎

  3. https://www.jianshu.com/p/f91dc3faff81 ↩︎

  4. https://github.com/kubernetes-sigs/kind/releases ↩︎

  5. https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-windows/ ↩︎

  6. https://kind.sigs.k8s.io/docs/user/using-wsl2/#accessing-a-kubernetes-service-running-in-wsl2 ↩︎

  7. https://github.com/kubernetes/dashboard/ ↩︎

你可能感兴趣的:(Cloud,docker,kubernetes,windows,云原生,容器)