Rancher入門:Rancher Serverの構築

はじめに

サイオステクノロジーの塚田です。Rancher入門ブログシリーズとして、前回はRancherの概要について説明しました。今回はAWS上にRancherを構築する方法について解説します。この記事では、Terraform、RKE2、Helmといったツールを使用して、AWS環境にRancherを簡単に構築する方法をステップバイステップで紹介します。

構築する環境のアーキテクチャは以下の通りです:

構成要素

  • リージョン: us-east-1
  • VPC:
    • CIDR範囲: 10.0.0.0/16
    • Public Subnet:
      • 10.0.0.0/24
      • 10.0.1.0/24
      • 10.0.2.0/24
  • Network Load Balancer (NLB):
    • Rancherへの外部アクセスを負荷分散します。
  • EC2インスタンス:
    • Control Planeノードとして3台を構成し、それぞれRKE2を使用したKubernetesとRancherをホストします。
    • OS: Ubuntu 24.04 LTS
    • インスタンスタイプ: t3.xlarge※1
  • セキュリティグループ:
    • ノード間通信が行えるよう必要なポートを開放します。

※1: 最低要件はt3.medium相当ですが、本記事では余裕を持たせて最低要件から2倍程度のインスタンスタイプを採用しています。

本記事のゴール

  • AWS環境の準備:
    • Terraformを用いて、AWS上に必要なリソース(VPC、サブネット、NLB、EC2インスタンスなど)を自動的に構築します。
  • Kubernetesクラスターの構築:
    • RKE2※2を使用して、高可用性を備えたKubernetesクラスターをセットアップします。
    • 今回構築するのは検証用なので、Control PlaneとWorker Nodeを兼用します。
  • Rancherのインストール:
    • Helmを利用してRancherをデプロイし、Kubernetesクラスター管理用のダッシュボードを利用できるようにします。

※2 RKE2とは:
Rancher Labsが開発したKubernetesディストリビューション
https://docs.rke2.io/

事前準備

構築を始める前に、以下の要件を満たしていることを確認してください:

  • AWSアカウント:
    • 適切な権限を持つIAMユーザーを用意してください。
    • 本記事ではAdministratorAccessを利用しています。
  • ローカル環境にインストールが必要なツール:
    • Terraform: v1.5.0以上

前提条件

KubernetesおよびRancherのバージョン

本記事で使用するソフトウェアのバージョンは以下の通りです:

  • Kubernetes (RKE2): v1.30.6+rke2r1
  • Rancher Server: v2.10※3
  • cert-manager: v1.16.1(SSL証明書管理用)※4

※3: 本記事執筆時点での最新バージョン

※4: RancherはHTTPSを使用して動作するため、SSL証明書を管理するツールとしてcert-managerが必要です。

ハードウェア要件

EC2インスタンス最低スペック:

  • CPU: 2コア以上
  • メモリ: 4GB以上
  • ストレージ: 20GB以上の空き容量

構築手順

 AWSリソースの作成

まずはterraformを利用して、Kubernetesクラスター構築に必要なリソースをAWS環境上に作成します。

  1. デモ用リポジトリからterraformのコードをクローンします。
    $ git clone git@github.com:Eiji-Tsukada-sti/rancher_demo.git
    $ cd rancher_demo
  2. terraformを実行します。
    # terraformを初期化
    $ terraform init
    
    # terraformで作成するリソースを確認
    $ terraform plan
    
    # AWSにデプロイ
    $ terraform apply

terraformのoutputより、以下の情報を確認してください。

  • initial_server_public_ip: 初回構築用インスタンスのIPアドレス
  • instance_public_ips: 全インスタンスのIPアドレスリスト
  • nlb_dns_name: NLBのDNS名

Kubernetesクラスターの構築(RKE2)

上記の手順で作成した各インスタンスにログインし、RKE2を利用してKubernetesクラスターを構築していきます。

初期サーバーの構築

