LoginSignup
1
5

More than 5 years have passed since last update.

kubernetes: オフライン環境でのクラスタ構築

Last updated at Posted at 2016-03-07

インターネット接続の制限のあるオフライン環境でkubernetesクラスタを構築する。
今回はAWS上にクローズドな環境を構築して試す。
※OSはCentOS7

※worker nodeは初期はminionという名称でしたが、workerに記載統一

各クラスタ(master/worker)のセットアップは、基本的に以下を参照
http://qiita.com/suzukihi724/items/d3270121009120f9c9f0

セットアップファイルをオフラインで持ち込み、完全手動でインストールする方法もあるが、yumなどを利用してオンライン環境でインストールした後に、オフライン環境へ持ち込む(もしくはクローズドな環境でyumを利用できるように設定する)手段が容易。

AWSの場合は、オンライン環境でセットアップ後に、AMIを作成し、クローズドなネットワーク内で該当のAMIをベースにインスタンスを起動する。

上記方法でkubernetesクラスタのセットアップはでき、kubectl get nodesコマンドでworkerノードを正しく認識できるようになったが、Podを作成すると、ステータスがRunningにならず正常にPodを生成できない事象に遭遇。
※CreatingContainerから遷移しない。

このような場合のデバッグには、以下のコマンドが有効。

kubectl logs [Pod名]
kubectl describe pod [Pod名]

ログを確認すると、beta.gcr.io/google_containers/pause:2.0というイメージの取得に失敗していた。
クローズドな環境のため、外部レジストリの通信が拒否されるためである。そもそもpauseって??と思ったが、Pod内のコンテナのネットワーク接続用のコンテナらしい。

クローズドな環境の場合、このコンテナイメージをオンライン環境で取得(docker pull)し、オフライン環境内のPrivate Docker RegistryにPushしておく必要がある。
さらに、kubernetesクラスタが、pauseのイメージをbeta.gcr.ioではなく、プライベートレジストリから取得するための設定が必要。

kubernetesでprivate docker registryを利用する方法は以下参照

さらに、kubeletの設定でpauseの取得先を指定する必要がある。

sudo vi /etc/kubernetes/kubelet

以下がpauseコンテナの取得先設定。
デフォルトはbeta.gcr.io/google_containers/pause:2.0の模様

# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image="[PrivateRegistryのパス]/pause:2.0"
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5