オフラインインストール可能な Kubernetes インストーラを作った
概要
いろいろ必要に迫られて、完全オフラインな環境に Kubernetes をインストールする必要がでてきました。
Kubernetes のオフラインインストールは手動でやるとかなり面倒です。そこで、完全にオフラインな環境(オンプレ)に Kubernetes をインストールするためのインストーラを作りました。
- CentOS 7, RHEL 7, Ubuntu 18.04 に対応しています。
- 内部的には kubeadm を使用しています。
- Ansible を使用してインストールします (スクリプトベースのインストーラも一応あり)
- オフラインインストールをする場合は、事前にオンライン環境で RPM / DEB ファイルの取得とコンテナイメージをダウンロードしておき、これを外付けHDDなりでオフライン環境に持ち込む、という手順になります。
- Kubernetes 以外に、Rook NFS/Ceph、Private Registry、Nginx Ingress Controller、Metrics Server、Helm のインストールもできます。
Kuberspray に似ていますが、完全オフラインでインストールができるという点が異なります。
ダウンロード
作ったものは https://k8s-installer.github.io/ においてあります。マニュアルもここにありますので、使い方はこちらを見てください。
Git レポジトリは https://github.com/k8s-installer/k8s-installer です。
使い方
使い方はマニュアルを見てもらうとして、ここでは簡単な使い方のみ記載します。
オンラインインストール
インストーラを Github から入手します。
次に、Ansible インストールと、Inventory file および vars ファイルのコピー・編集を行います。
$ cd ansible
$ pip install -r requirements.txt
$ cp samples/* inventory/
Inventory ファイル(inventory/hosts) には、デプロイ先のホストを指定します。
master_first にマスタノードの1台目、master_secondaryにマスターノードの2台目以降(HA構成の場合)、worker にワーカーノードを指定します。
[master_first]
master-0 ip=10.240.0.10
[master_secondary]
master-1 ip=10.240.0.11
master-2 ip=10.240.0.12
[worker]
worker-0 ip=10.240.0.20
worker-1 ip=10.240.0.21
[master:children]
master_first
master_secondary
HA 構成にする場合は inventory/group_vars/all/main.yml の lb_apiserver_address にロードバランサのIPアドレス or ホスト名を指定します。
Ansible playbook を実行してデプロイを行います。sudo パスワードが必要な場合は -K オプションを追加してください。
$ ansible-playbook -i inventory/hosts site.yml
オフラインインストール
オンライン環境で offline-generator ディレクトリの generate-offline.sh
を実行してオフラインファイル一式を収集します。
(オフライン環境は、デプロイ先のノードと同一の OS で稼働している必要があります)
k8s-offline-files.tar.gz というファイルができますので、本インストーラと本ファイルを外付けHDDなどを使用してオフライン環境で Ansible を実行するノードに転送します。
(ノードには別途 Ansible のインストールが必要です)
あとは、オンラインインストールの時と同様に Ansible を実行してインストールを行います。
一箇所だけ、inventory/group_vars/offline.yml
の offline_install の値を yes に変更する必要があります。
設計指針
軽く設計方針などについて記載しておきます。
Kubeadm を活用して Ansibleインストールする、という点は Kubespray などと同じなので、特に説明は不要と思います。
問題はオフラインインストールをどうやって実行するか、という点です。これについては、1) RPM/DEB などのパッケージのオフラインインストールをどうするか、2) コンテナイメージをどう各ノードに投入するか、が問題になります。
RPM/DEB のオフラインインストール
必要な RPM なり DEB を依存関係を含めダウンロードしておき、全ノードに Ansible で転送してオフラインリポジトリを作る、という戦略を取ります。
(ローカルに Web サーバを立てて yum/apt リポジトリにするという手もあるのですが、面倒なので)
依存関係含めて RPM / DEB を取得する方法、およびオフラインリポジトリを生成する方法は以下です。具体的な手順は create-repo-*.sh
を見てください。
- RHEL/CentOSの場合:
- RPM の取得は
repotrack
で一発です。 - リポジトリ生成には
createrepo
を使います。
- RPM の取得は
- Ubuntu の場合:
- DEB ファイルの依存関係は
apt-cache depends
で取れます。ダウンロード自体はapt download
です。 - リポジトリ生成には
apt-ftparchive
を使います。
- DEB ファイルの依存関係は
コンテナイメージの取得・投入
コンテナイメージの取得は docker pull
で行い、docker save
で tar.gz 形式でイメージ化できます。
これを各ノードに転送して、docker load
でロードします。
ちょっとやっかいなのは必要なコンテナイメージの洗い出しです。Kubernetes 本体のコンテナイメージは kubeadm config image list
で取得できます。
それ以外のものについては、yaml ファイルから "image:" で grep して引っこ抜くしかありません。
Author And Source
この問題について(オフラインインストール可能な Kubernetes インストーラを作った), 我々は、より多くの情報をここで見つけました https://qiita.com/tmurakam99/items/f6bb92f211e2cb101291著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .