原文地址: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 Mac 從 Docker Community Edition 18.06.0-ce-mac70 2018-07-25 版本起丈攒,添加了對 Kubernetes 的支持,可以方便的在 Mac 上運行一個單節(jié)點的 K8s 集群啄糙。
在 Docker Desktop 的 Preferences
中的 Kubernetes
頁面里,提供了一個 Enable Kubernetes
選框代嗤,點擊之后即可在 Mac 上啟動 K8s菱农。
然而點擊之后,就沒有然后了鉴竭,一直是下圖這個狀態(tài):
此問題的主要原因歧譬,是 K8s 運行所需的一些 k8s.gcr.io
下的鏡像,無法直接下載得到搏存。
準(zhǔn)備鏡像
配置鏡像服務(wù)
在 Preferences
=> Docker Engine
里瑰步,可以配置 registry-mirrors
,國內(nèi)可用的一些鏡像服務(wù)有:
- 中國科大:https://docker.mirrors.ustc.edu.cn / https://ustc-edu-cn.mirror.aliyuncs.com
- 阿里云:https://<xxxxx>.mirror.aliyuncs.com璧眠,可使用阿里云賬號在 這里 獲得
- 網(wǎng)易云:https://hub-mirror.c.163.com
- DaoCloud:http://f1361db2.m.daocloud.io
可添加多個鏡像责静,如:
{
"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
應(yīng)用配置袁滥。
下載鏡像
在 阿里云容器服務(wù)的 GitHub 組織 下,有個 k8s-for-docker-desktop 倉庫即為解決此問題而存在灾螃。解決的方式為:先從阿里云下載所需的鏡像副本至本地题翻,再將鏡像 tag 修改至 k8s.gcr.io
下。
以如下軟件版本為例:
可使用 當(dāng)前 master 分支最新的內(nèi)容腰鬼,直接執(zhí)行 load_images.sh
完成鏡像的下載及 tag 修改嵌赠。
下載之后的鏡像包括如下 8 個靴拱,與 images.properties 中內(nèi)容一一對應(yīng):
$ 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
倉庫還沒有支持該版本時袜炕,可根據(jù) K8s 版本通過如下方式獲得 images.properties
中對應(yīng)版本信息:
安裝 K8s 對應(yīng)版本的 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 中的 內(nèi)容 初家,或直接從 這個 定期執(zhí)行的 GitHub Actions 記錄中找到對應(yīng)版本執(zhí)行時的輸出信息偎窘,如 v1.19.3 記錄。
根據(jù)所得到的對應(yīng)版本鏡像信息溜在,修改 images.properties
文件中內(nèi)容陌知,再執(zhí)行 load_images.sh
即可。
依舊 Starting 掖肋?
在完成鏡像下載并重啟 Docker Desktop 之后仆葡,K8s 依舊停留在 Starting 狀態(tài)。
通過
$ 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"
查看日志志笼,發(fā)現(xiàn)不斷輸出如下內(nèi)容:
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/
之后再重啟并觀察日志,上述問題不再出現(xiàn)纫溃,并且新下載了 3 個 desktop 相關(guān)的鏡像:
$ 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 狀態(tài)了!
Tips: 如果還是 Starting 狀態(tài)紊浩,可以嘗試將當(dāng)前安裝的 Docker Desktop 環(huán)境都清理掉窖铡,全新安裝一個穩(wěn)定版本,可能就不會有奇怪的問題了坊谁。
另外费彼,在沒開啟
Preferences
=>Kubernetes
中的Show system containers (advanced)
選項時,docker ps
是看不到 K8s 相關(guān)的容器的口芍。