Oracle Cloud Native Environment向けOpenTofu

このリポジトリは、OpenTofuを使用してOCNEとそのサブコンポーネントをOCIにデプロイするためのモジュール化された方法の最上位レベルです。各サブモジュールは、OCNEデプロイメントの特定の部分に重点を置いており、ユーザーはデプロイする特定の構成を選択できます。

このモジュールは、次のリソースの作成に役立ちます:

  • OCNE APIサーバー: OCNE APIサーバーは、コントロール・プレーンおよびワーカー・ノードで実行されているOCNEエージェントを編成して、Kubernetesおよびその他のOCNEモジュールのインストールを実行します。
  • コントロール・プレーン・ノード: Kubernetesクラスタのコントロール・プレーン・ノードのコンピュート・インスタンス。
  • ワーカー・ノード: Kubernetesクラスタのワーカー・ノードのコンピュート・インスタンス。
  • マウント・ターゲット: 永続ボリューム(PV)の使用にFSSを使用するマウント・ターゲットと2つのファイル・システム。1つはドメイン・ホーム用、もう1つはデータベース・ボリューム用です。
  • 要塞サーバー: 要塞サーバーは、ネットワーク内のプライベート・マシンにアクセスするためのセキュアなゲートウェイとして機能します。

高度なデプロイメント・オプション

このモジュールでは、いくつかの即時利用可能な共通デプロイメント・シナリオがサポートされています。これらのシナリオは、次の関連する各モジュールの説明に重複して記載する必要がないように、ここにリストされています:

  • 専用コンピュート・インスタンス上のOCNE APIサーバー。
  • デフォルトのネットワークを指定してデプロイメントを構築します。
  • これらのモジュールが新しいネットワークを作成および構成できるようにします。
  • OpenSSLを使用して、証明書を生成し、各ノードに配布します。

前提条件

これらのOpenTofuスクリプトを使用するには、次の点が維持されていることを確認します:

  • 目的のクラスタに十分なコンピュートおよびネットワーキング・リソースを備えた既存のテナンシ。
  • OCI Container Engine for Kubernetesサービスがテナンシ・リソースを管理できるように、そのテナンシ内に設定されているIdentity and Access Managementポリシー。
  • そのテナンシ内で定義されたユーザー。
  • OCI APIで使用するために定義されたAPIキー(ここを参照)。
  • クラスタ内のノードへのSSHアクセスを構成するためのSSHキー・ペア
  • OCI CLIをダウンロード、インストール、構成して使用できるようにします。インストール手順については、ここを参照してください。

terraform.tfvars.templateファイル変数の概要

名前 説明
tenancy_id テナンシのOCID。値を取得するには、テナンシのOCIDとユーザーのOCIDを取得する場所を参照してください。
compartment_id コンパートメントのOCID。
user_id OpenTofuがOCIリソースの作成に使用するユーザーのOCID。値を取得するには、テナンシのOCIDとユーザーのOCIDを取得する場所を参照してください。
fingerprint キー・ペアのフィンガープリント。値を取得するには、キーのフィンガープリントの取得方法を参照してください。
api_private_key_path

OCI APIで認証するためにOCIユーザーが使用する秘密キーへのパス。キーを作成および構成する方法の詳細は、API署名キーの生成方法および公開キーのアップロード方法を参照してください。

