如何成功启动 Docker 自带的 Kubernetes?(2020年更新)

(2020年7月,基于 Docker Desktop 2.3.0.3 + kubernetes 1.16.5 全新修订)

大家好,相对之前的文档,因最新的 Docker Desktop 更新后,有些地方不再适用,现根据最新 stable 版本,重新撰写本文档。
毕竟我们使用 Google 的东西没那么容易,希望这篇技术笔记能帮大家节省一点点时间,知道坑在哪里,以便更好的玩转 Kubernetes。具体步骤的话,大概分以下几步:

  • 步骤1:安装 Docker Desktop
  • 步骤2:下载 Kubernetes 镜像并启动运行
  • 步骤3:下载 kubectl 工具
  • 步骤4:启用 Dashboard(可选)

步骤1:安装 Docker Desktop

从 Docker 官网导航菜单,可以找到 Docker Desktop 产品页面。
备注:懒人可以参见本文末尾附件,以进行快速下载。

在官网下载时,必须先拥有 Docker 账号。注册并登录 Docker 账号后,访问 Quick Start 向导页面 ,或者 Docker Hub 中找到社区版 Docker CE,并根据自己的操作系统选择对应的产品。

如何成功启动 Docker 自带的 Kubernetes?(2020年更新)_第1张图片
Docker Desttop for X

对于我这种新手来说,选择稳定版本即可:

  • Get Docker Desktop for Mac (Stable)
  • Get Docker Desktop for Windows (stable)

不同的版本内置的 kubernetes 版本不一样,请在安装完 Docker Desktop 后到关于对话框查看具体的版本号。

  • Docker Version 2.3.0.3 (45519) 》kubernetes 1.16.5
  • Docker Version 2.2.0.0 (42247) 》kubernetes 1.15.5
  • Docker Version 2.1.0.4 (39773) 》kubernetes 1.14.7
  • Docker 18.06.1-ce 》kubernetes 1.10.3
如何成功启动 Docker 自带的 Kubernetes?(2020年更新)_第2张图片
About Docker Desktop

步骤2:下载 Kubernetes 镜像并启动运行

根据目前我用的版本 Version 2.3.0.3 (45519) 集成 Kubernetes: v1.16.5。我要想把 Kubernetes 启动起来,需要先下载 Kubernetes 组件的镜像,然后再启用。

因为在阿里云上,有同步镜像的组件,我们就不需要翻到官网下载了。借鉴网上找到脚本 k8s-deploy,进行改良一下,加入了 Dashboard 组件进去。大家如果只使用 kubectl 来控制 Kubernetes 的话,可以自己将这部分去掉。对于新手来说,可能有个网页界面,看着舒服些。

另外,为了更顺畅的运行,可进入状态栏图标的下拉菜单项 “Preferences”,打开首选项对话框,选择“Resources > ADVANCED”,稍微调大一点运行资源:


如何成功启动 Docker 自带的 Kubernetes?(2020年更新)_第3张图片
Resources > ADVANCED 配置

再在 Docker Engine 的配置脚本中,添加国内的 Docker Hub、GCR、Quay 镜像加速器地址(比如七牛云、中科大、Azure 中国、网易云、阿里云、Docker-cn等),从而提升获取 Docker 官方镜像的速度。你可以配置一个或多个地址。

{
  "debug": true,
  "experimental": false,
  "registry-mirrors": [
    "https://reg-mirror.qiniu.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://dockerhub.azk8s.cn",
    "https://hub-mirror.c.163.com",
    "https://xxxxxxxx.mirror.aliyuncs.com",
    "https://registry.docker-cn.com"
  ]
}

备注:阿里云的镜像加速器地址,参见 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors ,然后将 xxxxxxxx 变更为你获取到的地址。

如何成功启动 Docker 自带的 Kubernetes?(2020年更新)_第4张图片
Docker Engine 配置

现在,创建一个拉取 Kubernetes 镜像的脚本文件。
macOS 平台:docker-images-k8s.sh

#!/bin/bash

set -e
KUBE_VERSION=v1.16.5
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.15-0
COREDNS_VERSION=1.6.2
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers

