可用性の高い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)によって署名された独自の証明書を使用したりするなど、証明書を管理およびデプロイするためのその他の方法があります。これらのその他のメソッドは、このチュートリアルには含まれていません。

前提条件

このチュートリアルのステップを実行するためのホストシステムについては、このセクションを参照してください。必要な情報:

オペレータ・ノードの設定

オペレータ・ノードは、環境のデプロイメント(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形式である必要があります。次の変更のみが必要です。

このチュートリアルのこの構成ファイルのファイル名は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   ...

詳細情報

その他の学習リソース

docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルでさらに無料の学習コンテンツにアクセスします。さらに、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerにします。

製品ドキュメントは、Oracleヘルプ・センターを参照してください。