はじめに
こちらは エーピーコミュニケーションズ Advent Calendar 2021 12日目の記事となります。
2021年11月からエーピーコミュニケーションズに入ったmiyukといいます。
1日目にRancherの記事があったので、私もRancherの記事を書いてみました。
Rancher Serverの構築自体は、本アドベントカレンダー1日目の記事や私の過去記事を参照ください。
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サーバを配置しています。
vSphere環境でのRancher Server構築は過去記事を参照。
構築
全体の流れは下記の通り
- RKE VMテンプレート作成
- Cloud CredentialsとNode Templateの作成
- Clusterのデプロイ
1. RKE VMテンプレート作成
vCenterがRancher Clusterを作成するときに必要なテンプレートを作成します。
過去では、Rancherが用意していたRancherOS
というものをそのまま使うことができていましたが、今は自分でテンプレートを作成する必要があるようです。
自分でコツコツテンプレートを作成してもいいですが、面倒なのでPackerを使って作成しました。
Packer自体のインストールは割愛しますが公式の手順見てもらえればすぐにインストールできます。
Packerでビルドするイメージ情報については下記レポジトリがRancher用でよく使われているのでこちらのubuntu_2004
イメージを利用しました。
レポジトリをダウンロードして以下ファイルを作成・修正。
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に記載するものと同じ)"
}
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
あとはpacker build
をするとbuildされたVMテンプレートがvCenterに保存されます。
packer build -var-file=variables.json ubuntu-2004.json
インターフェースが複数あると、Packerは一番優先度が高いインターフェースをVMテンプレートに教えてしまうため、cloud-initが失敗する可能性があります。
対処としては、packer buildを実行するときに他のインターフェースを無効化するか、ubuntu-2004.jsonのboot_commandでhttpの宛先を指定してあげてください。
2. Cloud CredentialsとNode Templateの作成
Clusterをデプロイするために必要なコンフィグを事前定義しておきます。
コンフィグはRancher ServerにログインしてCluster Management
に移動すると項目が見つかります。
Cloud Credentials
Node Template
基本はvCenterから必要な情報を候補として提示してくれるので迷うことはないかと思います。
赤枠の部分を設定して、他はデフォルトのままでOKです。
3. Clusterのデプロイ
準備が整ったら、Clusterをデプロイします。
こちらも先ほど作成したコンフィグを読み込むだけで基本はデフォルトのままで大丈夫です。
今回はMasterとWorkerについては、別に分けていますが検証であれば同じノードでもOK。
10分ほどすると、デプロイが完了!
※デプロイしすぎて、連番がおかしくなっていますが空いている若い番号を使うようになっています。
以上でRancher Clusterがデプロイ完了です。
おわりに
今回は、すでに作成しているRancher Serverに対してRancher Clusterを作成してみました。
最近だと、VMware環境使っているところはTKG使うことが多くなるのかと思いますが、RancherもかなりvSphere環境と相性がよくぱぱっと作れるのでおすすめです。
あと、ドキュメントがかなり充実しているイメージがあります。
なかなか案件で使うことはないのですが、LonghornのようなStorage Classも充実しており、k8sを学ぶ上ではかなり使いやすい製品になっているかと思います。
Longhornや、Cluster上に乗せるアプリケーションなどの話についてもまた投稿できたらと思います。
それではいいクリスマスを!