kubernetesをローカル開発環境に構築する場合、minikubeが比較的手軽です。
MacOSでは、Dockerと同様、Linux実行環境としてhyperkitを選択でき、VMより透過的でレスポンスの速い環境を利用できます。
minikube起動に必要なコンポーネントは以下のとおりです。
- dockerランタイム: Docker for Mac
- kubectl: Google Cloud SDK由来、またはhomebrewでインストール
- minikube: minikubeをインストール
- Linux仮想環境ドライバー: hyperkit-driverをインストール
minikubeのインストールは、
公式チュートリアルに掲載されているとおり、コマンドをcurl
でネットワーク取得して配置するだけです。
hyperkitドライバーも、
minikube GitHubの解説のとおり、コマンドをcurl
でネットワーク取得して配置するだけです。
必要なファイルが揃ったら、minikube start
でクラスタを起動できます。
初回起動の際に、150MB程度のISOイメージとkube-systemのコンテナイメージを自動ダウンロードして立ち上がります。
$ minikube start --vm-driver=hyperkit --cpus 2 --memory 8192
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
150.53 MB / 150.53 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
この時点でkubectl
のコンテキストがminikubeを指しているので、nodeを確認するとminikubeがnodeとして起動していることが分かります。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 43s v1.10.0
ここまで来たら、あとは一般的なkubernetesの運用と変わりません。
まとめ
すでにdockerを利用している環境であれば、クラスタ構築といっても管理コマンドとドライバを計2ファイルコピーするだけで立ち上がるため、セットアップは驚異的に手軽と言えます。
これまで、コンテナベースでWebサービスの環境を用意するとなると、productionは kubernetes、dev環境は Docker Compose という不揃いな環境になりがちでした。
minikubeを活用すると、コンテナ操作をkubectl
に統一し定義ファイルもkubernetesベースに統一できるため管理コストが下がります。
逆にdockerにも、kubernetesを操作するメタコマンドが導入されたのですが、dockerの基礎的なコマンドではなくDocker Swarmベースであるため「Swarmで環境を統一する」と決めたプロジェクト以外では利用しづらい面があります。
kubernetesとdockerを比較すると、Google Kubernetes EngineやAmazon EKSなど、productionの選択肢でkubernetesが圧勝したため、Appサーバ+RDBMSといった複数コンテナのネットワーク構成では、kubernetesを採用する方が合理的な情勢と言えるでしょう。
Chuma Takahiro