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)で指定します。この設定では、格納できる実際のデータ量は制限されません。ファイル・システムのレポートされたサイズの設定については、ここを参照してください。