前面三篇文章已经了解了Docker的基本用法,后面应该是要继续看Docker Swarm的,结果发现这个已经不流行了,流行的是Kubernetes,所以这篇文章开始就开始学习Kubernetes了。

遇到的问题


    电脑的操作系统是Windows 10,安装的是最新的Docker Desktop,这个里面本来就有单节点的Kubernetes,所以想着把环境搭建一下,默认情况下,Kubernetes是没有启动的。在设置里可以启动。

    目前Kubernetes的最新版本是v1.19.7,在设置里面Kubernetes项目里,可以开启,然而,并不顺利。

    勾选“Enable Kubernetes”之后,一直状态一直显示"Starting...",等待很久很久,最后就会失败,左下角第二个图标也是黄色或者红色,表示遇到错误。

解决办法


    “出师未捷身先死”,环境启动不起来,于是到网上找解决办法,这里记录一下。

    首先去 “C:\ProgramData\DockerDesktop”下面的service.txt查看是否有错误,然后根据错误信息去查找具体问题。我这边看是没有任何错误信息。有的人说是要删除这个目录下的“pki”文件夹能解决问题,我这里根本没有这个文件夹。

     下面说下我的解决步骤:

  • Step1:首先,将配置里的镜像地址,添加国内地址,这里添加中科大和docker中国镜像地址 "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com",设置完成之后,点击“Apply&Restart”
  • Step2:到 https://github.com/AliyunContainerService/k8s-for-docker-desktop 下载对应版本的脚本,我这里K8s的版本是v1.19.7,所以下载 https://github.com/AliyunContainerService/k8s-for-docker-desktop/tree/v1.19.7 到本地,并将其解压到D盘根目录,目录路径不能有空格。
  • Step3:以管理员身份打开本地PowerShell,然后输入“Set-ExecutionPolicy RemoteSigned” 解除需要数字签名的限制。
    PS C:\WINDOWS\system32> Set-ExecutionPolicy RemoteSigned
    
    执行策略更改
    执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
    中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
    [Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“N”): Y
  • Step4:将PowerShell,切换到之前下载的脚本目录,运行“load_images.ps1”:
    PS D:\k8s-for-docker-desktop-1.19.7> D:\k8s-for-docker-desktop-1.19.7\load_images.ps1
  • 以上脚本,如果一次运行不行,再运行一次。这个脚本,会将许多K8s有关的image下载到本地。如果运行成功,执行docker images会看到有如下镜像:
    PS D:\k8s-for-docker-desktop-1.19.7> docker images
    REPOSITORY                                                       TAG                                                     IMAGE ID       CREATED         SIZE
    docker/desktop-kubernetes                                        kubernetes-v1.19.7-cni-v0.8.5-critools-v1.17.0-debian   93b3398dbfde   2 months ago    285MB
    k8s.gcr.io/kube-proxy                                            v1.19.7                                                 9d368f4517bb   3 months ago    118MB
    k8s.gcr.io/kube-apiserver                                        v1.19.7                                                 c15e4f843f01   3 months ago    119MB
    k8s.gcr.io/kube-scheduler                                        v1.19.7                                                 4fa642720eea   3 months ago    45.6MB
    k8s.gcr.io/kube-controller-manager                               v1.19.7                                                 67b3bca112d1   3 months ago    111MB
    k8s.gcr.io/etcd                                                  3.4.13-0                                                0369cf4303ff   8 months ago    253MB
    k8s.gcr.io/coredns                                               1.7.0                                                   bfe3a36ebd25   10 months ago   45.2MB
    docker/desktop-storage-provisioner                               v1.1                                                    e704287ce753   13 months ago   41.8MB
    docker/desktop-vpnkit-controller                                 v1.0                                                    79da37e5a3aa   13 months ago   36.6MB
    k8s.gcr.io/pause                                                 3.2                                                     80d28bedfe5d   14 months ago   683kB
    quay.io/kubernetes-ingress-controller/nginx-ingress-controller   0.26.1                                                  29024c9c6e70   19 months ago   483MB
  • Step5:如果以上步骤完全正常,则重启Docker Desktop就可以看到K8s能够运行起来,绿色表示成功运行。
  • Step5:设置集群的Context, Kubernetes的context有docker-desktop和minikube,可以使用命令查看:
    PS C:\WINDOWS\system32> kubectl config get-contexts
    CURRENT   NAME             CLUSTER          AUTHINFO         NAMESPACE
              docker-desktop   docker-desktop   docker-desktop
    *         minikube         minikube         minikube
    在默认情况下,是minikube。也可以使用以下命令来切换:
    kubectl config use-context docker-desktop

    在图形界面上,也可以在上下文菜单中直接切换:

  • Step6:检查当前集群情况:
    PS C:\WINDOWS\system32> kubectl cluster-info
    Kubernetes master is running at https://192.168.6.47:8443
    KubeDNS is running at https://192.168.6.47:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    PS C:\WINDOWS\system32> kubectl get nodes
    NAME       STATUS   ROLES    AGE    VERSION
    minikube   Ready    master   248d   v1.18.3
    如果使用的是minikube,首次运行时,需要先开启minikube,否则会报错。minikube开启方法为,以管理员身份运行PowerShell,输入:
    PS C:\WINDOWS\system32> minikube start                                                                                  * Microsoft Windows 10 Pro 10.0.19042 Build 19042 上的 minikube v1.12.3                                                 * 根据现有的配置文件使用 hyperv 驱动程序
    * Starting control plane node minikube in cluster minikube
    * Restarting existing hyperv VM for "minikube" ...
    * 正在 Docker 19.03.12 中准备 Kubernetes v1.18.3…
    * Verifying Kubernetes components...
    * Enabled addons: dashboard, default-storageclass, storage-provisioner
    * 完成!kubectl 已经配置至 "minikube"
  • 打开minikube的Dashboard,可以在PowerShell里输入命令:
    PS C:\WINDOWS\system32> minikube dashboard
    * 正在验证 dashboard 运行情况 ...
    * Launching proxy ...
    * 正在验证 proxy 运行状况 ...
    * Opening http://127.0.0.1:57672/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
    就会在默认浏览器里打开minikube的仪表盘,如下:

 

参考: