MinikubeによるKubernetes開発者向けセミナー
本ガイドは、Kubernetesのローカル開発環境を構築するためのクロスプラフォームリソースとして提供することを目的としています。 本ガイドでは、デファクトスタンダードであるMinikubeを使用します。
Minikube入門
Kubernetesプロジェクトの公式ドキュメント「Running Kubernetes Locally with Minikube」を抜粋して解説します。
kubectlのインストール
公式ドキュメントにはいくつかのオプションが記載されていますが、結果的には3つのうちの1つを実行すればよいことになります:
-
Google Cloud PlatformのCloud SDKページからGoogle Cloud SDKの一部としてダウンロードします。
gcloud
をインストールしたら、kubectl
:sudo gcloud components install kubectl
この方法ですでに
kubectl
をインストールしている場合は、更新されていることを確認してください:sudo gcloud components update
- Google Storage APIから直接インストールできます。
- 適切なパッケージ管理システムでインストールしてください:
Minikubeのインストール
Kubernetesのドキュメントでは、GitHub上のリリースから直接インストールすることが推奨されています。
VMドライバーの選択
このガイドでは、クロスプラットフォームの互換性のために、VirtualBoxにこだわりますが、VMware Fusion、HyperV、KVM、Xhyve用のドライバがあります。
Minikubeの起動/停止
Minikubeのリソース要求は、GitLab Chartを開発するためのデフォルトよりも高く設定する必要があります。主要な設定項目は、minikube start --help
。テストする項目や要件に応じて変更する項目を以下に示します:
-
--cpus int
: Minikube VMに割り当てられるCPU数(デフォルト2
)。 必要なCPUの絶対最小数は .2
_完全な_Chartをデプロイするには、3
。 -
--memory int
: Minikube VMに割り当てられるRAMの量(デフォルト2048
)。絶対最小値は5120
(5 GB)。推奨値は8192
(8 GB)。 -
--disk-size string
: Minikube VMに割り当てられるディスクサイズ (フォーマット:<number>[<unit>]
, unit =b
,k
,m
org
) (デフォルト:20g
)。GitLabのストレージとデータベースの要件を参照してください。注:ホームディレクトリの~/.minikube/machines/minikube/
に作成されます。 -
--kubernetes-version string
Minikube VMが使用するKubernetesのバージョン(例:v1.2.3
)。 -
--registry-mirror stringSlice
Dockerデーモンに渡すレジストリミラー。
start
コマンドでこれらの値を変更するには、まずminikube delete
で既存のインスタンスを削除するか、VirtualBox Manager で手動でプロパティを変更する必要があります。すべてのツールのインストールと設定が完了したら、Minikubeの停止を開始します:
minikube start --cpus 3 --memory 8192
このコマンドは次のようなものを出力するはずです:
Starting local Kubernetes v1.7.0 cluster...
Starting VM...
Downloading Minikube ISO
97.80 MB / 97.80 MB [==============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Starting cluster components...
Connecting to cluster...
Setting up kubeconfig...
Kubectl is now configured to use the cluster.
[helm.gitlab.io]$ minikube ip
192.168.99.100
[helm.gitlab.io]$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.
minikube ip
コマンドを実行した結果をメモしておいてください。出力が192.168.99.100
でない場合、出力IPが後で必要になります。
Minikubeの使用
MinikubeはKubernetesのインストールとして直接使用でき、シングルノードクラスタとして扱われます。 MinikubeとGoogle Container Engine(GKE)のような本格的なKubernetesクラスタとでは、若干異なる動作があります。
違いますね:
- Persistent Volumes:
hostPath
のみ。
利用できません:
- ロードバランサー(クラウドプロバイダーが必要です。)
- 高度なスケジューリングポリシー(複数ノードが必要)。
ガッチャ:永続ボリューム
Minikubeは、VM内部のディレクトリにマッピングされるhostPath
タイプのPersistenVolumesをサポートしています。Minikubeはtmpfs
に起動するため、minikube stop
を介した再起動では、ほとんどのディレクトリは永続化されません。
永続するディレクトリの詳細と一覧は、Minikubeスタートガイドに記載されています。
アドオンの有効化
Minikubeは、基本構成とは別にいくつかの機能を扱います。 このプロジェクトの開発には、Ingress
にアクセスする必要があります:
minikube addons enable ingress
ダッシュボードへの接続
ダッシュボードのURLは、電話で確認できます:
minikube dashboard --url
HelmとMinikubeの接続
Helm v2を使用している場合、Minikubeが起動したら、コマンドhelm init
でHelmを初期化できます。
Helm v3を使用する場合、初期化コマンドは必要ありません。
Helmの詳細については、Helmの開発者を参照してください。
チャートのデプロイ
このチャートをMinikubeにデプロイする場合、一部のチャートリソースを削減または無効にする必要があります。nginx-ingress
チャートを使用してポート22
,80
,443
を提供することはできません。無効にし、nginx-ingress.enabled=false,global.ingress.class="nginx"
を設定してIngressクラスを設定するのが最善です。
Minikubeでは、certmanager
チャートは使用できません。certmanager.install=false,global.ingress.configureCertmanager=false
を設定して無効にする必要があります。その結果、独自のSSL証明書を提供しない場合、自己署名証明書が生成されます。gitlab-runner
チャートは現時点では自己署名証明書と互換性がないため、gitlab-runner.install=false
を設定して無効にする必要があります。
GitLab のデプロイと推奨設定
推奨の3CPUと8GBのRAMを使用する場合は、values-minikube.yaml
。
helm repo add gitlab https://charts.gitlab.io/
helm repo update
helm upgrade --install gitlab gitlab/gitlab \
--timeout 600s \
-f https://gitlab.com/gitlab-org/charts/gitlab/raw/master/examples/values-minikube.yaml
--timeout
オプションに関する注意事項を参照してください。最小限の設定でGitLabをデプロイする方法
_絶対最小_リソースである2CPUと4GBのRAMを使用する場合は、すべてのレプリカを減らし、不要なサービスを無効にする必要があります。妥当なベースとしてvalues-minikube-minimum.yaml
。
helm repo add gitlab https://charts.gitlab.io/
helm repo update
helm upgrade --install gitlab gitlab/gitlab \
--timeout 600s \
-f https://gitlab.com/gitlab-org/charts/gitlab/raw/master/examples/values-minikube-minimum.yaml
--timeout
オプションに関する注意事項を参照してください。minikube ip
の出力が192.168.99.100
でなかった場合は、以下の引数を追加して、例のコンフィギュレーション・ファイルの IP エンドポイントを上書きします:
--set global.hosts.domain=$(minikube ip).nip.io \
--set global.hosts.externalIP=$(minikube ip)
DNSの取り扱い
提供されている設定例では、ホストファイルや他のドメイン名解決サービスの変更処理のオーバーヘッドを減らすために、ドメインを192.168.99.100.nip.io
として設定しています。しかし、これはnip.ioのネットワーク到達性に依存しています。
これが利用できない場合は、/etc/hosts
ファイルを変更するか、別の DNS 解決手段を提供する必要があります。
例/etc/hosts
ファイルの追加:
192.168.99.100 gitlab.some.domain registry.some.domain minio.some.domain
自己署名 CA の組み込み
チャートがデプロイされると、自己署名証明書を使用している場合は、生成されたCA証明書を取得する方法がユーザに通知されます。 この証明書をシステム・ストアに追加することで、すべてのブラウザ、Dockerデーモン、git
コマンドがデプロイされた証明書を信頼できるものとして認識できるようになります。方法はオペレーション・システムによって異なります。
BounCAには、ほとんどのオペレーションシステムをカバーする、良いチュートリアルがあります。
ログイン
GitLabインスタンスにアクセスするには、指定されたドメインにアクセスします。この例では、https://gitlab.192.168.99.100.nip.io
。初期rootパスワードのシークレットを手動で作成した場合は、それを使ってrootユーザーとしてサインインできます。そうでない場合は、GitLabが自動的にrootユーザー用のランダムなパスワードを作成します。これは、次のコマンドで抽出できます(<name>
をリリース名に置き換えます - 上記のコマンドを使った場合はgitlab
)。
kubectl get secret <name>-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 --decode ; echo