ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
異なる容量タイプでのOCI Kubernetesエンジンの管理とプリエンプティブル・ノードでの一般的な問題の解決
イントロダクション
デジタルトランスフォーメーションの各サイクルを経て、企業は革新と反復を続け、インフラストラクチャ、アプリケーション、管理に可能な限界を大規模に押し上げます。インフラストラクチャおよびアプリケーション管理をサポートするために使用される、より新しく広く採用されているテクノロジの1つは、Kubernetesです。Kubernetesについてさらに詳しく調べる前に、まずコンテナの概念について調べてみる必要があります。
コンテナは、アプリケーションの信頼できる実行をサポートするために必要なランタイムおよびプログラム・ライブラリとともに、アプリケーション固有のコードのコレクションを含むソフトウェアのパッケージです。コンテナは、基礎となるサーバーのオペレーティング・システム(OS)内のユーザー・スペース内で実行するように構成されます。このアーキテクチャにより、コア・サービスと依存関係の分離により、アプリケーションの軽量なデプロイメントが可能になります。アプリケーション・コンテナ化の利点には、ワークロードの分離、リソースの効率性、スケーラビリティおよびフォルト・トレランスの改善があります。
コンテナのパワーと効率を大規模に活用するには、コンテナベースのデプロイメントをインタフェースまたは管理するための何らかのツールが必要です。Kubernetes (K8sとも呼ばれる)は、コンテナを実行、スケーリングおよびユーザーに配信できるサーバーのクラスタを作成することでコンテナ・デプロイメントを自動化するオープンソースのコンテナ・オーケストレーション・ツールです。Kubernetesクラスタ・アーキテクチャには、マスター・ノード(コントロール・プレーン)と複数のワーカー・ノードが含まれます。各ワーカーは、アプリケーションを提供するポッド(コンテナのコレクション)をホストします。
目的
- Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes EngineまたはOKE)と連携してさまざまな容量タイプに対応し、プリエンプティブルに関する一般的な問題を解決します。
前提条件
- 実行中のOCIテナンシおよびOKEクラスタへの管理者アクセス。
Oracleはコンテナ・テクノロジをどのように位置付けていますか。
OKEは、完全に管理されたスケーラブルで可用性の高いKubernetesサービスであり、コンテナ化されたアプリケーションをクラウドにデプロイするのに役立ちます。OKEは、OCIのお客様がコンピュート・リソース使用率を最適化して独自のワークロード要件を満たし、ワークロード要件の変化に迅速に対応できるようにします。OKEはシームレスなカスタマー・エクスペリエンスを提供し、比類のない価格性能、リソースの効率性、移植性、信頼性を提供します。OKEは、コンテナ・レジストリ、CI/CDフレームワーク、ネットワーキング・ソリューション、ストレージ・オプション、一流のセキュリティ機能など、様々なコンテナ・ライフサイクル管理製品とのいくつかの主要な統合を提供します。
OKEでは、クラスタタイプを基本クラスタまたは拡張クラスタのいずれかとして指定できます。基本クラスタは、OKEによって提供されるすべてのコア機能をサポートします。機能を強化するために、拡張クラスタは、仮想ノード、自己管理ノード、クラスタ・アドオン管理、より詳細なOracle Cloud Infrastructure Identity and Access Management (OCI IAM)構成など、使用可能なすべての機能をサポートします。
異なる容量タイプでの OKE
-
オンデマンド容量:オンデマンド容量は、特定のシェイプ・タイプの標準使用可能容量です。これはデフォルトのキャパシティ・タイプであり、使用した分に対して効果的に支払います。これは標準の選択肢ですが、シェイプのタイプとタイミングによっては、大規模なマルチインスタンス・ワークロードに対するこれらのリクエストの処理が困難な場合があります。
-
予約済容量:容量予約を使用して、OKE管理対象ノードをプロビジョニングできます。容量予約は、通常、計画メンテナンス、ユーザー需要の増加、ディザスタ・リカバリなどのイベントに影響を及ぼす本番中に、ビジネスクリティカルなワークロードに十分な空き容量を確保するために使用されます。容量予約ではSKU定価の85%のコストが発生しますが、予約済リソースはアクティブに使用されていません。容量予約を利用するには、まず容量予約オブジェクトを作成し、シェイプ・タイプおよびサイズとともにリージョン/可用性ドメインを指定する必要があります。容量予約が作成されたら、ノード・プールにノードをデプロイするときに、容量タイプとして特定の予約を指定できます。
-
プリエンプティブル容量: OKE管理対象ノードにプリエンプティブル・コンピュート・シェイプをプロビジョニングできるようになりました。プリエンプティブル・シェイプはコスト削減の源泉となる可能性があります(SKU定価から50%割引)。ただし、Oracleでは、優先度の高い需要が必要な場合に、これらのコンピュート・リソースを再利用する権利が維持されています。中断に耐えることができるステートレス・フォルト・トレラントなワークロードがある場合、プリエンプティブル・コンピュートが適切なオプションです。可視性のために、プリエンプティブル・コンピュートをデプロイするときにインスタンスが終了したときに通知されるように選択できます。OKEクラスタ内で、ノード・プールの予想される状態は、再利用されたインスタンスを置き換えるために新しいインスタンスを起動しようとします。
プリエンプティブル・ノード・プールおよびOnDemandノード・プールを使用したOKEデプロイメント
プリエンプティブルに関する既知の問題
OKEでプリエンプティブルを使用する場合、いくつかの既知の問題があります。
-
問題: NonRetryable BmcException: ComputeサービスでLaunchInstance操作によってエラーが返されました。(400、InvalidParameter、false) E3/E4プリエンプティブル・シェイプの作成時に、容量予約IDを持つプリエンプティブル・インスタンスを起動できません。
- 解決策:空の
<capacityreservationId>
およびプリエンプティブル・ワーカー・ノードがある既知のOKEバグがあります。配置構成セクションの一部として<capacityReservationId>
パラメータを渡さずに、Oracle Cloud Infrastructureコマンドライン・インタフェース(OCI CLI)またはterraformを使用してノード・プールを作成するときにプリエンプティブル容量を使用しようとすると、プリエンプティブル・ワーカー・ノードを作成できます。ただし、コンソールを使用してノード・プールを作成すると、空の<capacityReservationId>
がデフォルトで渡され、プリエンプティブル・シェイプを使用しようとするとエラーがスローされます。回避策は、配置構成で<capacityReservationId>
を明示的にnullに設定することです。
- 解決策:空の
-
問題: 2つのノード・プール(1つはプリエンプティブルを使用して、もう1つはオンデマンドを使用して)を使用し、優先度ベースのエクスパンダを自動スキャラに利用する場合。プリエンプティブル・ノード・プールの構成は、プリエンプティブル・ノード・プールが、プリエンプティブル容量のOutOfHostCapacityエラーのために異常と表示される場合に使用されるオンデマンド・ノード・プール・セットです。場合によっては、ノード・プールにノードが0の場合、プリエンプティブル・ノード・プールが異常であっても、クラスタ自動スキャラはオンデマンド・ノード・プールにフォールバックしません。
- 解決策:この設定は機能しますが、両方のノード・プールにそれぞれ1つ以上のノードがある場合にのみ機能します。
-
問題: コンソールからOKEプロビジョニング・ウィザードでプリエンプティブル容量を選択すると、使用可能なAMDシェイプはE3およびE4に制限されます。E5は表示されませんが、OKEではE5プリエンプティブル容量がサポートされています。
-
解決策: APIまたはCLIを使用して、プリエンプティブルE5シェイプで管理対象ノード・プールを作成します。
--node-shape VM.Standard.E5.Flex
-
タスク1: コマンドライン・インタフェース(CLI)を使用したE5プリエンプティブルOKEワーカー・ノードプールの作成ステップ
-
OCIコンソールにログインし、「サービス」メニューをクリックします。
-
「開発者サービス」に移動します。
-
「コンテナとアーティファクト」で、「Kubernetes Engine (OKE)」をクリックします。
-
「OCI Cloud Shell」をクリックして、CLIを表示します。
-
node-pool
OCID、compartment
OCID、subnet-id
、fault domain
、構成およびサイズを編集してから、テナンシで次のCLIコマンドを実行します。oci ce node-pool create --cluster-id ocid1.cluster.oc1.iad.aaaaaaaaxlokvt2r25b6dmdxxxxxxxxxxxxxxxxxkhdilj7kpehc5vke2ve5gq --compartment-id ocid1.compartment.oc1..aaaaaaaaqufgrkgzr4zb3dxxxxxxxxxxxxxxxxxxp7jx7yckglghxppfrui6a --name E5_Preemtible --node-shape VM.Standard.E5.Flex --placement-configs '[{"availabilityDomain": "FZyT:US-ASHBURN-AD-2", "preemptibleNodeConfig": {"preemptionAction":{"isPreserveBootVolume":true, "type": "TERMINATE"}}, "subnet-id": "ocid1.subnet.oc1.iad.aaaaaaaapmekowq4rqhu72xxxxxxxxxxxxxxxxxxxxtlkp4dmixebzhgrwdlmtteclq", "faultDomains":["FAULT-DOMAIN-1"]}]' --size 1 --node-image-id ocid1.image.oc1.iad.aaaaaaaajvtta4i5sq4xxxxxxxxxxxxxcskfxjwz4vwxz6ersmmax6q --node-shape-config '{"memoryInGBs": 6.0, "ocpus": 1.0}' --pod-subnet-ids '["ocid1.subnet.oc1.iad.aaaaaaaapmekowq4rqhxxxxxxxxxxxxxxxkp4dmixebzhgrwdlmtteclq"]'
これにより、ノード・プールを作成するための作業リクエストのOCIDが出力され、次の図に示すように、既存のクラスタにE5プリエンプティブル・ワーカー・ノードが作成されます。
関連リンク
承認
- 著者 - Payal Sharma (シニア・エンタープライズ・クラウド・アーキテクト)、Anthony Vernava IV (シニア・エンタープライズ・クラウド・アーキテクト)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Manage OCI Kubernetes Engine with Different Capacity Types and Resolve Common Issues on Preemptible Nodes
G19914-01
November 2024