前面三篇文章已经了解了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,可以使用命令查看:
在默认情况下,是minikube。也可以使用以下命令来切换:PS C:\WINDOWS\system32> kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE docker-desktop docker-desktop docker-desktop * minikube minikube minikube
kubectl config use-context docker-desktop
在图形界面上,也可以在上下文菜单中直接切换:
- Step6:检查当前集群情况:
如果使用的是minikube,首次运行时,需要先开启minikube,否则会报错。minikube开启方法为,以管理员身份运行PowerShell,输入: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
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里输入命令:
就会在默认浏览器里打开minikube的仪表盘,如下: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...
参考:
- https://github.com/AliyunContainerService/k8s-for-docker-desktop/tree/v1.19.7
- https://developer.aliyun.com/article/672675
Excellent post, thank you.