Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?
@yukin01

Minikube と Docker for Mac (Edge) を共存させる

More than 3 years have passed since last update.

環境

MacBook Pro Mid 2014
macOS High Sierra
Homebrew 1.6.1

ローカルで Kubernetes

もともと開発環境として Docker for Mac で docker-compose を利用していたが
Kubernetes 触ってみたいということで色々設定したときのメモ

前提

ローカルで Kubernetes といえばおそらく次の二択

  1. Minikube
  2. Docker for Mac (Edge)

どっちがいいのかわからんということで2つ入れてみる
後述するが Minikube を先に入れる方が良い

Homebrew

本記事では Homebrew を使ってインストールしていく
もちろんバイナリからやってもOK
Homebrew のインストールは公式ページから

Minikube

ハイパーバイザが必要なので VirtualBox も一緒にインストールする

$ brew cask install virtualbox
$ brew cask install minikube

Homebrew で minikube を入れると kubernetes-cli という fomula も一緒に入ってくるが
こいつの中に 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      

dashboard にアクセスするために service 一覧を取得

$ 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

EXTERNAL-IP が設定されてないためアクセスできない…(※proxy すれば良い)
と思いきや別の方法があった

$ 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 |
|-------------|----------------------|-----------------------------|

これで dashboard が確認できる
(デフォルトで日本語になっていてびっくり)

minikube を止めるときは

$ minikube stop

Docker for 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

context を変更して確認する
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  

dashboard がデフォルトで入っていないのでデプロイしてみる
公式の手順に従っただけ

$ 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 proxy を起動

$ kubectl proxy

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
にアクセス

2018-04-17 19.31.46.png

なんだこれ…さっきは出なかったぞ…
とりあえずスキップできる

proxy を使えば minikube でも同じようになるはずだけど
minikube は自動で port-forward を設定してくれていたということなんでしょうか(詳しい方教えてください)

注意点

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 とか使って色々やってみたい

7
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yukin01
iOS → Firebase → インフラ/SRE 見習い
globis
グロービスは 1992 年の創業以来、社会人を対象とした MBA、人材育成の領域で Ed-Tech サービスを提供し、現在は日本 No.1 の実績があります。これらの資産と、さらに IT や AI を活用することで、アジア No.1 を目指しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
7
Help us understand the problem. What is going on with this article?