閉域環境(air gap)でRancerセットアップ

閉域環境(air gap)でRancerセットアップするメモ

参考：
https://rancher.com/docs/rancher/v2.x/en/installation/air-gap/

#前提条件

・Rancher v2.3.0
・EC2(amazon linux2) m5.xlarge x 3 in VPC
　※EC2のSGは同一でSELF INBOUND/OUTBOUND ALL

閉域環境に以下があること
・Private Docker Registry
・gitリポジトリ

rancherが必要なすべてのdockerイメージは、閉域環境からアクセス可能なdocker registryにpushしておく必要がある。
また、loggingやmonitoringなどのシステム機能は、HELMのsystem-chartsを、閉域環境からアクセス可能なリポジトリ(gitなど)にpushしておく必要がある。

※Private Docker RegistryとHELM chart用のgitリポジトリ（gitlabやgitbucketなど）のサーバ設定方法は割愛

#1. 事前準備

## [1] ホスト編

Rancher及びkubernetesを起動するnode(ホストサーバ)には、以下セットアップを実施

・dockerインストール
・private docker registryからpullできる設定(CERTSやDNSなど含む)

逆に言えば、これだけで良い。

## [2] Private Docker Registry

外部インターネット接続可能な環境で、閉域でのrancher起動に必要なイメージをすべてpullする。
公式の一括DLスクリプトが提供されているので、それを用いる

```bash
#イメージの一括DLスクリプト
wget https://github.com/rancher/rancher/releases/download/v2.3.0/rancher-save-images.sh

#収集リスト
wget https://github.com/rancher/rancher/releases/download/v2.3.0/rancher-images.txt

#収集実行
sh rancher-save-images.sh
```

実行すると `rancher-images.tar.gz` が作成される（3.5 GB）ので
それを閉域環境へ持ち込む。

なお、持ち込んだtar.gzをprivate docker registryに一括pushするスクリプトもあるので、こっちも事前にDLしておき、閉域環境へ持ち込む。

```bash
wget https://github.com/rancher/rancher/releases/download/v2.3.0/rancher-load-images.sh
```

閉域環境へ持ち込んだら、private docker registryを指定して実行すると、一括pushできる。

```bash

sh rancher-load-images.sh --registry <private docker registry>:<port>
```

##[3] git : HELM system-charts

外部インターネット接続可能な環境で、閉域でのrancher起動に必要なCHARTをすべてpullする。

```
git clone -b release-v2.3 https://github.com/rancher/system-charts.git
```

※Rancherバージョンとbranchの対応が異なると、正常に動作しない場合あり。

pullしたものを一式private git repository（gitlabやgitbucketなど）にpushする。


#2. Rancher Server起動

Rancherサーバの構築方法は
・HA Install
・Single Node Install
の２種類ある。

HA Installはその名の通り可用性の高い構成で、Rancherサーバ自体をk8sで構築する。k8s管理ツールをk8sで立てると言う、ややカオスな構成。
k8s構築にはRKEと言うクラスタ構築ツールもある。

ここではSingle Node Installについて述べる。

Rancher Server（Single Node Install）の実行は以下

```bash
docker run -d --restart=unless-stopped 
-p 80:80 -p 443:443 
-e CATTLE_SYSTEM_DEFAULT_REGISTRY=<private docker registry>:<port>  
-e CATTLE_SYSTEM_CATALOG=bundled 
rancher/rancher:v2.3.0

```

Rancher ServerのSSLの設定をどうするかでオプションが異なるが、
上記は「SELF-SIGNED CERTIFICATE」の例。
オレオレ証明じゃない設定も可能。

正常にrunできればブラウザからrancher serverにアクセスできる

<img width="607" alt="スクリーンショット 2019-10-15 18.29.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112537/81dae32a-d65b-1318-5eb4-81b7e57ed03c.png">

#3. k8sクラスタ作成

Rancherコンソールの Add Cluserから作成可能。

<img width="1175" alt="スクリーンショット 2019-10-15 18.31.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112537/bc7cb885-f0d9-d310-04a0-a09aed7a97a5.png">

詳細は以下と重複なので割愛。
https://qiita.com/suzukihi724/items/00b167c6f5f2ddeca718

#4. System Chartsの設定

Prometheus + Grafana連携のモニタリング機能を有効化するため、HELMのプライベートリポジトリの設定を追加する。

Global > Tools > Catalogsにて、system-libraryをcloneして、独自に構築しかつsystem-chartsをpush済みのprivate git リポジトリを指定する。

<img width="1186" alt="スクリーンショット 2019-10-15 18.42.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112537/0e4461c0-8f16-d872-450e-0c8919925597.png">

#5. Monitoringを有効化

Global > Tools > Monitoringにて、モニタリングをenableにすると、prometheus + grafanaのリッチなモニタリングが有効化される。

<img width="1172" alt="スクリーンショット 2019-10-15 18.47.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112537/182fcd43-a18b-df05-211f-a1e59fd3bdff.png">
<img width="1174" alt="スクリーンショット 2019-10-15 18.48.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112537/c2a9edd8-b63e-f21e-15dd-135af73fd838.png">