region リソースが作成されるOCIリージョン。値を取得するには、リージョンおよび可用性ドメインを参照してください。
availability_domain_id デプロイメントを作成するためのregion内の可用性ドメインのID。
prefix デプロイメントの一部として作成されるすべてのOCNEリソースの名前にアタッチする一意の接頭辞。
ssh_private_key_path このデプロイメントの一部として作成されたコンピュート・リソースにアクセスするときに使用されるSSH公開キーとともに使用されるSSH秘密キー・パス。キーを生成するには、Oracle Compute Cloud ServiceインスタンスのSSHキー・ペアの生成を参照してください。
ssh_public_key_path このデプロイメントの一部として作成されたコンピュート・リソースへのアクセスを構成するときに使用するSSH公開キー・パス。キーを生成するには、Oracle Compute Cloud ServiceインスタンスのSSHキー・ペアの生成を参照してください。
control_plane_node_count デプロイするKubernetesコントロール・プレーン・ノードの数。推奨ワーカー・ノード数を表示するには、Kubernetes高可用性の要件を参照してください。
worker_node_count デプロイするKubernetesワーカー・ノードの数。推奨ワーカー・ノード数を表示するには、Kubernetes高可用性の要件を参照してください。
os_version このデプロイメントの一部であるすべてのコンピュート・リソースのベース・イメージとして使用するOracle Linuxのバージョン。
environment_name モジュール・インスタンスをデプロイするためにこのモジュールによって作成されるOCNE環境の名前。詳細は、環境の作成を参照してください。
kubernetes_name このデプロイメントの一部としてインストールされるOCNE Kubernetesモジュールのインスタンスの名前。詳細は、Kubernetesモジュールの作成を参照してください。
ocne_version デプロイするOCNEのバージョンおよびリリース。バージョンの詳細は、OCNEリリース・ノートを参照してください。最新のパッチ・バージョンの<major.minor>をインストールするには、値を<major.minor>に設定するか、値を<major.minor.patch>に設定して特定のパッチ・バージョンをインストールしてください。
config_file_path OCNE構成ファイルのパス。構成ファイルの詳細は、OCNE構成ファイルを参照してください。

環境のデプロイ

「Oracle SOA Suiteドメインをデプロイするためのコード・リポジトリの設定」を参照し、デプロイメント・スクリプトを設定します。

$WORKDIR/ocne/samples/opentofuにある提供されているoci.props.templateファイルをoci.propsにコピーし、必要な値をすべて追加します:

スクリプトを実行するには、次のコマンドを使用します:

$ $WORKDIR/ocne/samples/opentofu/ocne.create.sh oci.props

このスクリプトは、oci.propsファイルから値を収集し、次のステップを実行します:

  • 指定されたoci.propsファイルの値に基づいて、新しいtfvarsファイルを作成します。
  • OpenTofu、yqおよびjqツールに必要なすべてのバイナリをダウンロードしてインストールします。
  • 構成を適用し、OpenTofuを使用してOCNE環境を作成し、kubeconfigファイルを生成します。

OCNE環境が正常に作成されると、ocne.create.shによって次の出力が表示されます

