MinikubeでKubernetesのローカル環境を構築する
Minikubeとは
Minikubeは、dockerのオーケストレーションツールであるKubernetes
をローカル環境に構築するツールです。
仮想マシンやHyperKit
などの仮想化ツールでクラスターを作成し、その上にKubernetes
環境を構築します。
仮想マシンには、VirtualBox
やVMware
などを選択できます。
今回はDocker for Mac
で使われているHyperKit
を使って構築していきたいと思います。
Minikubeをインストールする
- Macの場合
- Ubuntu 20.04の場合(dockerがインストール済みであること)
クラスターを作成する
- Macの場合
- Ubuntu 20.04の場合
kubectl
の設定にminikube
が追加されます。
アプリケーションのイメージをビルドする
docker環境の切り替え
Kubernetes
にデプロイするアプリケーションのコンテナイメージを作成します。
アプリケーションのイメージはHost OSでビルドしますが、そのままではKubernetes
へデプロイする際にイメージにアクセスできないため、minikube
が構築したKubernetes
と同じ環境にイメージを作成する必要があります。
そのためには、以下を実行してdockerの実行環境を切り替えます。
dockerイメージをbuildする
RubyのSinatraを使った簡単なアプリをデプロイしてみます。
デプロイするスクリプトは以下のような構成になっています。
デプロイするGemfileとスクリプトは以下。
アプリケーションのDocker Imageは以下のDockerfile
で作成します。
アプリケーションのイメージをビルドします。
イメージ名は<Docker Hubのユーザー名>/<アプリ名>:<タグ>
としました。
Kubernetes にデプロイする
Kubernetes
へのデプロイは、コマンドで直接デプロイする場合と、マニフェストファイルを使った方法があります。
コマンドで直接デプロイする
コマンドで直接デプロイする場合は、kubectl create deployment
でサービスを作成した後、kubectl expose deployment
でサービスを公開します。
以下のコマンドを実行することで、ブラウザが開きデプロイしたアプリケーションを確認できます。
マニフェストファイルを使ってデプロイする
deployments.yaml
というyamlファイルを作成して、kubectl apply -f deployments.yaml
コマンドでデプロイします。
コマンドで直接デプロイする方法と同様にminikube service sample-app
を実行するとブラウザでアプリにアクセスできます。
今回は、以下の内容でマニフェストファイルを作成しました。マニフェストファイルの詳しい内容についてはここでは詳しく調べません。
ざっくりとした内容としては、kind: Deployment
でDeploymentオブジェクトというアプリケーションに関する情報を記述することと、kind: Service
でアプリケーションを公開するためにネットワーク情報Portなどを作成するという感じです。
まとめ
minikubeでKubernetesのローカル環境を構築する方法を確認してみました。 今回使ったソースコードはこちらにあります。 とりあえず、Minikube上にデプロイして確認してみるまで確認できましたが、マニフェストファイルについてなど、学習することは多そうです。
課題
- アプリケーションのイメージを
Kubernetes
と同じ環境でbuildするため、Kubernetes
が利用するdocker環境を汚染してしまう- イメージのbuildは、
Cloud Build
など外部サービスを使い、GCRなどにPushした方が良いかもしれない
- イメージのbuildは、
- GKEなどへのデプロイを考えると、作成したイメージグローバルな場所にプライベートリポジトリを作ってPushした方が良さそう
- マニフェストファイルに関して学習したい
- デプロイやネットワークの情報の他にJobなどもマニフェストファイルで定義可能なので、
Kubernetes
オブジェクトに関する理解を深めるためには重要そう
- デプロイやネットワークの情報の他にJobなどもマニフェストファイルで定義可能なので、