このトピックでは、Enterprise Distributed Application Service(EDAS)SDK for Javaを使用して、異なるAPI操作を呼び出すことでKubernetesクラスターをインポートおよび削除する方法について説明します。
前提条件
Kubernetesクラスターをインポートまたは削除する前に、以下の前提条件が満たされていることを確認してください。
EDAS SDK for Javaがインストールされていること。詳細については、「EDAS SDK for Javaを使用してEDAS APIを呼び出す」をご参照ください。
Kubernetesクラスターが存在するリージョンのIDを取得していること。この例では、リージョンIDは cn-hangzhou です。
Container Service for Kubernetes(ACK) コンソールでKubernetesクラスターが作成されていること。次のセクションでは、さまざまなタイプのクラスターを作成する方法について説明します。
EDASでACKクラスターを使用する場合は、ACK コンソールでACKマネージドクラスターまたはACK専用クラスターを作成します。詳細については、以下のトピックをご参照ください。
EDASでACK Serverless(ASK)クラスターを使用する場合は、ACK コンソールでASKクラスターを作成します。詳細については、「ACK Serverlessクラスターを作成する」をご参照ください。
ACKクラスターまたはASKクラスターがすでに作成されている場合は、GetK8sCluster オペレーションを呼び出して、ClusterId パラメーターで指定されたクラスターIDをクエリします。この例では、クラスターIDは da60f685-558a-4e00-b549-15e9143d**** です。
マイクロサービス名前空間が作成されていること。詳細については、「マイクロサービス名前空間を作成する」をご参照ください。
マイクロサービス名前空間が既に存在する場合は、ListUserDefineRegion オペレーションを呼び出して、カスタムマイクロサービス名前空間をクエリし、RegionId パラメーターからマイクロサービス名前空間の ID を取得できます。
EDASにおけるKubernetesクラスターの機能
EDASでは、ACK コンソールで作成したACK専用クラスター、ACKマネージドクラスター、および ACK Serverless(ASK)クラスターをインポートできます。3種類のクラスターの比較については、「ACKとは」をご参照ください。
EDASにインポートされたACK専用クラスターとACKマネージドクラスターは、EDASのACKクラスターに対応します。EDASにインポートされた ACK Serverlessクラスター は、EDASの ACK Serverless クラスターに対応します。
サードパーティクラウドにデプロイされたKubernetesクラスターやデータセンターにデプロイされた自己管理型KubernetesクラスターなどのハイブリッドクラウドクラスターをEDASにインポートする前に、ACK コンソールにクラスターを登録する必要があります。EDASにインポートされたハイブリッドクラウドクラスターは、EDASのACKクラスターに対応します。
ACK コンソールにハイブリッドクラウドクラスターを登録する方法については、「クラスター登録プロキシを作成し、データセンターにデプロイされたKubernetesクラスターを登録する」をご参照ください。
EDASで管理されるKubernetesクラスターは、自己管理型Kubernetesクラスターに比べて以下の利点があります。
クラウドネイティブKubernetesに加えて、EDASはアプリケーションホスティング機能を提供し、アプリケーションの観点からオープンソースのマイクロサービスガバナンスとKubernetesアプリケーションの軽量O&Mを実装します。
アプリケーション中心の観点から、EDASはデプロイメントやポッドなどのKubernetesネイティブワークロードを管理し、ゾーンをまたがるインスタンスの高可用性デプロイメントを提供します。
EDASは、トラフィック比率とリクエストパラメーターに基づいて、段階的リリースとカナリアリリースを提供します。EDASは変更プロセス全体を監視するため、変更記録を追跡できます。
EDASは主要なDevOpsシステムと統合されており、企業が継続的インテグレーション(CI)と継続的デリバリー(CD)を実装するのに役立ちます。このように、EDASは企業のコスト削減と効率向上に貢献します。
オープンソースのマイクロサービスシステムに加えて、過去5年間で市販されているSpring CloudおよびDubboフレームワークに基づいて構築したマイクロサービス指向アプリケーションを、コードを変更することなくEDASに移行できます。EDASは、すべてのアプリケーションフレームワークに対して以下のマイクロサービスガバナンス機能をサポートしています。
アプリケーションリリース中のグレースフルシャットダウンとストレステスト
アプリケーションランタイム中のサービス認証、スロットリングとデグレード、および外れ値の排除
アプリケーションO&Mにおけるサービスのクエリとテスト
Alibaba Cloudは、アプリケーションの運用セキュリティのオブザーバビリティ、カナリアリリース、およびロールバックをサポートするという考え方をサービスにパッケージ化しているため、運用セキュリティをすぐに実装できます。
オブザーバビリティ:アプリケーションの概要、リリース変更記録、およびリリースレポートの自動生成に基づいて、多次元でのエンドツーエンドの監視が実装されます。
カナリアリリース:トラフィック比率またはリクエストコンテンツポリシー設定に基づいて、アプリケーションのカナリアリリースがサポートされています。
ロールバック:リリースプロセス中にワンクリックロールバックがサポートされており、実行中のアプリケーションを以前のバージョンにロールバックできます。
Kubernetesクラスターをインポートする
次のコードは、指定された名前空間にKubernetesクラスターをインポートする方法の例を示しています。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.edas.model.v20170801.ImportK8sClusterRequest;
import com.aliyuncs.edas.model.v20170801.ImportK8sClusterResponse;
public class ImportK8sCluster {
public static void main(String[] args) {
// Alibaba CloudアカウントのAccessKeyペアは、すべてのAPI操作に対する権限を持っています。これらの資格情報を使用してEDASで操作を実行することは、リスクの高い操作です。セキュリティリスクを回避するために、Resource Access Management(RAM)ユーザーを使用してAPI操作を呼び出したり、日常的なO&Mを実行することをお勧めします。RAMコンソールにログインしてRAMユーザーを作成できます。
// この例では、AccessKey IDとAccessKeyシークレットは環境変数に格納されています。ビジネス要件に基づいて、構成ファイルにAccessKey IDとAccessKeyシークレットを保存できます。
// キーの漏洩を防ぐために、コードにAccessKey IDとAccessKeyシークレットを保存しないことをお勧めします。
String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
// Kubernetesクラスターが存在するリージョンのID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
// APIリクエストを作成し、関連パラメーターを設定します。
ImportK8sClusterRequest request = new ImportK8sClusterRequest();
// KubernetesクラスターのID。
request.setClusterId("da60f685-558a-4e00-b549-15e9143d****");
// Kubernetesクラスターをインポートするマイクロサービス名前空間。
request.setNamespaceId("cn-hangzhou:doc");
// クラスターにサービスメッシュをインストールするかどうかを指定します。有効な値:trueとfalse。trueの値は、サービスメッシュがインストールされていることを指定します。falseの値は、サービスメッシュがインストールされていないことを指定します。
request.setEnableAsm(true);
try {
ImportK8sClusterResponse response = client.getAcsResponse(request);
System.out.println("Data=" + response.getData() + "\nMessage=" + response.getMessage()+ "\nRequestId=" + response.getRequestId());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}サンプルコードを実行すると、次の結果が返されます。
Data=4d45f6db-2942-4747-a7ba-b0d43273****
Message=success
RequestId=847CF607-B352-4A71-828A-C0F8DECDEDF6クラスターのインポートをキャンセルする
次のコードは、クラスターのインポートをキャンセルする方法の例を示しています。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.edas.model.v20170801.DeleteClusterRequest;
import com.aliyuncs.edas.model.v20170801.DeleteClusterResponse;
public class DeleteCluster {
public static void main(String[] args) {
// Alibaba CloudアカウントのAccessKeyペアは、すべてのAPI操作に対する権限を持っています。これらの資格情報を使用してEDASで操作を実行することは、リスクの高い操作です。セキュリティリスクを回避するために、RAMユーザーを使用してAPI操作を呼び出したり、日常的なO&Mを実行することをお勧めします。RAMコンソールにログインしてRAMユーザーを作成できます。
// この例では、AccessKey IDとAccessKeyシークレットは環境変数に格納されています。ビジネス要件に基づいて、構成ファイルにAccessKey IDとAccessKeyシークレットを保存できます。
// キーの漏洩を防ぐために、コードにAccessKey IDとAccessKeyシークレットを保存しないことをお勧めします。
String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
// Kubernetesクラスターが存在するリージョンのID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
// APIリクエストを作成し、関連パラメーターを設定します。
DeleteClusterRequest request = new DeleteClusterRequest();
// KubernetesクラスターのID。
request.setClusterId("da60f685-558a-4e00-b549-15e9143d****");
try {
DeleteClusterResponse response = client.getAcsResponse(request);
System.out.println("Data=" + response.getData() + "\nMessage=" + response.getMessage()+ "\nRequestId=" + response.getRequestId());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}サンプルコードを実行すると、次の結果が返されます。
Data=true
Message=success
RequestId=68CDDEC0-593E-4C1A-9CDC-96F9FEF0924E結果を確認する
Kubernetesクラスターをインポートまたはインポートをキャンセルした後、GetK8sCluster オペレーションを呼び出して、返された結果の ClusterImportStatus パメーターで指定されたインポート状態をクエリします。
GetK8sCluster オペレーションを呼び出した後、次の結果が返されます。
{
"RequestId": "809FCC08-FFE1-417D-8ADF-F5D5BFD968D7",
"Message": "success",
"ClusterPage": {
"ClusterList": {
"Cluster": [
{
"ClusterImportStatus": 1,
"NodeNum": 6,
"ClusterId": "da60f685-558a-4e00-b549-15e9143d****",
......
},
{
"ClusterImportStatus": 0,
"NodeNum": 3,
"ClusterId": "6dca9bc0-b928-4f2c-ae76-396bd108****",
......
}
]
},
"PageSize": 12,
"CurrentPage": 0,
"TotalSize": 12
},
"Code": 200
}ClusterImportStatus パラメーターの値に基づいて、クラスターがインポートされたか、クラスターのインポートがキャンセルされたかを確認します。ClusterImportStatus パラメーターの有効な値:
0:クラスターはインポートされていません。
1:クラスターはインポートされています。
2:クラスターのインポートに失敗しました。
3:クラスターはインポート中です。
4:クラスターは削除されています。