让Minikube和Docker for Mac(Edge)共存
环境
MacBook Pro 2014年中期
macOS High Sierra操作系统
Homebrew 1.6.1软件库
本地运行 Kubernetes
最初作为开发环境,我在 Docker for Mac 上使用 docker-compose。但是因为想要尝试一下 Kubernetes,所以我进行了一些配置,并做了以下备忘录。
前提
说到本地用Kubernetes,可能会有两个选择
-
- Minikube
-
- 迷你立方
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。
更改上下文并确认
注意不是使用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/
这是什么鬼…刚刚还没有呢…
总之,可以跳过吗?
如果使用代理,那么 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之类的工具来做一些事情。