LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック
サービス・製品 | 

TerraformによるRed Hat OpenShift on IBM Cloudの構築

昨今急速にクラウドの普及が進み、その中でクラウドをより効果的に活用するために「クラウドネイティブ」という考え方が定義されました。kubernetesやOpenShift等、クラウドネイティブを実現する様々なソフトウェアやサービスが出てきましたが、クラウドネイティブを実現するにはそれらのサービスをクラウド上で組み合わせることが必要です。

クラウドのお陰でインフラの構築は格段に楽になりましたが、手軽な分サービスの数が大幅に増え、構築や管理にかかる負荷が増大しています。クラウドネイティブなシステムを実現するには、クラウドのシステムを自動化することで、少ない労力でより確実性の高いシステムの構築を目指していく必要があります。

そこで、Infrastructure as Code(IaC)によるインフラの構築・管理を行うTerraformは有効な解決策となります。TerraformによるRed Hat OpenShift on IBM Cloudの構築を行うことでクラウドネイティブの第一歩を踏み出して頂きたいと考えて今回の記事を執筆しました。

それでは本題に入る前に、まずIBM Cloudと、OpenShiftについて簡単にご説明します。

IBM Cloudとは

IBM Cloudとは、IBMが提供するパブリッククラウドで、長年エンタープライズ分野で培ってきたIBMの技術やIBM製品の多くをクラウド環境でも利用できることが特徴です。たとえば、IBMのAIとして有名なWatsonや、今回構築するOpenShiftも、AWSに先駆けてIBM CloudでRed Hat OpenShift on IBM Cloudとして提供されました。

OpenShiftとは

クラウドネイティブではコンテナ化が前提になっており、Dockerによってコンテナの普及が進みました。Dockerだけでは多数のコンテナの管理が困難という課題がありましたが、kubernetesの登場でコンテナ管理の仕組みも整ってきました。

kubernetesはクラウドネイティブの中でも特に重要なソフトウェアに位置づけられており、現在も非常に速いスピードで進化を遂げています。kubernetes自体は非常に優れた製品なのですが、進化のスピードに伴うサポート期間の短期化やスキル習熟の難易度の上昇によって、導入を検討したものの断念するといった企業も出てきました。OpenShiftはサポートの長期対応やOpenShift独自の機能による管理のしやすさ、セキュリティも強化したkubernetesのエンタープライズ版と言えます。OpenShiftを利用することでクラウドネイティブにも取り組みやすくなりました。

TerraformによるRed Hat OpenShift on IBM Cloudの構築

それでは、早速本題に移りたいと思います。今回構築するリソースの構成図は以下の通りです。なお、構築の流れを把握することが目的なのでリソースをシンプルなシングル構成にして、単一のリージョンやゾーンに配置しています。実運用で使用する場合は、リソースの冗長化や、配置するリージョンやゾーンを検討する必要があります。

TerraformによるRed Hat OpenShift on IBM Cloudの構築の構成図

※ 注意事項:本記事に掲載しているtfファイルは内容が古くなっている場合があります。実際に構築を行う際は公式リファレンスを参照して最新の情報を取得して下さい。
Docs overview | IBM-Cloud/ibm | Terraform Registry

providerの設定

IBM Cloudに対してTerraformを実行するためにproviderの設定を行います。providerの設定は利用するクラウドごとに行う必要があります。今回はOpenShiftを東京リージョンに仮想プライベート・クラウド(VPC)第2世代(Gen2)で作成するために以下のprovider.tfを作成しました。

provider.tf

terraform {
  required_providers {
    ibm = {
      source  = "IBM Cloud/ibm"
      version = "~> 1.12.0"
    }
  }
}
variable "IBM Cloud_api_key" {}
provider "ibm" {
  IBM Cloud_api_key = var.IBM Cloud_api_key
  generation       = 2
  region           = "jp-tok"
}

リソースグループ用tfファイルの作成

IBM Cloudでは、リソースグループを利用することでアクセス権限の制御ができます。最初からdefaultリソースグループが存在していますが、権限分離の観点からdefaultリソースは使用せず、新たにリソースグループを作成して、今回作成するリソースを割り当てます。