# get images
images=(kube-proxy:${KUBE_VERSION}
    kube-scheduler:${KUBE_VERSION}
    kube-controller-manager:${KUBE_VERSION}
    kube-apiserver:${KUBE_VERSION}
    pause:${KUBE_PAUSE_VERSION}
    etcd:${ETCD_VERSION}
    coredns:${COREDNS_VERSION})

for imageName in ${images[@]} ; do
    docker pull $ALIYUN_URL/$imageName
    docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
    docker rmi $ALIYUN_URL/$imageName
done

docker images

接下来,我们增加文件的执行权限,并运行一下这个脚本:

$ chmod +x docker-images-k8s.sh
$ ./docker-images-k8s.sh

看到最终的运行结果:

REPOSITORY                           TAG                                              IMAGE ID            CREATED             SIZE
docker/desktop-storage-provisioner   v1.1                                             e704287ce753        3 months ago        41.8MB
docker/desktop-vpnkit-controller     v1.0                                             79da37e5a3aa        4 months ago        36.6MB
docker/desktop-kubernetes            kubernetes-v1.16.5-cni-v0.7.5-critools-v1.15.0   a86647f0b376        5 months ago        279MB
k8s.gcr.io/kube-scheduler            v1.16.5                                          b4d073a9efda        6 months ago        83.5MB
k8s.gcr.io/kube-controller-manager   v1.16.5                                          441835dd2301        6 months ago        151MB
k8s.gcr.io/kube-apiserver            v1.16.5                                          fc838b21afbb        6 months ago        159MB
k8s.gcr.io/kube-proxy                v1.16.5                                          0ee1b8a3ebe0        6 months ago        82.7MB
docker/kube-compose-controller       v0.4.25-alpha1                                   129151cdf35f        8 months ago        35.6MB
docker/kube-compose-api-server       v0.4.25-alpha1                                   989749268895        8 months ago        50.7MB
docker/kube-compose-installer        v0.4.25-alpha1                                   2a71ac5a1359        8 months ago        42.3MB
k8s.gcr.io/etcd                      3.3.15-0                                         b2756210eeab        10 months ago       247MB
k8s.gcr.io/coredns                   1.6.2                                            bf261d157914        11 months ago       44.1MB
k8s.gcr.io/pause                     3.1                                              da86e6ba6ca1        2 years ago         742kB

这时候我们再打开首选项对话框,选择“Kubernetes”,勾选 Enable Kubernetes 并
Apply & Restart 一下,就可以看到 Kubernetes 已正常运行了。


如何成功启动 Docker 自带的 Kubernetes?(2020年更新)_第5张图片
Enable Kubernetes

另外,创建一个拉取网页控制台界面镜像的脚本文件。
macOS 平台:docker-images-dashboard.sh (可选)

#!/bin/bash

set -e
KUBE_DASHBOARD_VERSION=v2.0.3
METRICS_SCRAPER=v1.0.4
KUBENETESUI_URL=kubernetesui
ALIYUN_KUBENETESUI_URL=registry.cn-hangzhou.aliyuncs.com/kubernetes_ns

# get images (ui)
imagesui=(dashboard:${KUBE_DASHBOARD_VERSION}
    metrics-scraper:${METRICS_SCRAPER})

for imageName in ${imagesui[@]} ; do
    docker pull $ALIYUN_KUBENETESUI_URL/$imageName
    docker tag $ALIYUN_KUBENETESUI_URL/$imageName $KUBENETESUI_URL/$imageName
    docker rmi $ALIYUN_KUBENETESUI_URL/$imageName
done

docker images

同理,我们增加文件的执行权限,并运行一下这个脚本:

$ chmod +x docker-images-dashboard.sh
$ ./docker-images-dashboard.sh

看到最终的运行结果:

REPOSITORY                           TAG                                              IMAGE ID            CREATED             SIZE
kubernetesui/dashboard               v2.0.3                                           503bc4b7440b        3 weeks ago         225MB
kubernetesui/metrics-scraper         v1.0.4                                           86262685d9ab        3 months ago        36.9MB
...

注意:
针对老版本 Kubernetes 1.15.5 版本,请使用以下版本配置 docker-images-k8s-1.15.5.sh:

#!/bin/bash

set -e
KUBE_VERSION=v1.15.5
KUBE_DASHBOARD_VERSION=v1.10.1
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.10
COREDNS_VERSION=1.3.1
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers

