OKEクラスタを作成するためのサンプルOpenTofuスクリプト
サンプル・スクリプトにより、次のものが作成されます:
クラスタの新しい仮想クラウド・ネットワーク(VCN)。
セキュリティ・リストが設定された2つのLoadBalancerサブネット。
セキュリティ・リストが設定された3つのワーカー・サブネット。
1つのノード・プールを持つKubernetesクラスタ。
kubectl
を使用したアクセスを許可するkubeconfig
ファイル。
PV使用のためのマウント・ターゲットとFSSベースの2つのファイルシステム(1つはドメイン・ホーム用、もう1つはデータベース・ボリューム用)。
ノードおよびネットワーク設定はSSHアクセスを許可するように構成され、クラスタ・ネットワーキング・ポリシーによってNodePortサービスの公開が許可されます。このクラスタは、テストおよび開発目的でのみ使用できます。提供されているOpenTofuスクリプトのサンプルは、より詳細なレビューを行わないかぎり、本番クラスタの作成には使用しないでください。
すべてのOCIコンテナ・エンジン・マスターは高可用性(HA)を備えており、ロード・バランサが前面に配置されています。
前提条件
OpenTofuスクリプトを使用する前に、次のことを確認してください:
- 目的のクラスタに十分なコンピュートおよびネットワーキング・リソースを備えた既存のテナンシがあります。
- OCI Container Engine for Kubernetesサービスがテナンシ・リソースを管理できるように、そのテナンシ内にIdentity and Access Managementポリシーが設定されています。
- そのテナンシ内にユーザーが定義されています。
- ここに記載されているように、OCI APIで使用するためにAPIキーが定義されています。
- クラスタ内のノードへのSSHアクセスを構成するためのSSHキー・ペアがあります。
- kubectlをインストールします。kubectlバージョンは、コントロール・プレーン・ノードで実行されているkubernetesバージョンの1マイナー・バージョン以内(古いバージョンまたは新しいバージョン)である必要があります。インストール手順については、ここを参照してください。
- OCI CLIをダウンロード、インストール、構成して使用できるようにしておく必要があります。インストール手順については、ここを参照してください。
oci.props.templateファイルをoci.propsにコピーし、次の必須値をすべて追加します:
user.ocid
: テナンシ・ユーザーのOCID - OCIコンソールのユーザー設定から取得できます。tfvars.filename
: 生成されたtfvarファイルのファイル名。okeclustername
: OCI Container Engine for Kubernetesクラスタの名前。tenancy.ocid
: ターゲット・テナンシのOCID。region
: ターゲット・テナンシのリージョンの名前。compartment.ocid
: ターゲット・コンパートメントのOCID。コンパートメントのOCIDを検索するには - https://docs.oracle.com/en-us/iaas/Content/GSG/Tasks/contactingsupport_topic-Finding_the_OCID_of_a_Compartment.htmcompartment.name
: ターゲット・コンパートメントの名前。ociapi.pubkey.fingerprint
: OCIユーザーの公開キーのフィンガープリント。ocipk.path
: APIキー・ペアの秘密キーへのAPI秘密キー・ローカル・パス。vcn.cidr.prefix
: VCN CIDRの接頭辞。サブネットを作成するときに使用します。ターゲット・コンパートメントで、使用可能なCIDRを見つけます。vcn.cidr
: VCNのフルCIDR。コンパートメント内で一意である必要があります。最初の2オクテットはvcn_cidr_prefixと一致する必要があります。nodepool.shape
: クラスタ・ノードの有効なOCI VMシェイプ。k8s.version
: Kubernetesのバージョン。nodepool.ssh.pubkey
: SSH公開キー(文字列としてのキー・コンテンツ)。nodepool.imagename
: ノード・プール作成用の有効なイメージOCID。イメージのOCIDを検索するには - https://docs.oracle.com/en-us/iaas/Content/ContEng/Reference/contengimagesshapes.htm#images__oke-imagestofu.installdir
: tofuバイナリをインストールする場所。
ノードのシェイプを変更するオプションのステップ。node-pool.tf
を編集します。
node_shape_config {
#Optional
memory_in_gbs = 48.0
ocpus = 4.0
}
クラスタにノードを追加するためのオプションのステップ(デフォルトでは2つのワーカー・ノードが作成されます)。vcn.tf
を変更してワーカー・サブネットを追加します:
resource "oci_core_subnet" "oke-subnet-worker-3" {
availability_domain = data.oci_identity_availability_domains.ADs.availability_domains[2]["name"]
cidr_block = "${var.vcn_cidr_prefix}.12.0/24"
display_name = "${var.cluster_name}-WorkerSubnet03"
dns_label = "workers03"
compartment_id = var.compartment_ocid
vcn_id = oci_core_virtual_network.oke-vcn.id
security_list_ids = [oci_core_security_list.oke-worker-security-list.id]
route_table_id = oci_core_virtual_network.oke-vcn.default_route_table_id
dhcp_options_id = oci_core_virtual_network.oke-vcn.default_dhcp_options_id
}
ワーカー・サブネットに対応するegress_security_rulesおよびingress_security_rulesを追加します:
egress_security_rules {
destination = "${var.vcn_cidr_prefix}.12.0/24"
protocol = "all"
stateless = true
}
ingress_security_rules {
stateless = true
protocol = "all"
source = "${var.vcn_cidr_prefix}.12.0/24"
}
node-pool.tf
subnet_idsを変更して、新しいワーカー・サブネットをプールに追加します。
subnet_ids = [oci_core_subnet.oke-subnet-worker-1.id, oci_core_subnet.oke-subnet-worker-2.id,
oci_core_subnet.oke-subnet-worker-3.id]
スクリプトを実行するには、次のコマンドを使用します:
$ kubernetes/oke/samples/opentofu/oke.create.sh oci.props
このスクリプトは、oci.propsファイルから値を収集し、次のステップを実行します:
- 指定された
oci.props
ファイルの値に基づいて、新しいtfvarsファイルを作成します。 - OSシステム(macOSまたはLinux)に基づいて、OpenTofu、OpenTofu OCIプロバイダに必要なすべてのバイナリをダウンロードしてインストールします。
- 構成を適用し、OpenTofuを使用してOKEクラスタを作成し、
oci.props
ファイルに定義されているokeclustername
プロパティに基づいてkubeconfigファイルを生成します。
oke.create.shスクリプトの出力。構成にエラーがある場合、出力は次のようになります:
If you ever set or change modules or backend configuration for tofu,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
\u2577
\u2502 Error: Reference to undeclared resource
\u2502
\u2502 on node-pool.tf line 12, in resource "oci_containerengine_node_pool" "fmw_node_pool":
\u2502 12: subnet_ids = [oci_core_subnet.oke-subnet-worker-1.id, oci_core_subnet.oke-subnet-worker-2.id, oci_core_subnet.oke-subnet-worker-3.id, oci_core_subnet.oke-subnet-worker-4.id, oci_core_subnet.oke-subnet-worker-5.id]
\u2502
\u2502 A managed resource "oci_core_subnet" "oke-subnet-worker-5" has not been declared in the root module.
\u2575
\u2577
\u2502 Error: Reference to undeclared resource
\u2502
\u2502 on node-pool.tf line 12, in resource "oci_containerengine_node_pool" "fmw_node_pool":
\u2502 12: subnet_ids = [oci_core_subnet.oke-subnet-worker-1.id, oci_core_subnet.oke-subnet-worker-2.id, oci_core_subnet.oke-subnet-worker-3.id, oci_core_subnet.oke-subnet-worker-4.id, oci_core_subnet.oke-subnet-worker-5.id]
\u2502
\u2502 A managed resource "oci_core_subnet" "oke-subnet-worker-5" has not been declared in the root module.
\u2575
クラスタが正常に作成された場合は、次の出力が表示されます:
cluster_id = "ocid1.cluster.oc1.phx.axxxxxxx.....jlxa"
fmw1_export_path = "/fmw1"
fmw1_fs_ocid = "ocid1.filesystem.oc1.phx.aaaxxxxxx....fuzaaaaa"
fmw2_export_path = "/fmw2"
fmw2_fs_ocid = "ocid1.filesystem.oc1.phx.aaaaxxxxx....xxxxxxaaaa"
fmw_mount_target_ip = "10.1.11.43"
Confirm access to cluster...
NotReady
echo '[ERROR] Some Nodes in the Cluster are not in the Ready Status , sleep 10s more ...
Status is Ready Iter [1/100]
- able to access cluster
okecluster6 cluster is up and running
クラスタにアクセスするには、KUBECONFIG環境変数を設定するか、oci.propsファイルに定義されているokeclusternameプロパティに基づいて生成されたkubeconfigファイルで--kubeconfigオプションを使用します。例: okeclustername6_kubeconfig
$ kubectl get nodes --kubeconfig=okecluster6_kubeconfig
NAME STATUS ROLES AGE VERSION
10.1.10.2 Ready node 2d11h v1.29.1
10.1.11.3 Ready node 2d11h v1.29.1
新規ノードを作成後にクラスタに追加するには、vcn.tfファイルおよびnode-pool.tfファイルを変更して、次のコマンドを実行します。
${tofu.installdir}/tofu plan -var-file=<tfvars.filename>
${tofu.installdir}/tofu apply -var-file=<tfvars.filename>
クラスタを削除するには、oke.delete.shスクリプトを実行します。現在のディレクトリからoci.propsファイルを読み取り、クラスタを削除します。
$ kubernetes/oke/samples/opentofu/oke.delete.sh oci.props
Helmfileを使用したOKEクラスタへのSOAのデプロイ
詳細な手順は、OracleSOASuite/helm-charts/README.mdを参照してください。
OCI NFSボリュームの静的プロビジョニング
SOAを使用する場合、ファイル・システムは、domain.storageセクションのvalues.yamlファイルで直接参照できます。例:
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でマウント・ターゲットがプロビジョニングされると、
Reported Size (GiB)
値は非常に大きくなります。OCIコンソールにログインしている場合、これはマウント・ターゲットのページで確認できます。領域要件チェックの結果、使用可能なディスク領域が多すぎると、アプリケーションのインストールに失敗します。OCIコンソールで、マウント・ターゲットの「レポートされたサイズ」パラメータの横にある小さな「鉛筆」アイコンをクリックして、このマウント・ターゲットを介してエクスポートされたファイル・システムによってレポートされる最大容量をギガバイト(GiB)で指定します。この設定では、格納できる実際のデータ量は制限されません。ファイル・システムのレポートされたサイズの設定については、ここを参照してください。