Mac docker desktop 搭建 kubernetes 环境

学习 kubernetes (下文简称为 k8s)的前提是需要一个 k8s 运行环境。k8s 官网上推荐使用 minikube 开始 k8s 的学习之旅。由于自己的 mac 上已安装了 docker desktop(下文简称 desktop),且 desktop 集成了 kubernetes 功能,可以满足最快完成 k8s 学习环境搭建的需求。

安装/更新 docker desktop

如果没有安装 docker desktop,可以直接下载最新版本进行安装。如果已安装 docker,为了更新至最新版本,也可以使用下载最新版本安装的方式进行版本更新。下载地址:https://www.docker.com/products/docker-desktop
成功安装 desktop,可以在 About 菜单中看到其版本号:

为了更顺畅地运行 k8s,调整 desktop 的资源配置:

上图底部可以看到 kubernetes 已正常运行,这是由于作者已成功搭建好 k8s 环境,读者可参考资源配置的情况即可。

下载 k8s 镜像

为了运行 k8s ,desktop 需要下载 k8s 相关的镜像。如果通过直接在 desktop 运行 k8s ,会一直看到 k8s 在启动中的状态提示,无法成功运行 k8s。因此,可以通过先下载 k8s 镜像,再运行 k8s 的方式来将 k8s 运行起来。

为加速 docker 镜像的下载,配置国内 docker 镜像源:

即配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
{
"debug": true,
"experimental": false,
"registry-mirrors": [
"https://xxxxxxx.mirror.aliyuncs.com",
"https://reg-mirror.qiniu.com",
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
}

其中,阿里云镜像加速器地址,可以在阿里云容器镜像服务中申请得到,此处不再赘述。

参考 k8s 镜像的下载脚本(链接),编写 shell 脚本 docker-images-k8s.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

set -e
KUBE_VERSION=v1.18.8
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.3-0
COREDNS_VERSION=1.6.7
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

# show images
docker images

执行该脚本,即可以完成 k8s 镜像的下载。

运行 k8s

在 desktop 勾选 Enable Kubernetes,这时,就可以看到 k8s 可以正常运行起来了:

更新 kubectl

kubectl 可以用来操作 k8s。可以在 github 上下载指定版本的 kubectl,下载地址:

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#client-binaries

下载后,解压,然后将 kubectl 复制到 /usr/local/bin 目录:

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

完成上述操作后,执行 kubectl version,输出:

1
2
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:04:18Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}

安装 k8s dashboard

安装 k8s dashboard 是可选的,即使不安装,也可以使用 kubectl 命令来操作 k8s。
如果需要安装 k8s dashboard,需要下载相关的镜像,镜像下载脚本 docker-images-dashboard.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/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

# show images
docker images

同样地,执行 docker-images-dashboard.sh 脚本。

下载 recommended.yaml 到本地,然后执行:

1
kubectl apply -f recommended.yaml

https://github.com/kubernetes/dashboard/releases/tag/v1.10.1 下载 kubernetes-dashboard.yaml(目录:src/deploy/recommended/kubernetes-dashboard.yaml),然后执行:

1
kubectl apply -f kubernetes-dashboard.yaml

执行成功后,启动 K8s api server 访问代理:

1
kubectl proxy

为生成访问 dashboard 的 token,创建 token.sh 脚本:

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

执行:

1
2
chmod +x token.sh
./token.sh

打开 dashboard 地址 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login,复制上面生成的 token,登录成功后,可以看到页面:

就这样,docker desktop 的 k8s 环境就搭建好了。

参考资料