URL : https://kubernetes.io/docs/setup/minikube/
MinikubeはKubernetesの以下の機能をサポートしているそうだ
- DNS
- NodePorts
- ConfigMaps と Secrets
- Dashboards
- コンテナランタイム、Docker、rkt、CRI-O(デフォルトはDockerかな)
- CNI(Container Network Interface)
- Ingress
Minikubeのインストール
適当にこの辺を見つつインストール
https://kubernetes.io/docs/setup/minikube/
クイックスタート!
Minikubeはいくつかのドライバをサポートしているようですが、virtualboxが楽な気がします。おすすめ。
以下のコマンドでminikubeを起動します
$ minikube start
どうやら minikube start
を実行すると kubectl
にクレデンシャルが自動的に設定されるようです。
その他のクラスタを並行して触っている場合、勝手に変わっていることがあるので注意しましょう。
私はDocker for Mac上で KubernetesのContext切り替え機能でクラスタのクレデンシャルを切り変えています。
クラスタのクレデンシャルとは、k8sクラスタに接続する鍵です
上記 start コマンドを実行するとクレデンシャルが設定されるので以下のコマンドで確認してみます。
$ kubectl get nodes
以下のようにminikube nodeが見えるはずです
NAME STATUS ROLES AGE VERSION minikube Ready master 8m v1.10.0
ちなみに、kubectlコマンドの引数は以下のように省略することも可能です
$ kubectl get no
クイックスタートのとおりに hello-minikube をデプロイしてみる
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
デプロイメント hello-minikube のポートをexposeする。
$ kubectl expose deployment hello-minikube --type=NodePort
Podが起動していることを確認してみる
$ kubectl get pods
ステータスが Running
になっていればOK.
デプロイしたPodに以下のコマンドでアクセスできる。
$ curl $(minikube service hello-minikube --url)
IPアドレスは動的に変更され、以下のコマンドでも取得可能のようだ。(接続するためにはポートがわからないが)
$ minikube ip
サービスを削除する
$ kubectl delete services hello-minikube
デプロイメントを削除する
$ kubectl delete deployment hello-minikube
minikubeを停止する
$ minikube stop
その他のランタイムを使うためには
CRI-O
以下のコマンドでminikubeを起動する
$ minikube start \ --network-plugin=cni \ --container-runtime=cri-o \ --bootstrapper=kubeadm
拡張版として使う場合には以下のようにする
$ minikube start \ --network-plugin=cni \ --extra-config=kubelet.container-runtime=remote \ --extra-config=kubelet.container-runtime-endpoint=/var/run/crio.sock \ --extra-config=kubelet.image-service-endpoint=/var/run/crio.sock \ --bootstrapper=kubeadm
rkt
$ minikube start \ --network-plugin=cni \ --container-runtime=rkt
クラスタの管理
バージョンを指定してクラスタを起動する
minikubeがサポートしているバージョンは以下のコマンドで確認できる
$ minikube get-k8s-versions
バージョンを指定してk8sクラスタを起動するには以下のコマンドのようにする
$ minikube start --kubernetes-version v1.10.0
クラスタとの対話
minikubeはコンテキストを自動で設定するが(なるほどやはり)手動で設定するには以下のコマンドを利用する
$ kubectl config use-context minikube
ダッシュボード
ダッシュボードを起動するには以下のコマンドを実行する
$ minikube dashboard
ノードポートを利用して公開しているサービスのURLを得るには以下のコマンドを利用する
$ minikube service [-n NAMESPACE] [--url] NAME
例
$ minikube service hello-minikube --url
例2
直接ブラウザを開く場合には --url
を省略する
$ minikube service hello-minikube
Network
アクセスできるIPを取得するには minikube ip
が利用できる。
ポートを取得したい場合には
$ kubectl get service hello-minikube --output='jsonpath="{.spec.ports[0].nodePort}"'
のような形で取得できる
Persistent Volumes
Minikubeでは hostPath
と呼ばれるタイプのPersistentVolumesがサポートされている
これは、Minikube VM内のディレクトリにPersistentVolumeとしてマップされる。
Minikube VMはtmpfsで起動するのでほとんどのディレクトリは永続化されない(再起動で消える)
以下のディレクトリだけは永続化できる
/data /var/lib/localcube /var/lib/docker
dataディレクトリに永続化するためのPersistentVolume設定は以下のようになる
apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 spec: accessModes: - ReadWriteOnce capacity: storage: 5Gi hostPath: path: /data/pv0001/
ところどころ端折ってるけどこんな感じ。