RKE2公式ドキュメントの「High Avalilability」の内容に基づき、Control Plane3台構成で冗長化した構築を行います。設定ファイルの内容が1台目と2台目以降で異なるため、分けて記載します。

  1. EC2インスタンスにSSH接続します。
    秘密鍵はterraform実行時にterraformのコードと同じ階層に作成されます。
    また、接続先のIPアドレスはterraformデプロイ完了時に出力されるinitial_server_public_ipの値を使用してください。
    $ ssh -i rancher_demo_instance_key.pem ubuntu@<INITIAL_SERVER_PUBLIC_IP>
  2. 冗長構成用の設定ファイルを作成します。
    $ sudo mkdir -p /etc/rancher/rke2
    $ sudo vi /etc/rancher/rke2/config.yaml

    config.yamlに以下の内容を記載します。
    YOUR_TOKENは任意の文字列を使用可能です。

    /etc/rancher/rke2/config.yaml

    token: <YOUR_TOKEN>
    tls-san:
      - <INITIAL_SERVER_PUBLIC_IP>
  3. RKE2をインストールします。
    $ curl -sfL https://get.rke2.io | sudo sh -
  4. RKE2のサービスを起動します。
    $ sudo systemctl enable rke2-server.service
    $ sudo systemctl start rke2-server.service
  5. RKE2のサービスの状態がActiveになっていることを確認します。
    $ sudo systemctl status rke2-server.service
  6. インスタンス内でkubectlコマンドを実行できるよう設定します。kubectl自体はRKE2のインストール内容に含まれています。
    $ sudo chown ubuntu:ubuntu /etc/rancher/rke2/rke2.yaml
    $ sudo chmod 644 /etc/rancher/rke2/rke2.yaml
    $ sudo ln -s /var/lib/rancher/rke2/bin/kubectl /usr/local/bin/
    $ sudo mkdir ~/.kube
    $ sudo ln -s /etc/rancher/rke2/rke2.yaml ~/.kube/config
  7. kubectlコマンドでノード情報を取得し、ノードのステータスがReadyになっていることを確認します。
    $ kubectl get nodes

残りのサーバーの構築

続いて、残りのインスタンスにRKE2を導入します。基本的な手順は1台目と同じですが、/etc/rancher/rke2/config.yamlの記載内容が1台目と異なります。

  1. EC2インスタンスにSSH接続します。
    秘密鍵はterraform実行時にterraformのコードと同じ階層上に生成されます。
    接続先のIPアドレスはterraformデプロイ完了時に出力されるisntance_public_ipsの値のうち、残りの2つを使用してください。
    $ ssh -i rancher_demo_instance_key.pem ubuntu@<INSTANCE_PUBLIC_IP>

  2. 冗長構成用の設定ファイルを作成します。
    $ sudo mkdir -p /etc/rancher/rke2
    $ sudo vi /etc/rancher/rke2/config.yaml

    config.yamlに以下の内容を記述します。2台目以降は”server”を追加します。

    server: https://<INITIAL_SERVER_PUBLIC_IP>:9345
    token: <YOUR_TOKEN>
    tls-san:
      - <INITIAL_SERVER_PUBLIC_IP>
  3. 初期サーバーと同じ手順でRKE2をインストール・設定します。
  4. すべてのNodeのステータスがReadyで、RoleがControl Planeになっていることを確認します。
    $ kubectl get nodes

3台のノードがControl Planeとして起動していることを確認したら、クラスターの構築は完了です。

config.yaml について

config.yaml は、RKE2の動作を設定するためのファイルです。このファイルには、ノード間の通信や認証に必要な情報、クラスターの冗長構成を実現するための設定が含まれます。

具体的には以下の内容を設定します:

  • server:クラスターに参加するために使用される接続先サーバー。
  • token:クラスター内でノードを認証するためのトークン。全てのノードで共通。
  • tls-san:サーバーのTLS証明書に追加のホスト名またはIPv4/IPv6アドレスをSubject Alternative Namesとして追加する。

Rancherのインストール

構築したクラスターにRancherをデプロイします。インストールする方法は様々な手段がありますが、本記事ではもっとも簡単なHelmを利用してインストールする方法を採用しています。なお、この手順は3台のインスタンスの内、いずれか1つに実施すれば問題ありませんが、本記事では最初の1台目で実施します。

cert-managerのインストール

Rancherは、クラスターへのセキュアなアクセスを確保するためHTTPSが必須です。そのため、SSL証明書を簡単に管理できるcert-managerを事前にインストールします。

  1. EC2インスタンスにSSH接続します。
    $ ssh -i rancher_demo_instance_key.pem ubuntu@<INITIAL_SERVER_PUBLIC_IP>
  2. Helmをインストールします。
    $ sudo curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  3. cert-managerのHelmリポジトリを追加します。
    $ helm repo add jetstack https://charts.jetstack.io
    $ helm repo update
  4. cert-managerをインストールします。
    $ helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set crds.enabled=true --version v1.16.1
  5. cert-managerのPodが正常に起動しているか確認します。
    $ kubectl get pod -n cert-manager

