在 Mac 的 Docker Desktop 中运行 K8s

原文地址:https://alphahinex.github.io/2020/11/08/run-k8s-in-mac-docker-desktop/


description: "想变成 running 并不容易"
date: 2020.11.08 10:34
categories:
- K8s
tags: [K8s, Docker Desktop]
keywords: Docker Desktop for Mac, K8s, starting, running, pki, mirror


Docker Desktop for MacDocker Community Edition 18.06.0-ce-mac70 2018-07-25 版本起,添加了对 Kubernetes 的支持,可以方便的在 Mac 上运行一个单节点的 K8s 集群。

在 Docker Desktop 的 Preferences 中的 Kubernetes 页面里,提供了一个 Enable Kubernetes 选框,点击之后即可在 Mac 上启动 K8s。

然而点击之后,就没有然后了,一直是下图这个状态:

starting

此问题的主要原因,是 K8s 运行所需的一些 k8s.gcr.io 下的镜像,无法直接下载得到。

准备镜像

配置镜像服务

Preferences => Docker Engine 里,可以配置 registry-mirrors,国内可用的一些镜像服务有:

另外,中国科大还有 GCRQuay 的镜像。

可添加多个镜像,如:

{
  "registry-mirrors": [
    "https://xxxxx.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "http://f1361db2.m.daocloud.io"
  ],
  "debug": true,
  "experimental": true
}

之后点击 Apply & Restart 应用配置。

下载镜像

阿里云容器服务的 GitHub 组织 下,有个 k8s-for-docker-desktop 仓库即为解决此问题而存在。解决的方式为:先从阿里云下载所需的镜像副本至本地,再将镜像 tag 修改至 k8s.gcr.io 下。

以如下软件版本为例:

versions

可使用 当前 master 分支最新的内容,直接执行 load_images.sh 完成镜像的下载及 tag 修改。

下载之后的镜像包括如下 8 个,与 images.properties 中内容一一对应:

$ docker images
REPOSITORY                                                       TAG                                              IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                                            v1.19.3                                          cdef7632a242        3 weeks ago         118MB
k8s.gcr.io/kube-apiserver                                        v1.19.3                                          a301be0cd44b        3 weeks ago         119MB
k8s.gcr.io/kube-controller-manager                               v1.19.3                                          9b60aca1d818        3 weeks ago         111MB
k8s.gcr.io/kube-scheduler                                        v1.19.3                                          aaefbfa906bd        3 weeks ago         45.7MB
k8s.gcr.io/etcd                                                  3.4.13-0                                         0369cf4303ff        2 months ago        253MB
k8s.gcr.io/coredns                                               1.7.0                                            bfe3a36ebd25        4 months ago        45.2MB
k8s.gcr.io/pause                                                 3.2                                              80d28bedfe5d        8 months ago        683kB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller   0.26.1                                           29024c9c6e70        13 months ago       483MB

其他版本?

如果使用的不是上图中的版本,且 k8s-for-docker-desktop 仓库还没有支持该版本时,可根据 K8s 版本通过如下方式获得 images.properties 中对应版本信息:

安装 K8s 对应版本的 kubeadm ,之后运行:

# 替换 ${KUBERNETES_VERSION} 为所使用的 K8s 版本
$ ./kubeadm config images list --kubernetes-version=${KUBERNETES_VERSION}

可得到类似如下信息:

k8s.gcr.io/kube-apiserver:v1.19.3
k8s.gcr.io/kube-controller-manager:v1.19.3
k8s.gcr.io/kube-scheduler:v1.19.3
k8s.gcr.io/kube-proxy:v1.19.3
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0

也可参照这个 entrypoint.sh 中的 内容 ,或直接从 这个 定期执行的 GitHub Actions 记录中找到对应版本执行时的输出信息,如 v1.19.3 记录

根据所得到的对应版本镜像信息,修改 images.properties 文件中内容,再执行 load_images.sh 即可。

依旧 Starting ?

在完成镜像下载并重启 Docker Desktop 之后,K8s 依旧停留在 Starting 状态。

通过

$ pred='process matches ".*(ocker|vpnkit).*"
  || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")'
/usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred"

查看日志,发现不断输出如下内容:

2020-11-07 01:01:48.307809+0800  localhost com.docker.driver.amd64-linux[2646]: cannot get lease for master node: an error on the server ("") has prevented the request from succeeding (get leases.coordination.k8s.io docker-desktop)
2020-11-07 01:01:48.308417+0800  localhost com.docker.backend[1833]: external: POST /events 200 "DockerDesktopGo" ""
2020-11-07 01:01:49.231052+0800  localhost com.docker.driver.amd64-linux[2646]: (libsystem_info.dylib) [com.apple.network.libinfo:getaddrinfo] nat64_v4_requires_synthesis(127.0.0.1) == false

按照 这里这里 提到的方式,删除掉 pki 文件夹:

$ rm -rf ~/Library/Group\ Containers/group.com.docker/pki/

之后再重启并观察日志,上述问题不再出现,并且新下载了 3 个 desktop 相关的镜像:

$ docker images | grep desktop
docker/desktop-kubernetes                                        kubernetes-v1.19.3-cni-v0.8.5-critools-v1.17.0   7f85afe431d8        3 weeks ago         285MB
docker/desktop-storage-provisioner                               v1.1                                             e704287ce753        7 months ago        41.8MB
docker/desktop-vpnkit-controller                                 v1.0                                             79da37e5a3aa        8 months ago        36.6MB

等待一会之后,终于变成 Running 状态了!

running

Tips: 如果还是 Starting 状态,可以尝试将当前安装的 Docker Desktop 环境都清理掉,全新安装一个稳定版本,可能就不会有奇怪的问题了。

另外,在没开启 Preferences => Kubernetes 中的 Show system containers (advanced) 选项时,docker ps 是看不到 K8s 相关的容器的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容