# get images
images=(kube-proxy:${KUBE_VERSION}
    kube-scheduler:${KUBE_VERSION}
    kube-controller-manager:${KUBE_VERSION}
    kube-apiserver:${KUBE_VERSION}
    pause:${KUBE_PAUSE_VERSION}
    etcd:${ETCD_VERSION}
    coredns:${COREDNS_VERSION}
    kubernetes-dashboard-amd64:${KUBE_DASHBOARD_VERSION})

for imageName in ${images[@]} ; do
    docker pull $ALIYUN_URL/$imageName
    docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
    docker rmi $ALIYUN_URL/$imageName
done

docker images

针对老版本 Kubernetes 1.10.3 版本,请使用以下版本配置 docker-images-k8s-1.10.3.sh:

#!/bin/bash

set -e
KUBE_VERSION=v1.10.3
KUBE_DASHBOARD_VERSION=v1.10.1
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.1.12
DNS_VERSION=1.14.8
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers

images=(kube-proxy-amd64:${KUBE_VERSION}
    kube-scheduler-amd64:${KUBE_VERSION}
    kube-controller-manager-amd64:${KUBE_VERSION}
    kube-apiserver-amd64:${KUBE_VERSION}
    pause-amd64:${KUBE_PAUSE_VERSION}
    etcd-amd64:${ETCD_VERSION}
    k8s-dns-sidecar-amd64:${DNS_VERSION}
    k8s-dns-kube-dns-amd64:${DNS_VERSION}
    k8s-dns-dnsmasq-nanny-amd64:${DNS_VERSION}
    kubernetes-dashboard-amd64:${KUBE_DASHBOARD_VERSION}) 

for imageName in ${images[@]} ; do
    docker pull $ALIYUN_URL/$imageName
    docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
    docker rmi $ALIYUN_URL/$imageName
done

docker images

Windows 平台:docker-images-k8s.ps1
使用 PowerShell 来执行脚本。
首先创建一个镜像对应表文件 images.properties:

k8s.gcr.io/pause:3.1=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
k8s.gcr.io/kube-controller-manager:v1.16.5=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.16.5
k8s.gcr.io/kube-scheduler:v1.16.5=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.16.5
k8s.gcr.io/kube-proxy:v1.16.5=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.16.5
k8s.gcr.io/kube-apiserver:v1.16.5=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.16.5
k8s.gcr.io/etcd:3.3.15-0=registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.15-0
k8s.gcr.io/coredns:1.6.2=registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.2

另外,如果需要网页控制台界面可增加以下镜像(可选)

kubernetesui/dashboard:v2.0.3=registry.cn-hangzhou.aliyuncs.com/kubernetes_ns/dashboard:v2.0.3
kubernetesui/metrics-scraper:v1.0.4=registry.cn-hangzhou.aliyuncs.com/kubernetes_ns/metrics-scraper:v1.0.4

注意:
针对老版本 Kubernetes 1.15.5 版本,请使用以下版本配置 images.properties:

k8s.gcr.io/pause:3.1=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
k8s.gcr.io/kube-controller-manager:v1.15.5=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.5
k8s.gcr.io/kube-scheduler:v1.15.5=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.5
k8s.gcr.io/kube-proxy:v1.15.5=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.5
k8s.gcr.io/kube-apiserver:v1.15.5=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.5
k8s.gcr.io/etcd:3.3.10=registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1=registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1
k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1=registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1

然后在相同目录下,创建脚本 docker-images-k8s.ps1:

foreach($line in Get-Content .\images.properties) {
    $data = $line.Split('=')
    $key = $data[0];
    $value = $data[1];
    Write-Output "$key=$value"
    docker pull ${value}
    docker tag ${value} ${key}
    docker rmi ${value}
}

并执行脚本:

.\docker-images-k8s.ps1

备注:如果因为安全策略而无法执行 PowerShell 脚本,请在 “以管理员身份运行” 的 PowerShell 中执行 Set-ExecutionPolicy RemoteSigned 命令。

步骤3:下载 kubectl 工具

