Minikubeとは
- ローカル環境で動作可能なKubernetes(Win/Mac/Linux...)
- Dockerホストが別途必要(Docker for Windows...)
- ハイパーバイザーが別途必要(Hyper-V、VirtualBox...)
- Minikube用のVMイメージの作成は不要
インストール
-
Docker for Windowsインストール
- (省略)
-
VirtualBoxインストール
- (省略)
-
minikube.exeダウンロード
-
https://github.com/kubernetes/minikube/releases
- minikube-windows-amd64.exeをダウンロード
- 保存先パスを環境変数PATHに追加
- ファイル名を「minikube.exe」にリネームし、任意のフォルダに保存(例:c:\minikube)
-
https://github.com/kubernetes/minikube/releases
Kubernetesクラスタの作成
ハイパーバイザーをVirtualBoxに設定
minikube config set vm-driver virtualbox
Kubernetesクラスタの作成
minikube start
状態確認
minikube status
ダッシュボード(ブラウザ)の起動
minikube dashboard
Minikubeへのデプロイ(Podの作成)
-
kubectl.exeダウンロード
- 最新バージョンの確認
- https://storage.googleapis.com/kubernetes-release/release/stable.txt
- 2018.05.28時点で「v1.10.3」
- ダウンロード
- 下記URLのバージョンのところを最新のものに書き換える
- minikube.exeと同じフォルダに保存してパスを通す(例:c:\minikube)
- 最新バージョンの確認
- deployment.yml作成
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: deployment-sample
spec:
replicas: 2 // 同じ仕様のPodを2個起動する
template:
metadata:
labels:
app: deployment-sample // Service作成時に指定するラベル名
spec:
containers: // Podに含めるコンテナイメージの設定
- name: nginx
image: nginx:1.1
- name: myapp
image: myapp:1.1
- ymlの内容を登録(Podのデプロイ、起動)
kubectl apply -f deployment-sample.yml
CI/CDの流れ
- 全体構成イメージ
-
検証環境(Kubernetes)へデプロイ
-
開発環境(ローカル)
- Gitのdevブランチにpush
-
CIサーバ
- devブランチをチェックアウト
- ビルド・単体テスト
- Dockerイメージの作成(docker build)
- イメージをDockerレジストリに登録(docker push)
- 検証環境にデプロイ(kubectl apply)
- DockerレジストリからDockerイメージを取得
- Pod作成・起動
- (Integration Test実行)
- テストに失敗したらデプロイをロールバック(kubectl rollout)
-
デプロイ後のイメージ
- すでにDeploymentが存在する状態でkubectl applyを実行すると、新しいDeployment(Pod)が作成される
- 新旧バージョンが混在した期間を経て、最終的に新バージョンに切り替わる(ローリングアップデート)
-
開発環境(ローカル)
-
本番環境(Kubernetes)へデプロイ
-
開発環境(ローカル)
- devブランチをmasterブランチにマージ
-
CIサーバ
- masterブランチをチェックアウト
- ビルド・単体テスト
- Dockerイメージの作成(docker build)
- イメージをDockerレジストリに登録(docker push)
- 本番環境にデプロイ(kubectl apply)
- DockerレジストリからDockerイメージを取得
- Pod作成・起動
- リリースに失敗したらデプロイをロールバック(kubectl rollout)
-
開発環境(ローカル)
課題
- Dockerイメージのバージョン付け方
- そもそもつけるものなのかどうか
- docker buildとdeployment.ymlのバージョンをCIで更新する??
- 本番環境へのデプロイはローリングアップデートでいいのか?
- ブルーグリーンとかカナリヤの場合はどうやる?
- ブルーグリーンの場合は、新VerのPodに旧Verと異なるラベルを付与する
- ブルーグリーンとかカナリヤの場合はどうやる?
- Dockerイメージ毎回作ると容量の問題は?
- どういうNWの動きになってるの?
参考
- Minikube
- Kubernetes
- Kubernetes(CI/CD)
- Helm(k8sのパッケージマネージャ)