可用性の高いOracle Cloudネイティブ環境のデプロイ
イントロダクション
Oracle Cloud Native Environmentは、クラウド・ネイティブ・アプリケーションの開発および管理のための完全統合スイートである。Kubernetesモジュールはコア・モジュールです。コンテナのデプロイと管理に使用し、CRI-O、runCおよびKataコンテナを自動的にインストールして構成します。CRI-Oは、Kubernetesクラスタのコンテナ・ランタイムを管理します。このランタイムは、runCまたはKata Containersのいずれかです。
目的
このチュートリアルでは、可用性の高いKubernetesクラスタを使用してOracle Cloud Native Environmentリリース1.4をインストールおよび設定する方法を示します。
高可用性Kubernetesクラスタをデプロイする場合、クラスタの高可用性を有効にするためにロード・バランサを設定する必要があります。独自のロード・バランサ実装を使用することも、組込みロード・バランサを使用することもできます。このチュートリアルには、組込みロード・バランサを設定するステップが含まれています。
このチュートリアルでは、ノードとexternalIPs Kubernetesサービス間の通信を管理するために使用されるX.509プライベートCA証明書も構成します。HashiCorp Vaultシークレット・マネージャを使用したり、信頼できる認証局(CA)によって署名された独自の証明書を使用したりするなど、証明書を管理およびデプロイするためのその他の方法があります。これらのその他のメソッドは、このチュートリアルには含まれていません。
前提条件
このチュートリアルのステップを実行するためのホストシステムについては、このセクションを参照してください。必要な情報:
-
使用する6つの Oracle Linuxシステム:
-
オペレータノード
-
3つのKubernetesコントロール・プレーン・ノード
-
2つのKubernetes作業者用ノード
本番環境では、5つ以上のコントロール・プレーン・ノードと3つ以上のワーカー・ノードを持つクラスタを使用することをお薦めします。
-
-
プライマリ・コントロール・プレーン・ノードの仮想IPアドレス。このIPアドレスは、どのノードにも使用されていない必要があり、ロード・バランサによってプライマリ・コントローラとして割り当てられたコントロール・プレーン・ノードに動的に割り当てられます。
ヒント: Oracle Cloud Infrastructure仮想インスタンスにデプロイする場合は、コントロール・プレーン・ノードのVNICにセカンダリ・プライベートIPアドレスを割り当てて、仮想IPアドレスを作成できます。Kubernetesモジュールの作成時に、最初にこのコントロール・プレーン・ノードをリストしてください。このチュートリアルでは、
control1.example.comです。セカンダリ・プライベートIPアドレスの詳細は、Oracle Cloud Infrastructureドキュメンテーションを参照してください。 -
システムには、少なくとも次のいずれかが必要です。
-
Unbreakable Enterprise Kernel Release 6 (UEK R6)をインストールして実行する Oracle Linux 7 Update 5 (x86_64)
-
Unbreakable Enterprise Kernel Release 6 (UEK R6)をインストールして実行する Oracle Linux 8 Update 3 (x86_64)
-
-
システムには、次のパッケージのいずれかがインストールされている必要があります。
- Oracle Linux 7の場合は
oracle-olcne-release-el7 - Oracle Linux 8の場合は
oracle-olcne-release-el8
- Oracle Linux 7の場合は
-
システムは次の yumリポジトリを有効にしました。
Oracle Linux 7:
ol7_olcne14ol7_kvm_utilsol7_addonsol7_latestol7_UEKR6
Oracle Linux 8:
ol8_olcne14ol8_addonsol8_baseos_latestol8_appstreamol8_UEKR6
または、ULNでOracle Cloud Native Environmentチャネルを有効にします。Oracle Cloudネイティブ環境パッケージへのアクセスの有効化を参照してください。
-
Oracle Linux 7ノードには、Kubernetesコントロール・プレーンおよびワーカー・ノードで実行されているNetwork Time Protocol (NTP)サービスがあります。ネットワーク・タイム・サービスの設定を参照してください。
-
Kubernetesコントロール・プレーンおよびワーカー・ノードでスワップは無効です。「スワップの無効化」を参照してください。
-
システムには、必要なファイアウォール・ルールが構成されています。ファイアウォール・ルールの設定を参照してください。
-
システムには、Kubernetesコントロール・プレーンおよびワーカー・ノードに
br_netfilterカーネル・モジュールがロードされています。br_netfilter Moduleを参照してください。
オペレータ・ノードの設定
オペレータ・ノードは、環境のデプロイメント(Kubernetesクラスタのデプロイを含む)を実行および管理します。オペレータ・ノードは、Kubernetesクラスタ内のノードであっても、個別のホストであってもかまいません。このチュートリアルでは、オペレータノードは別のホストです。オペレータ・ノードに、Platform CLIとPlatform API Serverおよびユーティリティをインストールします。olcne-api-serverサービスを有効化しますが、起動しないでください。
Oracle Linux 7を使用している場合は、次の手順を実行します。
sudo yum install olcnectl olcne-api-server olcne-utils
sudo systemctl enable olcne-api-server.service
Oracle Linux 8を使用している場合は、次の手順を実行します。
sudo dnf install olcnectl olcne-api-server olcne-utils
sudo systemctl enable olcne-api-server.service
Kubernetesノードの設定
すべてのKubernetesコントロール・プレーンおよびワーカー・ノードでこれらのステップを実行します。プラットフォーム・エージェント・パッケージおよびユーティリティをインストールします。olcne-agentサービスを有効化します。起動しないでください。
Oracle Linux 7を使用している場合は、次の手順を実行します。
sudo yum install olcne-agent olcne-utils
sudo systemctl enable olcne-agent.service
Oracle Linux 8を使用している場合は、次の手順を実行します。
sudo dnf install olcne-agent olcne-utils
sudo systemctl enable olcne-agent.service
プロキシ・サーバーを使用する場合は、RI-Oで構成します。Kubernetesノードごとに、CRI-O systemd構成ディレクトリを作成します。そのディレクトリにproxy.confというファイルを作成して、プロキシ・サーバーの情報を追加します。
sudo mkdir /etc/systemd/system/crio.service.d
sudo vi /etc/systemd/system/crio.service.d/proxy.conf
proxy.confファイルの例を使用して、環境内のプロキシ値に適切な値を置き換えます。
[Service]
Environment="HTTP_PROXY=proxy.example.com:80"
Environment="HTTPS_PROXY=proxy.example.com:80"
Environment="NO_PROXY=.example.com,192.0.2.*"
dockerサービスが実行中の場合、または containerdサービスが実行中の場合は、それらを停止してから無効化してください。
sudo systemctl disable --now docker.service
sudo systemctl disable --now containerd.service
ロード・バランサ・ネットワークの設定
各Kubernetesコントロール・プレーン・ノードで次のステップを実行します。ポート6444を開き、仮想ルーター冗長プロトコル(VRRP)プロトコルを有効にします。
sudo firewall-cmd --add-port=6444/tcp --permanent
sudo firewall-cmd --add-protocol=vrrp --permanent
sudo systemctl restart firewalld.service
X.509プライベートCA証明書の設定
/etc/olcne/gen-certs-helper.shスクリプトを使用すると、プライベートCAとノード用の証明書を生成できます。オペレータ・ノードの/etc/olcneディレクトリからスクリプトを実行します。このスクリプトは、証明書ファイルを現在のディレクトリに保存します。--nodesオプションに続けて、証明書を作成するノードを指定します。Platform API Serverまたはプラットフォーム・エージェントを実行するノードごとに証明書を作成します。つまり、オペレータ・ノード用と、各Kubernetesノード用です。--cert-request*オプションを使用して、プライベートCA情報を指定します。例には、これらのオプションの一部が示されています。すべてのコマンド・オプションのリストは、gen-certs-helper.sh --helpコマンドを使用して取得できます。
--cert-request-common-nameオプションには、環境に適したドメインネームシステム(DNS)ドメイン名を指定します。--nodesオプション値には、演算子、コントロール・プレーンおよびワーカー・ノードの完全修飾ドメイン名(FQDN)を指定します。
cd /etc/olcne
sudo ./gen-certs-helper.sh \
--cert-request-organization-unit "My Company Unit" \
--cert-request-organization "My Company" \
--cert-request-locality "My Town" \
--cert-request-state "My State" \
--cert-request-country US \
--cert-request-common-name example.com \
--nodes operator.example.com,control1.example.com,control2.example.com,control3.example.com,worker1.example.com,worker2.example.com
証明書の転送
プライベートCAの生成に使用される/etc/olcne/gen-certs-helper.shスクリプトとノードの証明書は、オペレータ・ノードで実行されました。オペレータ・ノードにKubernetesコントロール・プレーンおよびワーカー・ノードへのパスワードなしのsshアクセス権があることを確認します(このチュートリアルでは示されていません)。オペレータ・ノードで次のコマンドを実行して、オペレータ・ノードからKubernetesノードに証明書を転送します。
bash -ex /etc/olcne/configs/certificates/olcne-tranfer-certs.sh
証明書を使用するためのプラットフォームAPIサーバーの構成
オペレータ・ノードで、次に示すように/etc/olcne/bootstrap-olcne.shスクリプトを実行して、証明書を使用するようにPlatform API Serverを構成します。または、HashiCorp Vaultによって管理される証明書を使用することもできます。このメソッドは、このチュートリアルには含まれていません。
sudo /etc/olcne/bootstrap-olcne.sh \
--secret-manager-type file \
--olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
--olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
--olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
--olcne-component api-server
証明書を使用するためのプラットフォームエージェントの構成
各Kubernetesノードで、次に示すように/etc/olcne/bootstrap-olcne.shスクリプトを実行して、証明書を使用するようにPlatform Agentを構成します。または、HashiCorp Vaultによって管理される証明書を使用することもできます。このメソッドは、このチュートリアルには含まれていません。
sudo /etc/olcne/bootstrap-olcne.sh \
--secret-manager-type file \
--olcne-node-cert-path /etc/olcne/configs/certificates/production/node.cert \
--olcne-ca-path /etc/olcne/configs/certificates/production/ca.cert \
--olcne-node-key-path /etc/olcne/configs/certificates/production/node.key \
--olcne-component agent
必要に応じてこのステップを繰り返して、このスクリプトを各Kubernetesノードで実行するようにします。
externalIPs Kubernetesサービスの証明書の設定
externalip-validation-webhook-service Kubernetesサービスでは、Kubernetesをデプロイする前にX.509証明書を設定する必要があります。gen-certs-helper.shスクリプトを使用して証明書を生成します。オペレータ・ノードで次を実行します。
cd /etc/olcne
sudo ./gen-certs-helper.sh \
--cert-dir /etc/olcne/configs/certificates/restrict_external_ip \
--cert-request-organization-unit "My Company Unit" \
--cert-request-organization "My Company" \
--cert-request-locality "My Town" \
--cert-request-state "My State" \
--cert-request-country US \
--cert-request-common-name cloud.example.com \
--nodes externalip-validation-webhook-service.externalip-validation-system.svc,externalip-validation-webhook-service.externalip-validation-system.svc.cluster.local \
--one-cert
olcnectlコマンドを実行するユーザーが、/etc/olcne/configs/certificates/restrict_external_ip/ディレクトリの所有者として設定されていることを確認します。この例では、ユーザーおよびグループはopc:opcです。
sudo chown -R opc:opc /etc/olcne/configs/certificates/restrict_external_ip/
デプロイメント構成ファイルの作成
オペレータ・ノードで、デプロイメントの構成ファイルを作成します。このファイルには、環境の作成とKubernetesモジュールのデプロイに必要なすべての情報が含まれます。
ここで提供されているサンプル・ファイルは、組込みロード・バランサを使用して高可用性クラスタを作成します。
virtual-ipオプションは、プライマリコントロールプレーンノードに使用される仮想IPアドレスを設定します。コントロール・プレーンおよびワーカー・ノードの完全修飾ドメイン名(FQDN)を指定する必要があります。
ノードのプライベートCAと証明書の場所は、globalsセクションに設定されます。また、Kubernetesモジュールのargsセクションで、externalip-validation-webhook-service Kubernetesサービスの証明書の場所を指定する必要があります。
構成ファイルは、次のようにYAML形式である必要があります。次の変更のみが必要です。
- コントロール・プレーン・ノードFQDNを反映する
master-nodesの値。 - ワーカー・ノードのFQDNを反映する
worker-nodesの値。 - プライマリ・コントロール・プレーン・ノードに使用される仮想IPアドレスを設定するための
virtual-ipの値。
このチュートリアルのこの構成ファイルのファイル名はmyenvironment.yamlです。
構成ファイルの作成方法の詳細は、構成ファイルの使用のドキュメントを参照してください。
environments:
- environment-name: myenvironment
globals:
api-server: 127.0.0.1:8091
secret-manager-type: file
olcne-ca-path: /etc/olcne/configs/certificates/production/ca.cert
olcne-node-cert-path: /etc/olcne/configs/certificates/production/node.cert
olcne-node-key-path: /etc/olcne/configs/certificates/production/node.key
modules:
- module: kubernetes
name: mycluster
args:
container-registry: container-registry.oracle.com/olcne
virtual-ip: 192.0.2.137
master-nodes:
- control1.example.com:8090
- control2.example.com:8090
- control3.example.com:8090
worker-nodes:
- worker1.example.com:8090
- worker2.example.com:8090
selinux: enforcing
restrict-service-externalip: true
restrict-service-externalip-ca-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/ca.cert
restrict-service-externalip-tls-cert: /etc/olcne/configs/certificates/restrict_external_ip/production/node.cert
restrict-service-externalip-tls-key: /etc/olcne/configs/certificates/restrict_external_ip/production/node.key
環境の作成
オペレータ・ノードで、olcnectl environment createコマンドを実行して環境を作成します。--config-fileオプションを使用して、作成した構成ファイルの場所を渡します。
olcnectl environment create --config-file myenvironment.yaml
Kubernetesモジュールの作成
オペレータ・ノードで、olcnectl module createコマンドを実行してKubernetesモジュールを作成します。
olcnectl module create --config-file myenvironment.yaml
Kubernetesモジュールの検証
オペレータ・ノードで、olcnectl module validateコマンドを使用して、Kubernetesモジュールをデプロイするためにノードが適切に構成されていることを検証します。この例では検証エラーはありません。エラーがある場合は、このコマンドの出力として、ノードを修正するために必要なコマンドが示されます。
olcnectl module validate --config-file myenvironment.yaml
Kubernetesモジュールのインストール
オペレータ・ノードで、olcnectl module installコマンドを使用して、Kubernetesモジュールを環境にデプロイします。
olcnectl module install --config-file myenvironment.yaml
ノードへのKubernetesのデプロイメントが完了するまでに数分かかる場合があります。
デプロイメントの検証
オペレータ・ノードで、Kubernetesモジュールがデプロイされ、ノードがolcnectl module instancesコマンドを使用して設定されていることを確認します。
olcnectl module instances --config-file myenvironment.yaml
出力は次のようになります。
INSTANCE MODULE STATE
control1.example.com:8090 node installed
control2.example.com:8090 node installed
control3.example.com:8090 node installed
worker1.example.com:8090 node installed
worker2.example.com:8090 node installed
mycluster kubernetes installed
kubectlの設定
コントロール・プレーン・ノードで、kubectlコマンドを設定します。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
echo 'export KUBECONFIG=$HOME/.kube/config' >> $HOME/.bashrc
kubectlコマンドが使用できることを確認します。
kubectl get nodes
出力は次のようになります。
NAME STATUS ROLES AGE VERSION
control1.example.com Ready control-plane,master 18m ...
control2.example.com Ready control-plane,master 18m ...
control3.example.com Ready control-plane,master 18m ...
worker1.example.com Ready <none> 18m ...
worker2.example.com Ready <none> 18m ...
詳細情報
- Oracle Cloud Native Environmentドキュメント
- Oracle Cloud Native Environmentトレーニング
- Oracle Linuxラーニング・サブスクリプション
- Oracle Linuxカリキュラム
その他の学習リソース
docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルでさらに無料の学習コンテンツにアクセスします。さらに、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerにします。
製品ドキュメントは、Oracleヘルプ・センターを参照してください。
Deploy a Highly Available Oracle Cloud Native Environment
F49729-03
February 2022
Copyright © 2021, Oracle and/or its affiliates.