api_private_key_path = "/home/user1/.oci/oci_api_key.pem"
apiserver_ip = "10.0.0.33"
availability_domain_id = "PJzM:PHX-AD-2"
bastion_private_key_path = "/home/user1/.ssh/id_rsa"
bastion_public_ip = "129.xxx.xxx.xx"
bastion_user = "opc"
compartment_id = "ocid1.compartment.oc1..aaaaaaaaq6xxxxxxx....4a"
config_file_path = ""
container_registry = "container-registry.oracle.com/olcne"
control_plane_node_count = 1
control_plane_nodes = tolist([
  "10.0.0.155",
])
environment_name = "myenvironment"
extra_cas = tolist([])
fingerprint = "a6:c8:xx:xx:xx:xx..:XX"
fmw1_export_path = "/fmw1"
fmw1_fs_ocid = "ocid1.filesystem.oc1.phx.aaaaaaaaaaj7vxxxxxx...aa"
fmw2_export_path = "/fmw2"
fmw2_fs_ocid = "ocid1.filesystem.oc1.phx.aaaaaaaaaaxxxxxx...aaaa"
freeform_tags = tomap({})
image_ocid = "ocid1.image.oc1.phx.aaaaaaaahgrsxxxxx...cq"
instance_shape = tomap({
  "memory" = "32"
  "ocpus" = "2"
  "shape" = "VM.Standard.E4.Flex"
})
key_ocid = ""
kube_apiserver_endpoint_ip = "10.0.0.207"
kube_apiserver_port = "6443"
kube_apiserver_virtual_ip = ""
kubernetes_name = "mycluster"
load_balancer_ip = "10.0.0.207"
load_balancer_policy = "LEAST_CONNECTIONS"
load_balancer_shape = tomap({
  "flex_max" = "50"
  "flex_min" = "10"
  "shape" = "flexible"
})
mount_target_ip = "10.0.0.128"
ocne_secret_name = "vk1-ocne_keys"
ocne_vault_client_token = ""
ocne_version = "1.9"
os_version = "8"
prefix = "vk1"
provision_mode = "OCNE"
provision_modes_map = {
  "provision_mode_infrastucture" = "Infrastructure"
  "provision_mode_ocne" = "OCNE"
}
proxy = ""
region = "us-phoenix-1"
secret_name = "vk1-vault_keys"
ssh_private_key_path = "/home/user1/.ssh/id_rsa"
standalone_api_server = true
subnet_id = "ocid1.subnet.oc1.phx.aaaaaaaas77xxxxxxx...wq"
tenancy_id = "ocid1.tenancy.oc1..aaaaaaaxxxxx......bmffq"
use_vault = false
user_id = "ocid1.user.oc1..aaaaaaxxxxxxx.....sya"
vault_ha_storage_bucket = ""
vault_instances = []
vault_namespace = ""
vault_ocid = ""
vault_pool_size = 1
vault_storage_bucket = ""
vault_uri = ""
vault_version = "1.3.4"
vcn_id = "ocid1.vcn.oc1.phx.amaaaaaxxxxxx....kq"
worker_node_count = 1
worker_nodes = [
  "10.0.0.76",
]
yum_repo_url = "http://yum.oracle.com/repo/OracleLinux/OL8/olcne16/x86_64"
kubeconfig file successfully created in /home/user1/ocne_env/opentofu.

OCNE環境を削除するには、ocne.delete.shスクリプトを実行します。現在のディレクトリからoci.propsファイルを読み取り、クラスタを削除します。

$ $WORKDIR/ocne/samples/opentofu/ocne.delete.sh oci.props

Tofuを使用して構成されたOCNE環境へのOracle Cloud Infrastructure Cloud Controller Manager Module(OCI-CCM)のインストール

Oracle Cloud Infrastructure Cloud Controller Managerモジュールは、Oracle Cloud Infrastructureストレージのプロビジョニングに使用されます。インストール・ステップの詳細は、ここを参照してください。

Oracle Cloud Infrastructure Cloud Controller Managerモジュールを作成し、--oci-ccm-kubernetes-moduleオプションを使用してmyclusterという名前のKubernetesモジュールに関連付けます。この例では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールの名前はmyociです。

Tofu構成を使用してOCNE環境を正常に作成した後、コンソール出力からvcnおよびサブネットの詳細を取得できます。プラットフォームAPIサーバー・ノード(OCNEオペレータ・ノード)にログインし、次のステップを実行します。例:

Tofu構成を使用してOCNE環境を正常に作成したら、コンソール出力からvcnおよびサブネットの詳細を取得できます。または、tofuを実行して、tofu出力からvcnおよびサブネットIDを取得できます。次に、プラットフォームAPIサーバー・ノード(OCNEオペレータ・ノード)にログインし、次のステップに従います。例:

# The path to the node certificate(IP refers to the operator/platform API server node).
export OLCNE_SM_CA_PATH=/home/opc/.olcne/certificates/10.0.0.137\:8091/ca.cert

# The path to the Certificate Authority certificate. 
export OLCNE_SM_CERT_PATH=/home/opc/.olcne/certificates/10.0.0.137\:8091/node.cert

# The path to the key for the node's certificate. 
export OLCNE_SM_KEY_PATH=/home/opc/.olcne/certificates/10.0.0.137\:8091/node.key

