Minikube MacOS 安装搭建

要完成 minikube 环境的整体安装搭建,我们需要:

  1. docker
  2. hyperkit
  3. minikube
  4. kubectl

安装 docker

docker 有针对 mac 系统的安装包,只需要下载并安装即可,Get started with Docker Desktop for Mac ;

当然安装运行好后,需要查看一下运行状态是否良好,这个官方文档上也写的很明了;

安装 hyperkit

Mac 系统下支持 VirtualBox、 VMware Fusion、 Hyperkit 三种虚拟机管理程序,这里虚拟机的作用是为 kubenetes 提供基本环境,由于官方推荐了 Hyperkit,于是选择 Hyperkit 的驱动程序来进行安装:

1
2
3
4
5
$ brew install docker-machine-driver-hyperkit

# docker-machine-driver-hyperkit need root owner and uid
$ sudo chown root:wheel /usr/local/opt/docker-machine-driver-hyperkit/bin/docker-machine-driver-hyperkit
$ sudo chmod u+s /usr/local/opt/docker-machine-driver-hyperkit/bin/docker-machine-driver-hyperkit

安装 kubectl

使用 homebrew 直接安装即可:

1
$ brew install kubectl

安装 minikube

采用手动方式安装 minikube:

1
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && sudo install minikube-darwin-amd64 /usr/local/bin/minikube

以上执行完成后,就到了较为关键的部分,即使用 minikube start 开启并运行一个集群;

首先,如果直接运行 minikube start 会因为执行过程中,在下载相应依赖时报错;

原因是这些相关的下载项被 GFW 封阻,如果要做到正常下载访问,就需要使用http代理

具体操作命令如下:

1
2
3
$ minikube start --vm-driver=hyperkit \
--docker-env http_proxy=http://$YOURPROXY:PORT \
--docker-env https_proxy=https://$YOURPROXY:PORT

那么问题来了,如何才能拥有一个可访问的 http 代理服务呢?
考虑到有 shadowsocks,但是基于 socks 又不能直接使用,于是问题又变成如何将 socks 转为 http proxy 呢?
OK,找到了一个转换工具,喔嘈,这配置工作能不能简单点?MMP …

在经过一番挣扎之后,终于发现,原来 shadowsocks 客户端提供了 HTTP 代理功能,晕~

在这个客户端的 偏好设置 -> HTTP 里面可以直接配置HTTP代理监听地址及端口,爽~

这里需要注意的是,由于上述 minikube start 是在虚拟机上进行依赖项下载的,故在命令中的代理监听地址不能使用127.0.0.1,而应该是宿主机的IP地址,否则无论如何虚拟机上都无法访问到宿主机的代理服务的。

比方说,宿主机IP是:192.168.1.101,shadowsocks 上设置的 HTTP 代理监听端口设置为1087,那么 minikube start 的实际执行命令应该是:

1
2
3
$ minikube start --vm-driver=hyperkit \
--docker-env HTTP_PROXY=http://192.168.1.101:1087 \
--docker-env HTTPS_PROXY=http://192.168.1.101:1087

此外,在 shadowsocks 上设置 HTTP 代理的监听地址时,由于我们上述命令使用的是宿主机的 IP 地址,所以如果这里 HTTP 代理监听地址还是使用 127.0.0.1 这个默认的回环地址的话,上述命令的宿主机IP地址将无法访问到代理服务,于是需要将 shadowsocks 上的代理地址由 127.0.0.1 改为 0.0.0.0,这样代理服务就可以接收任何IP地址的请求了;

HTTP 代理设置完成并执行 minikube start 之后,OK,集群启动成功;

此时,配置 kubectl 使用 minikube 上下文,这样使得 bubectl 能够与 minikube 集群进行交互:

1
$ kubectl config use-context minikube

验证查看 bubectl 已配置的集群信息:

1
$ kubectl cluster-info

此时,可以使用 kubectl 与 k8s 集群交互,并启动一个服务:

1
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080

公开该服务为 NodePort:

1
$ kubectl expose deployment hello-minikube --type=NodePort

minikube 可以轻松的使用你的浏览器打开这个公开的端点(endpoint):

1
$ minikube service hello-minikube

开启第二个本地集群:

1
$ minikube start -p cluster2

停止你的本地集群:

1
$ minikube stop

删除你的本地集群:

1
$ minikube delete

重启系统后的问题

minikube 正常安装完了之后,以为一切归于平静,没想到系统重启后,又出了幺蛾子:

1
2
$ kubectl get node
The connection to the server xx.xx.xx.xx:8443 was refused - did you specify the right host or port?

关于这个问题,minikube 的 github issue 中有提及,但作者并没有很好的解决,最终给出的意见是建议使用 docker for mac 中提供的 K8S 功能;

感觉是绕了一圈,最终又回到了原点,人生有时就是如此之骚~

好吧,于是我放弃了minikube,转向 docker for mac 提供的 kubenetes 功能;

由于这其中下载安装仍然困难重重,这里提供一个安装方法,见:k8s-for-docker-desktop


参考: