環境

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 がデフォルトで入っていないのでデプロイしてみる
公式の手順に従っただけ

https://github.com/kubernetes/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 とか使って色々やってみたい

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.