rg.tf

resource "ibm_resource_group" "rg-lic" {
  name = "rg-lic"
}

VPC用tfファイルの作成

今回は仮想プライベート・クラウド(VPC)第2世代(Gen2)上にOpenShiftを構築するので、VPCリソースを作成します。また、ゾーンごとに1つのサブネットが必要になるため、サブネットを作成します。パブリックゲートウェイを作成することで、パブリックなインターネットにアクセスできます。OpenShiftの構築に必須ではありませんが、今後インターネット上からOpenShift用アプリケーションをダウンロードするためにパブリックゲートウェイを作成します。インターネットにアクセスすることは便利である反面、さまざまな脅威にさらされるので十分に注意をして設定を行ってください。

vpc.tf

resource "ibm_is_vpc" "vpc-lic" {
  name           = "vpc-lic"
  resource_group = ibm_resource_group.rg-lic.id
}
resource "ibm_is_subnet" "sub-lic" {
  name            = "sub-lic"
  resource_group  = ibm_resource_group.rg-lic.id
  vpc             = ibm_is_vpc.vpc-lic.id
  zone            = "jp-tok-1"
  ipv4_cidr_block = "10.xx.0.0/24"
  public_gateway  = ibm_is_public_gateway.pgw-lic.id
}
resource "ibm_is_public_gateway" "pgw-lic" {
  name           = "pgw-lic"
  resource_group = ibm_resource_group.rg-lic.id
  vpc            = ibm_is_vpc.vpc-lic.id
  zone           = "jp-tok-1"
}

ICOS用tfファイルの作成

OpenShiftはコンテナイメージの格納先として内部レジストリを利用できます。Red Hat OpenShift on IBM Cloudでは内部レジストリ用のリソースとしてIBM Cloud Object Storage(ICOS)のインスタンスが必要になります。そのためにICOSインスタンスを作成します。

icos.tf

resource "ibm_resource_instance" "icos-ins-openshift-lic" {
  name              = "icos-ins-openshift-lic"
  resource_group_id = ibm_resource_group.rg-lic.id
  service           = "cloud-object-storage"
  plan              = "standard"
  location          = "global"
}

OpenShift用tfファイルの作成

OpenShiftに必要な前提リソースのtfファイルの準備ができましたので、実際のOpenShift用のtfファイルを作成していきます。OpenShiftバージョンは2021年5月22日時点で最新の"4.6.23"を指定します。今回は構築の検証が目的なのでワーカノードの種類(flavor)や数(worker_count)はできるだけ低価格なものを選択していきます。

openshift.tf

resource "ibm_container_vpc_cluster" "openshift-lic" {
  name              = "openshift-lic"
  resource_group_id = ibm_resource_group.rg-lic.id
  vpc_id            = ibm_is_vpc.vpc-lic.id
  kube_version      = "4.6.23_openshift"
  flavor            = "bx2.4x16"
  worker_count      = "2"
  cos_instance_crn  = ibm_resource_instance.icos-ins-openshift-lic.id
  zones {
    subnet_id = ibm_is_subnet.sub-lic.id
    name      = ibm_is_subnet.sub-lic.zone
  }
}

OpenShiftの構築

OpenShift構築に必要な全てのtfファイルが作成できたので、実際にTerraformでOpenShiftを構築していきます。まず初めにTerraformの初期化を行います。

terraform init

問題がなければ以下の様な表示が出力されます。

Initializing the backend...
Initializing provider plugins...
- Reusing previous version of IBM Cloud/ibm from the dependency lock file
- Using previously-installed IBM Cloud/ibm v1.12.0
Terraform has been successfully initialized!

次に作成したtfファイルから構築されるリソースを確認(dry-run)します。

terraform plan