根据你电脑的操作系统,从 github 上直接下载指定平台版本的 kubectl。
macOS 平台:

  • kubernetes 1.16.5 下载地址:kubernetes-client-darwin-amd64.tar.gz**
  • kubernetes 1.15.5 下载地址:kubernetes-client-darwin-amd64.tar.gz
  • kubernetes 1.14.7 下载地址:kubernetes-client-darwin-amd64.tar.gz
  • kubernetes 1.10.3 下载地址: kubernetes-client-darwin-amd64.tar.gz

下载后解压 kubectl 到某个目录下。然后打开终端命令行,进入这个目录,执行以下脚本,将其变更为可执行命令,同时移动到系统特定目录下。

$ tar zxvf kubernetes-client-darwin-amd64.tar.gz
$ cd ./kubernetes/client/bin
$ chmod +x kubectl && mv kubectl /usr/local/bin/kubectl

Windows 平台:

  • kubernetes 1.16.5 下载地址:kubernetes-client-windows-amd64.tar.gz
  • kubernetes 1.15.5 下载地址:kubernetes-client-windows-amd64.tar.gz
  • kubernetes 1.14.7 下载地址:kubernetes-client-windows-amd64.tar.gz
  • kubernetes 1.10.3 下载地址: kubernetes-client-windows-amd64.tar.gz

下载后解压 kubectl.exe 文件到 C:\Windows\System32 目录下。

我们可以看下 kubectl 的版本号:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:26:26Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:18:29Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"}

步骤4:启用 Dashboard(可选)

需要注意的是,因为 Dashboard 的版本是单独演进的,参见 https://github.com/kubernetes/dashboard 。当前版本为 v2.0.3。

可以在 recommended.yaml 文件查看到使用的容器镜像版本。

...
image: kubernetesui/dashboard:v2.0.3
...
image: kubernetesui/metrics-scraper:v1.0.4
...

接下来,我们要想启动 Kubernetes Dashboard,还得在集群中部署一下 recommended.yaml。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

备注
如果执行此命令有问题,可从之前网页查看的 recommended.yaml 另存为本地来执行。

注意:历史稳定版本 v1.10.1
可以在 kubernetes-dashboard.yaml 文件查看到使用的容器镜像版本。

...
image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
...

接下来,我们要想启动 Kubernetes Dashboard,还得在集群中部署一下 kubernetes-dashboard.yaml。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created

部署成功后,启动 Kubernetes API Server 访问代理。

kubectl proxy
Starting to serve on 127.0.0.1:8001

这时候,打开浏览器,通过如下 URL 访问 Kubernetes Dashboard:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

注意:历史稳定版本 v1.10.1推荐使用:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=default

如何成功启动 Docker 自带的 Kubernetes?(2020年更新)_第6张图片
Kubernetes Dashboard 登录

通过以下脚本,配置访问控制台所需的令牌。
macOS 平台:

TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}')
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN

Windows 平台:

$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN

复制生成的令牌字符串,并在登录对话框中选择“令牌”方式登录后,粘贴到输入框中,登录即可。


如何成功启动 Docker 自带的 Kubernetes?(2020年更新)_第7张图片
Kubernetes Dashboard 首页

要想重新找到令牌字符串,可以查看 kubeconfig 文件。
macOS 平台:

$HOME/.kube/config

可以使用 “shift + command + .” 命令查看隐藏目录,并找到文件 ~/.kube/config 。

  • Windows 平台:
%UserProfile%\.kube\config

找到 kubeconfig 文档后,在文档末尾就可以发现刚生成的令牌。

    token: eyJh....UIUT-GFkv....WDtO-XesQ....5Kwh-ONGgbgAQFIVf0MdA

好的,那就介绍到这里。
如果在使用 Docker 中还是出现各种异常,可以考虑使用状态栏图标的下拉菜单项 “Troubleshoot”,打开故障排除对话框,以解决各种疑难杂症。


如何成功启动 Docker 自带的 Kubernetes?(2020年更新)_第8张图片
Troubleshoot

恭喜您,成功启动 Kubernetes 的学习之路了。

附件

对于文章中提到的安装文件或脚本,下载仍有困难的,也可以使用我百度网盘中的备份。

  • 链接: https://pan.baidu.com/s/1r4fVja9HairwIlscdnCSBw 密码: r996

参考文档

  • 阿里云容器服务 k8s-for-docker-desktop
  • cookcodeblog k8s-deploy

你可能感兴趣的:(如何成功启动 Docker 自带的 Kubernetes?(2020年更新))