让Minikube和Docker for Mac(Edge)共存

环境

MacBook Pro 2014年中期
macOS High Sierra操作系统
Homebrew 1.6.1软件库

本地运行 Kubernetes

最初作为开发环境,我在 Docker for Mac 上使用 docker-compose。但是因为想要尝试一下 Kubernetes,所以我进行了一些配置,并做了以下备忘录。

前提

说到本地用Kubernetes,可能会有两个选择

    1. Minikube

 

    1. 迷你立方

Docker for Mac (Edge)
Mac版本的Docker(Edge版)

因为不知道哪个更好,所以试着同时安装两个。
在后面会提到,最好先安装Minikube。

自酿

本文章将介绍使用Homebrew进行安装。
当然,也可以使用二进制文件进行安装。
Homebrew的安装可以通过官方网站完成。

Minikube 小空间

由于需要超级管理程序,因此还需要一同安装VirtualBox。

$ brew cask install virtualbox
$ brew cask install minikube

在Homebrew中安装minikube时,会同时安装一个名为kubernetes-cli的公式(formula)。这个公式中似乎也包含了kubectl,所以无需单独安装kubectl。

$ which kubectl

/usr/local/bin/kubectl

启动 minikube 并进行确认。

$ minikube start
$ minikube status

确认 kubectl 的连接目标是否为 minikube。

$ kubectl config get-contexts

CURRENT   NAME                 CLUSTER                      AUTHINFO             NAMESPACE
*         minikube             minikube                     minikube      

为了访问仪表盘,获取服务列表。

$ kubectl get svc --all-namespaces

NAMESPACE     NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
default       kubernetes             ClusterIP   10.96.0.1       <none>        443/TCP         1m
kube-system   kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP   1m
kube-system   kubernetes-dashboard   NodePort    10.109.106.12   <none>        80:30000/TCP    1m

因为没有设置外部IP,所以无法访问…(※可以使用代理)
但实际上还有另一种方法。

$ minikube service list

|-------------|----------------------|-----------------------------|
|  NAMESPACE  |         NAME         |             URL             |
|-------------|----------------------|-----------------------------|
| default     | kubernetes           | No node port                |
| kube-system | kube-dns             | No node port                |
| kube-system | kubernetes-dashboard | http://192.168.99.100:30000 |
|-------------|----------------------|-----------------------------|

用这个可以查看仪表板(默认为日语,让我感到惊讶)。

当你想停止 minikube 时,

$ minikube stop

Docker适用于Mac(Edge版)。

使用Stable版本的人应该先卸载它,为了方便起见,可以使用Homebrew来安装。

$ brew tap caskroom/versions
$ brew cask install docker-edge

一旦 Docker 启动后,激活 Kubernetes(需要几分钟时间)。
本来这里应该安装 kubectl,但是在之前的 Minikube 安装中已经安装了,担心会产生冲突。
但是并没有出现特别的错误,所以似乎不需要删除 kubectl。

2018-04-17 18.41.30.png

更改上下文并确认
注意不是使用set-context(犯了个错误)

$ kubectl config use-context docker-for-desktop

Switched to context "docker-for-desktop".
$ kubectl config get-contexts

CURRENT   NAME                 CLUSTER                      AUTHINFO             NAMESPACE
*         docker-for-desktop   docker-for-desktop-cluster   docker-for-desktop   
          minikube             minikube                     minikube  

由于默认没有安装仪表板,所以尝试部署它
仅仅按照官方步骤操作

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

secret "kubernetes-dashboard-certs" created
serviceaccount "kubernetes-dashboard" created
role "kubernetes-dashboard-minimal" created
rolebinding "kubernetes-dashboard-minimal" created
deployment "kubernetes-dashboard" created
service "kubernetes-dashboard" created

启动 Kubernetes 代理服务器

$ kubectl proxy

访问下述网址: http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

2018-04-17 19.31.46.png

这是什么鬼…刚刚还没有呢…
总之,可以跳过吗?

如果使用代理,那么 minikube 应该也会变得类似,但是 minikube 是自动为我们设置了端口转发吗?请详细说明一下(请详细解释)

请注意

kubectl 的冲突

如果在 Docker for Mac 上启用了 Kubernetes,那么在安装 minikube 时会出现错误(安装本身是成功的)。另外,当将 Kubernetes 禁用后,kubectl 会丢失。

是不是因为 kubectl 是来自 Docker for Mac 的呢?

使用GKE的用户可以在Google Cloud SDK中安装kubectl。

$ gcloud components install kubectl

这次已经包含在内了,所以不需要了。

关于 docker ps 命令

在主机上可见的所有docker容器都是由Docker for Mac创建的。

$ docker ps

想要查看minikube的容器时,需要先进行一次连接。

$ minikube ssh
                         _             _            
            _         _ ( )           ( )           
  ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __  
/' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

$ docker ps

就像这样,环境已经搭建好了,所以我想尝试使用Helm之类的工具来做一些事情。

广告
将在 10 秒后关闭
bannerAds