以下の様な表示が出力されます。tfファイルに問題がある場合、ここでエラーとなるのでtfファイルの見直しを行います。terraform planが成功した場合でも必ず出力結果が想定通りであるかを確認して下さい。不必要なリソースが作成されていると、セキュリティ上の問題や不必要な課金が発生するので、ここでの事前確認が重要となります。

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create
Terraform will perform the following actions:
  # ibm_container_vpc_cluster.openshift-lic will be created
  + resource "ibm_container_vpc_cluster" "openshift-lic" {
      + albs                            = (known after apply)
省略
Plan: 6 to add, 0 to change, 0 to destroy.

事前確認に問題がなければ、実際にTerraformでリソース作成を行います。

terraform apply

再度作成するリソースが表示されるので確認を行い、問題がなければ"Enter a value: "に"yes"を入力して、Enterキーを押して下さい。実際にリソース作成が進んでいきます。Terraformがtfファイルに従いリソースを作成します。後は待っているだけでOpenShiftの構築が完了します。

used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create
Terraform will perform the following actions:
  # ibm_container_vpc_cluster.openshift-lic will be created
  + resource "ibm_container_vpc_cluster" "openshift-lic" {
      + albs                            = (known after apply)
省略
Plan: 6 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.
  Enter a value: yes
省略
ibm_resource_group.rg-lic: Creating...
ibm_resource_group.rg-lic: Creation complete after 4s [id=xxxxxxxxxxxx]
ibm_is_vpc.vpc-lic: Creating...
省略
Apply complete! Resources: 6 added, 0 changed, 0 destroyed.

全てのリソースが問題なく作成されると"Apply complete!"が表示されます。

OpenShiftの確認

構築したOpenShiftを確認してみたいと思います。IBM Cloudにブラウザでアクセスし、左上のナビゲーションメニュー → OpenShift → クラスター → 作成したクラスターを選択することでOpenShiftが確認できます。

右上の「OpenShift Web コンソール」ボタンをクリックしてみましょう。

作成したクラスターを選択してOpenShiftを確認、右上の「OpenShift Web コンソール」ボタンをクリック

OpenShiftのWebコンソールが表示されました。問題なくOpenShiftが構築できました。

OpenShiftのWebコンソールが表示

OpenShiftの削除

問題なくOpenShiftの構築が確認できたので、最後にTerraformによるOpenShiftの削除を行います。

terraform destroy
lic: Refreshing state... [id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]
ibm_is_vpc.vpc-lic: Refreshing state... [id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]
省略
Plan: 0 to add, 0 to change, 6 to destroy.
Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.
  Enter a value: yes
省略
ibm_resource_group.rg-lic: Destruction complete after 3s
Destroy complete! Resources: 6 destroyed.

OpenShift削除後の確認

IBM Cloudの画面から確認してみましょう。OpenShiftが削除されたことが確認できました。

IBM Cloudの画面からOpenShiftが削除されたことを確認

最後に

今回は、TerraformによるRed Hat OpenShift on IBM Cloudの構築から削除までをご覧頂きました。今回行ったOpenShiftの構築はIBM Cloud上の画面からGUIでも実施できます。GUIで構築すればtfファイルの作成も必要なく、画面の指示に従って容易に作成が可能です。

なぜTerraformで作成を行うのだろうかと疑問に持たれる方もいるかもしれません。IaCやTerraformのメリットは、作成するリソースを正確に管理できる点があります。今回作成したリソースをIBM Cloud上で確認しようとすると、複数個所のリソースを画面遷移しながら確認する必要が出てきます。tfファイルがあれば全てのリソースを一括で確認できますし、tfファイルをそのまま同僚や上司に共有することでレビューすることも可能です。

また、Terraformは今回行ったリソースの削除時にも有効です。クラウドはリソースに応じて料金が発生します。不要になったリソースは必ず削除する必要があります。OpenShiftを削除した際に、同時に作成したVPCやICOSの削除を忘れた場合には、使っていないリソースに対しても料金が発生してしまいます。Terraformを使っていれば、作成した全てのリソース削除が正確かつ容易に行えます。

今回はIBM Cloudを利用してTerraformによるOpenShift構築をご紹介しましたが、ラックはクラウドの種類を問わずTerraformを利用したクラウド構築・管理を行っています。Terraformによるクラウド構築・管理を行いたいというご要望がありましたら、ぜひラックにお問い合わせください。

「Terraformによるクラウド構築・管理」に関するお問い合わせ

この記事は役に立ちましたか?

はい いいえ