olcnectl module create \
--environment-name myenvironment \
--module oci-ccm \
--name myoci \
--oci-ccm-kubernetes-module mycluster \
--oci-region us-ashburn-1 \
--oci-tenancy ocid1.tenancy.oc1..unique_ID \
--oci-compartment ocid1.compartment.oc1..unique_ID \
--oci-user ocid1.user.oc1..unique_ID \
--oci-fingerprint b5:52:... \
--oci-private-key-file /home/opc/.oci/oci_api_key.pem \
--oci-vcn ocid1.vcn.oc1..unique_ID \
--oci-lb-subnet1 ocid1.subnet.oc1..unique_ID 

olcnectl module installコマンドを使用して、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをインストールします。例:

olcnectl module install \
--environment-name myenvironment \
--name myoci

olcnectlモジュール・インスタンスを使用してOracle Cloud Infrastructure Cloud Controller Managerモジュールがデプロイされていることを確認します。例:

olcnectl module instances \
--environment-name myenvironment

INSTANCE        MODULE          STATE
10.0.0.24:8090  node            installed
10.0.0.199:8090 node            installed
mycluster       kubernetes      installed
myoci           oci-ccm         installed


[opc@vk-api-server-001 ~]$ kubectl get nodes --kubeconfig=kubeconfig.myenvironment.mycluster
NAME                   STATUS   ROLES           AGE   VERSION
vk-control-plane-001   Ready    control-plane   17m   v1.29.3+3.el8
vk-worker-001          Ready    <none>          17m   v1.29.3+3.el8

状態ファイル用のオブジェクト・ストレージの使用

オブジェクト・ストレージの状態ファイルを使用するには、OCIでAWS S3互換APIキーを作成する必要があります。これは、OCI UIとCLIの両方から実行できます。詳細は、状態ファイル用のオブジェクト・ストレージの使用を参照してください。開始するには、state_backend.tf.exampleの名前をstate_backend.tfに変更し、適切な変数を入力します。S3バックエンドの変数定義は、OpenTofu S3バックエンド・ドキュメントにあります。

Helmfileを使用したOCNEクラスタへのSOAのデプロイ

詳細な手順については、OracleSOASuite/helm-charts/README.mdを参照してください。

OCI NFSボリュームの静的プロビジョニング:

SOAを使用する場合、ファイル・システムは、values.yamlファイルのdomain.storageセクションで直接参照できます。例:

   storage:
     capacity: 10Gi
     reclaimPolicy: Retain
     type: nfs 
     path: /fmw1   #Export Path
     nfs:
      server: 10.0.10.156 #Mount Target IP Address

DB使用の場合、ファイル・システム(FS)およびマウント・ターゲットIPを使用した永続ボリューム(PV)定義の例を次に示します:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: fmw2-pv-db
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: fss.csi.oraclecloud.com
    volumeHandle: "<OCID of the file system>:<Mount Target IP Address>:/<Export Path>"

作成されたPVをボリュームとして使用するようvalues.yamlファイルのoracledb.persistenceセクションを更新します。例:

   persistence:
     storageClass: ""
     size: 10Gi
     accessMode: "ReadWriteOnce"
     volumeName: "fmw2-pv-db"

ノート:

  • 前述の構成ファイルのvolumeHandleの例:
    volumeHandle:
              "ocid1.filesystem.oc1.phx.aaaaanoxxxxx....aaaa:10.0.10.156:/fmw2"
  • クラスタが正常に作成されたら、コンソール出力からvolumeHandleの詳細を取得します。
  • OCIでマウント・ターゲットがプロビジョニングされると、そのレポート・サイズ(GiB)値は非常に大きくなります。OCIコンソールにログインしている場合、これはマウント・ターゲットのページで確認できます。領域要件チェックの結果、使用可能なディスク領域が多すぎると、アプリケーションのインストールに失敗します。OCIコンソールで、マウント・ターゲットの「レポートされたサイズ」パラメータの横にある小さな「鉛筆」アイコンをクリックして、このマウント・ターゲットを介してエクスポートされたファイル・システムによってレポートされる最大容量をギガバイト(GiB)で指定します。この設定では、格納できる実際のデータ量は制限されません。ファイル・システムのレポートされたサイズの設定については、ここを参照してください。