[Rancher]Rancher Cluster on vSphere

# はじめに

こちらは [エーピーコミュニケーションズ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ap-com) 12日目の記事となります。

2021年11月からエーピーコミュニケーションズに入ったmiyukといいます。
1日目にRancherの記事があったので、私もRancherの記事を書いてみました。

Rancher Serverの構築自体は、[本アドベントカレンダー1日目の記事](https://zenn.dev/t_ume/articles/e087f142e932cb)や[私の過去記事](https://qiita.com/miyuk/items/1c54ac4f668550cf4ace)を参照ください。

:::note
Rancher Serverが作成するClusterの正式名称はvSphere Clusterですが、vSphereにもClusterがあるのでややこしくなるためRancher Clusterとしています。
:::

# 環境情報

## 構築時点のバージョン

OS: CentOS 7.9
k8s: v1.21.4+k3s1
Rancher: 2.6
cert-manager: 1.5.3
vCenter: 7.0.3
ESXi: 7.0.0

## 構成

Rancher ServerとvSphereは管理セグメント
Rancher Serverが作成するRancher Clusterはk8s用セグメント
に足を1本ずつ伸ばす形となっています。

k8s環境には、Rancher Cluster用に自動デプロイされたVMがIPアドレスを持つことができるようにDHCPサーバとDNSサーバを備えたutilサーバを配置しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/41427fc6-6150-a334-70a3-c1e1c4a9c4d8.png)

vSphere環境でのRancher Server構築は過去記事を参照。

https://qiita.com/miyuk/items/1c54ac4f668550cf4ace


# 構築

全体の流れは下記の通り

1. RKE VMテンプレート作成
1. Cloud CredentialsとNode Templateの作成
1. Clusterのデプロイ


## 1. RKE VMテンプレート作成

vCenterがRancher Clusterを作成するときに必要なテンプレートを作成します。
過去では、Rancherが用意していた`RancherOS`というものをそのまま使うことができていましたが、今は自分でテンプレートを作成する必要があるようです。

自分でコツコツテンプレートを作成してもいいですが、面倒なのでPackerを使って作成しました。

Packer自体のインストールは割愛しますが[公式](https://learn.hashicorp.com/tutorials/packer/get-started-install-cli)の手順見てもらえればすぐにインストールできます。

Packerでビルドするイメージ情報については下記レポジトリがRancher用でよく使われているのでこちらの`ubuntu_2004`イメージを利用しました。

https://github.com/David-VTUK/Rancher-Packer

レポジトリをダウンロードして以下ファイルを作成・修正。

<details><summary>varibales.json</summary><div>

```json:varibales.json
{
    "vcenter_server": "<vCenter名>",
    "username": "<vCenterユーザ名>",
    "password": "<vCenterパスワード>",
    "datastore": "<テンプレートVMを置くデータストア>",
    "folder": "<フォルダ名(例：Rancher Template)>",
    "host": "<テンプレートVMを置くホスト。特にしていなければ空白でOK>",
    "cluster": "<テンプレートVMを置くクラスター>",
    "network": "<テンプレートVMが接続するネットワーク>",
    "ssh_username": "packerbuilt(user-dataにて記載するものと同じ)",
    "ssh_password": "PackerBuilt!(user-dataに記載するものと同じ)"
}
```
</div></details>

<details><summary>user-data</summary><div>

```diff:user-data
#cloud-config
autoinstall:
  version: 1
  early-commands:
    - systemctl stop ssh # otherwise packer tries to connect and exceed max attempts
-  locale: en_US
+  locale: ja_JP
  keyboard:
-      layout: en
-      variant: uk
+      layout: jp
  identity:
      hostname: ubuntu
      username: packerbuilt
      password: '$1$rKxy/hZT$vAZ801S0/UEAEmVKogUdU0' # Password in hashed format
  ssh:
    install-server: yes
    allow-pw: yes
  packages:
    - open-vm-tools
  late-commands:
    - echo 'packerbuilt ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/packerbuilt
    - chmod 440 /target/etc/sudoers.d/packerbuilt
```
</div></details>

あとは`packer build`をするとbuildされたVMテンプレートがvCenterに保存されます。


```bash
packer build -var-file=variables.json ubuntu-2004.json
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/7dc78848-272c-78ed-bc61-e5c869dd8911.png)

:::note warn
インターフェースが複数あると、Packerは一番優先度が高いインターフェースをVMテンプレートに教えてしまうため、cloud-initが失敗する可能性があります。
対処としては、packer buildを実行するときに他のインターフェースを無効化するか、ubuntu-2004.jsonのboot_commandでhttpの宛先を指定してあげてください。
:::

## 2. Cloud CredentialsとNode Templateの作成

Clusterをデプロイするために必要なコンフィグを事前定義しておきます。

コンフィグはRancher Serverにログインして`Cluster Management`に移動すると項目が見つかります。

### Cloud Credentials

vSphereのFQDNとログイン情報を記載します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/8094b170-e727-ae3d-d5fe-189d5e863cd9.png)

### Node Template

基本はvCenterから必要な情報を候補として提示してくれるので迷うことはないかと思います。
赤枠の部分を設定して、他はデフォルトのままでOKです。

![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/a78338d2-dfcc-df4f-4793-dbc398a171a5.jpeg)

## 3. Clusterのデプロイ

準備が整ったら、Clusterをデプロイします。
こちらも先ほど作成したコンフィグを読み込むだけで基本はデフォルトのままで大丈夫です。

今回はMasterとWorkerについては、別に分けていますが検証であれば同じノードでもOK。

vSphereを選択して
![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/991e70fd-ecd7-a973-e029-8041249dafd8.jpeg)

クラスタの情報を記載
![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/dc52a4a9-df31-7065-6251-4478d6a71def.jpeg)

10分ほどすると、デプロイが完了！
※デプロイしすぎて、連番がおかしくなっていますが空いている若い番号を使うようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/f1c29de6-1829-6b81-65d4-5c211f3304db.png)

以上でRancher Clusterがデプロイ完了です。


# おわりに

今回は、すでに作成しているRancher Serverに対してRancher Clusterを作成してみました。

最近だと、VMware環境使っているところはTKG使うことが多くなるのかと思いますが、RancherもかなりvSphere環境と相性がよくぱぱっと作れるのでおすすめです。

あと、ドキュメントがかなり充実しているイメージがあります。

なかなか案件で使うことはないのですが、LonghornのようなStorage Classも充実しており、k8sを学ぶ上ではかなり使いやすい製品になっているかと思います。

Longhornや、Cluster上に乗せるアプリケーションなどの話についてもまた投稿できたらと思います。

それではいいクリスマスを！