Rancherのインストール

cert-managerの準備が完了したら、Rancherをインストールします。

  1. RancherのHelmリポジトリを追加
    $ helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
    $ helm repo update

  2. Rancherをインストールします。
    $ helm install rancher rancher-latest/rancher \
    --namespace cattle-system \
    --create-namespace \
    --set hostname=<NLB_DNS_NAME> \
    --set replicas=3 \
    --set bootstrapPassword=<YOUR_INITIAL_PASSWORD> \
    --set ingress.tls.source=letsEncrypt \
    --set letsEncrypt.email=<YOUR_EMAIL>
  3. RancherのPodが起動していることを確認します。起動が完了するまで数分程度かかります。
    $ kubectl get pod -n cattle-system
  4. ブラウザにNLBのドメインを入力してアクセスします。もし、アクセスできない場合はrancherのPodの起動が完了していない可能性があるので、Podのステータスを確認してください。
  5. RancherのUIに初回アクセスすると、初回パスワードの入力を要求されます。Helmのvalueとして設定したbootstrapPasswordの値を入力します。2回目以降のログインではRancherが自動生成した「New Password」を使うので、控えておいてください。

    初回ログイン時はユーザーネームを要求されませんが、2回目以降のログイン時はユーザーネームの入力が必要です。デフォルトのユーザーネームは「admin」です。
  6. 利用規約に同意する(By checking the box~…の箇所)にチェックを入れて、「Continue」を押下します。
  7. Rancherのホーム画面に遷移したことを確認します。構築が正常に完了していると、Rancherが稼働しているクラスター自身(画面内のlocalという名称のクラスター)が管理対象として登録されています。
  8. サイドバーからlocalクラスターを選択すると、クラスターの詳細情報を見ることができます。

これでRancherの構築は完了です。RancherのUI画面から、クラスターや各種リソースの管理を開始できます。

構築時のトラブルシューティング

RKE2のサービスが起動しない

RKE2のサービス (rke2-server.service) が正常に起動しない場合、以下の点を確認してください。

必要なポートが開放されていない

RKE2クラスターが正常に稼働するには、必要なポートが開放されている必要があります。ポートが開放されていない場合、サービスの起動が失敗します。

例:サービス起動失敗時のログ
Nov 18 02:45:11 ip-10-1-2-193 rke2[66864]: time=”2024-11-18T02:45:11Z” level=fatal msg=”etcd cluster join failed: duplicate node name found, please use a unique name for this node”
Nov 18 02:45:11 ip-10-1-2-193 systemd[1]: rke2-server.service: Main process exited, code=exited, status=1/FAILURE

対処方法:

  • セキュリティグループの設定を見直し、RKE2の稼働に必要なポートが開放されているか確認してください。
  • Rancherの稼働に必要なポート要件については、公式ドキュメントPort RequirementsページのPorts for Rancher Server Nodes on RKE2を参照してください。

※RKE2だけではなく、Rancherの起動時にも利用するポート開放の設定は影響します。また、RKE2以外のディストリビューションでRancher用のKubernetesクラスターを構築した場合は、必要なポートが異なります。詳しくは、公式ドキュメント「Port Requirements」のRancher Nodesの項目を参照してください。

config.yamlの設定ミス

/etc/rancher/rke2/config.yaml の設定に誤りがあると、RKE2が正常に接続できず、サービスの起動に失敗する場合があります。特に、server パラメーターの設定ミスが原因で接続に失敗するケースがよく見られます。

対処方法:

  • config.yaml に記載されている server パラメーターの記述が正しいか確認してください。特に、初期サーバーのIPアドレスやポート番号(9345)を間違えないように注意してください。
  • token がクラスター全体で一致していることを確認してください。

まとめ

今回の記事では、公式ドキュメントを参考に、AWS環境上にRKE2を利用してKubernetesクラスターを構築し、その上にRancher Serverを導入する手順を解説しました。Rancherを活用することで、クラスターの管理や運用を効率的に行える基盤を構築することができます。また、RancherはRKE2だけではなく、EKSなどのマネージドKubernetesサービスを含む他のKubernetesクラスターにも導入が可能なので、多様な運用要件に柔軟に対応することができます。
次回の記事では、今回構築したRancher Serverを活用して、マルチクラスターを管理する方法について解説します。複数のKubernetesクラスターを一元管理し、より高度な運用を行うための手法をご紹介しますので、ぜひご期待ください。

参考文献

RKE2のインストール(冗長構成)
Rancher Serverのインストール

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です