在 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 上運行一個單節(jié)點的 K8s 集群。

在 Docker Desktop 的 Preferences 中的 Kubernetes 頁面里,提供了一個 Enable Kubernetes 選框,點擊之后即可在 Mac 上啟動 K8s。

然而點擊之后,就沒有然后了,一直是下圖這個狀態(tài):

starting

此問題的主要原因,是 K8s 運行所需的一些 k8s.gcr.io 下的鏡像,無法直接下載得到。

準備鏡像

配置鏡像服務

Preferences => Docker Engine 里,可以配置 registry-mirrors,國內(nèi)可用的一些鏡像服務有:

另外,中國科大還有 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 分支最新的內(nèi)容,直接執(zhí)行 load_images.sh 完成鏡像的下載及 tag 修改。

下載之后的鏡像包括如下 8 個,與 images.properties 中內(nèi)容一一對應:

$ 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 中對應版本信息:

安裝 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 中的 內(nèi)容 ,或直接從 這個 定期執(zhí)行的 GitHub Actions 記錄中找到對應版本執(zhí)行時的輸出信息,如 v1.19.3 記錄

根據(jù)所得到的對應版本鏡像信息,修改 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 相關的鏡像:

$ 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)了!

running

Tips: 如果還是 Starting 狀態(tài),可以嘗試將當前安裝的 Docker Desktop 環(huán)境都清理掉,全新安裝一個穩(wěn)定版本,可能就不會有奇怪的問題了。

另外,在沒開啟 Preferences => Kubernetes 中的 Show system containers (advanced) 選項時,docker ps 是看不到 K8s 相關的容器的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容