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から直接インストールできます。
  • 適切なパッケージ管理システムでインストールしてください:
    • Linux: お好きなパッケージマネージャ、または Snap。
    • MacOS
    • Windows

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 stringMinikube VMが使用するKubernetesのバージョン(例:v1.2.3)。
  • --registry-mirror stringSliceDockerデーモンに渡すレジストリミラー。
注:2 番目の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を設定して無効にする必要があります。

推奨の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
注意: Helm v2 を使用している場合は、デプロイドキュメントの--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
注意: Helm v2 を使用している場合は、デプロイドキュメントの--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