このトピックでは、`saectl` ツールの使用方法と一般的なコマンドについて説明し、ツールの迅速な導入を支援します。
前提条件
`saectl` ツールがインストールされ、AccessKey ID、AccessKey Secret、およびアプリケーションのデプロイリージョンが設定されていること。詳細については、「saectl ツールのインストールと設定」をご参照ください。
Kubernetes YAML ファイルから SAE YAML ファイルへの変換
Kubernetes にデプロイされたアプリケーションを SAE に移行するには、次の手順に従います。
次のコマンドを実行して、既存の Kubernetes YAML ファイルを SAE YAML ファイルに変換します。SAE YAML ファイルは SAE の仕様に準拠しており、Kubernetes の仕様とは異なります。
saectl convert -f <k8s-compliant-file.yaml> -o <sae-compliant-file.yaml> # <k8s-compliant-file.yaml>:既存の Kubernetes YAML ファイルの名前。 # <sae-compliant-file.yaml>:生成される SAE YAML ファイルの名前。次のコマンドを実行して、SAE YAML ファイルに基づいてアプリケーションを SAE にデプロイします。
saectl apply -f <sae-compliant-file.yaml> # <sae-compliant-file.yaml>:生成された SAE YAML ファイルの名前。エラーが発生した場合は、エラーメッセージに基づいて SAE YAML ファイルを手動で変更してください。その後、前の手順に戻り、コマンドを再度実行します。通常、エラーは次のいずれかのカテゴリに分類されます。
Kubernetes YAML ファイルでサポートされている一部のフィールドは、SAE YAML ファイルではサポートされていないか、特定のフォーマット要件があります。変換後、これらのフィールドを手動で削除または置換する必要があります。SAE YAML ファイルでサポートされているフィールドとフォーマット要件の詳細については、このディレクトリの他のトピックをご参照ください。
SAE YAML ファイルで必須の一部のフィールドが、Kubernetes YAML ファイルに存在しない場合があります。変換後、
${parameter_name}形式のプレースホルダーが表示され、フィールドの追加を促します。たとえば、${vpc-id}を実際の値に手動で置き換えるだけで済みます。この例では、SAE で名前空間を定義する際に VPC を関連付ける必要があります。元の Kubernetes YAML ファイルには${vpc-id}パラメーターが提供されていないため、手動で追加する必要があります。apiVersion: v1 kind: Namespace metadata: annotations: sae.aliyun.com/vpc-id: ${vpc-id} creationTimestamp: null labels: kubernetes.io/metadata.name: default name: nstest spec: {} status: {}
Kubernetes YAML ファイルで複数のリソースが定義されている場合、それらを同じファイルで定義できます。標準の Kubernetes の区切り文字である --- を使用してリソースを区切ります。`saectl` ツールは、これらをバッチで SAE YAML ファイルに変換できます。例:
apiVersion: apps/v1
kind: Deployment
# ... Deployment Definition ...
---
apiVersion: v1
kind: ConfigMap
# ... ConfigMap Definition ...
ただし、これらのリソースの作成が特定の実行順序に依存しないように注意してください。
たとえば、デプロイメントとそれに依存するサービスが同じ SAE YAML ファイルで定義されている場合、そのファイルを実行して両方のリソースを同時に作成しようとするとエラーが発生します。これは、サービスがデプロイメントの作成後にのみ作成できるためです。
デプロイメントとサービスは、別々の SAE YAML ファイルで定義する必要があります。まずデプロイメントを作成し、デプロイメントが作成された後にサービスを作成してください。
例 - saectl を使用した Nginx のデプロイ
docker-compose YAML ファイルから SAE YAML ファイルへの変換
Docker Compose を使用してデプロイされたアプリケーションを SAE に移行するには、次の手順に従います。
名前空間の管理
`saectl` ツールは、名前空間の作成、表示、削除をサポートしていますが、更新はサポートしていません。
名前空間の作成
namespace.yamlという名前のファイルを作成します。次のサンプルコードは、名前空間の構成を含むファイルの内容を示しています。apiVersion: v1 kind: Namespace metadata: annotations: sae.aliyun.com/vpc-id: ${vpc-id} # ${vpc-id} を、名前空間に関連付ける VPC の ID に置き換えます。フォーマットは vpc-xxxxxxxxxxxxxxxxxxxxx です。 name: ${namespace} # ${namespace} を名前空間名に置き換えます。 spec: {}namespace.yamlファイルがあるディレクトリで、次のコマンドを実行して名前空間を作成します。saectl apply -f namespace.yaml
名前空間の表示
次のコマンドを実行して、指定したアプリケーションのデプロイリージョンに存在する名前空間を表示します。
saectl get ns出力例は次のとおりです。
NAME STATUS REGION
default Active cn-beijing
testns Active cn-beijing次の表に、各フィールドの説明を示します。
フィールド | 説明 |
NAME | 名前空間の名前。`default` はデフォルトの名前空間を示します。 |
STATUS | 名前空間のステータス。`Active` は名前空間が利用可能であることを示します。 |
REGION | 名前空間が配置されているリージョン。 |
名前空間の削除
次のコマンドを実行して、指定した名前空間を削除します。
saectl delete ns ${namespace}
# ${namespace} は名前空間の名前です。アプリケーションの管理
`saectl` ツールは、アプリケーションの作成、表示、更新、削除をサポートしています。
アプリケーションの作成
deployment.yamlという名前のファイルを作成します。次のサンプルコードは、アプリケーションの構成を含むファイルの内容を示しています。apiVersion: apps/v1 kind: Deployment metadata: name: ${deployment-name} # ${deployment-name} をアプリケーション名に置き換えます。 spec: replicas: 2 # アプリケーションインスタンスの数。 selector: matchLabels: sae.aliyun.com/app-name: ${deployment-name} # ${deployment-name} をアプリケーション名に置き換えます。 template: metadata: labels: sae.aliyun.com/app-name: ${deployment-name} # ${deployment-name} をアプリケーション名に置き換えます。 spec: containers: - name: main # 競合を避けるためにコンテナー名を main に設定します。 image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 # この例では Nginx イメージを使用します。deployment.yamlファイルがあるディレクトリで、次のコマンドを実行してデフォルトの名前空間にアプリケーションを作成します。saectl apply -f deployment.yaml次のコマンドを実行して、作成したアプリケーションに関する情報を表示します。出力の STATE フィールドの値が RUNNING の場合、アプリケーションは実行中です。
saectl get deployment ${deployment-name} # ${deployment-name} はアプリケーション名です。次のコマンドを実行して、作成したアプリケーションのインスタンス情報を表示します。
saectl get pods -l sae.aliyun.com/app-name=${deployment-name} # ${deployment-name} はアプリケーション名です。
アプリケーションリストの表示
次のコマンドを実行して、指定した名前空間に存在するアプリケーションを表示します。
saectl get deployment -n ${namespace}
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。出力例は次のとおりです。
NAME READY AVAILABLE TYPE STATE LANGUAGE AGE
test-yaml 3/3 3 Image RUNNING java 6d1h
sc-c 2/2 2 Image RUNNING java 13d
sc-b 2/2 2 Image RUNNING java 13d
sc-a 1/1 1 Image RUNNING java 13d次の表に、各フィールドの説明を示します。
フィールド | 説明 |
NAME | アプリケーションの名前。 |
READY | 準備完了のアプリケーションインスタンス数 / 目的のターゲットインスタンス数。Ready は、インスタンスが readiness プローブチェックに合格したことを意味します。 |
AVAILABLE | 現在実行中のアプリケーションインスタンスの数。 |
TYPE | アプリケーションのデプロイメソッド。`Image` は、アプリケーションがイメージを使用してデプロイされたことを示します。 |
STATE | アプリケーションのステータス。`Running` は、アプリケーションが実行中であることを示します。 |
LANGUAGE | アプリケーションの技術スタック。 |
AGE | アプリケーションの稼働期間。 |
アプリケーション詳細の表示
get または describe コマンドを使用して、アプリケーションの詳細を表示できます。
get コマンドを使用したアプリケーション構成の表示
次のコマンドを実行して、アプリケーションの構成を表示します。
saectl get deployment ${deployment-name} -o yaml -n ${namespace}
# ${deployment-name} はアプリケーション名です。
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。describe コマンドを使用したアプリケーション詳細の表示
次のコマンドを実行して、アプリケーションの詳細を表示します。
saectl describe deployment ${deployment-name} -n ${namespace}
# ${deployment-name} はアプリケーション名です。
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。アプリケーションの更新
scale、edit、または apply コマンドを使用してアプリケーションを更新できます。
scale コマンドを使用したアプリケーションの手動スケーリング
次のコマンドを実行して、アプリケーションを手動でスケーリングします。
saectl scale deployment ${deployment-name} -n ${namespace} --replicas=${pod-num}
# ${deployment-name} はアプリケーション名です。
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。
# ${pod-num} は、目的のアプリケーションインスタンス数です。edit コマンドを使用したオンラインでのアプリケーション構成の編集
次のコマンドを実行します。指定したアプリケーションの構成が YAML ファイルで開きます。
saectl edit deployment ${deployment-name} -n ${namespace} # ${deployment-name} はアプリケーション名です。 # ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。開いた YAML ファイルで、必要に応じて構成を変更します。その後、ファイルを保存して閉じます。構成の変更が適用されるのを待ちます。
apply コマンドを使用した YAML 構成ファイルに基づくアプリケーションの更新
デプロイされたアプリケーションの deployment.yaml 構成ファイルを変更します。構成ファイルがあるディレクトリで、次のコマンドを実行して構成の変更を適用します。
saectl apply -f deployment.yamlアプリケーションの削除
次のコマンドを実行して、指定したアプリケーションを削除します。saectl delete deployment ${deployment-name} -n ${namespace} # ${deployment-name} はアプリケーション名です。 # ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。
saectl delete deployment ${deployment-name} -n ${namespace}
# ${deployment-name} はアプリケーション名です。
# ${namespace} は名前空間です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。Server Load Balancer (SLB) の管理
Server Load Balancer (SLB) は、Kubernetes のサービスリソースタイプに対応します。`saectl` ツールは、SLB インスタンスの作成、表示、更新、およびデタッチをサポートしています。
アプリケーション用の新しい SLB インスタンスの作成
svc.yamlという名前のファイルを作成します。次のサンプルコードは、SLB 構成を含むファイルの内容を示しています。apiVersion: v1 kind: Service metadata: name: internet-${deployment-name} # ${deployment-name} をアプリケーション名に置き換えます。 # internet はパブリック SLB インスタンスを指定します。イントラネット SLB インスタンスを指定するには、intranet に置き換えます。 spec: ports: - name: port-80 port: 80 # アプリケーションへのアクセスに使用するポート。必要に応じて実際のポートに置き換えます。 protocol: TCP targetPort: 80 # コンテナーが公開するポート。必要に応じて実際のポートに置き換えます。 selector: sae.aliyun.com/app-name: ${deployment-name} # ${deployment-name} をアプリケーション名に置き換えます。svc.yamlファイルがあるディレクトリで、次のコマンドを実行してアプリケーション用の新しい SLB インスタンスを作成します。saectl apply -f svc.yaml
既存の SLB インスタンスへのアプリケーションのアタッチ
svc.yamlという名前のファイルを作成します。次のサンプルコードは、SLB 構成を含むファイルの内容を示しています。apiVersion: v1 kind: Service metadata: annotations: sae.aliyun.com/loadbalancer-id: ${your-slb-id} # ${your-slb-id} を SLB ID に置き換えます。 name: internet-${deployment-name} # ${deployment-name} をアプリケーション名に置き換えます。 # internet はパブリック SLB インスタンスを指定します。イントラネット SLB インスタンスを指定するには、intranet に置き換えます。 spec: ports: - name: port-80 port: 80 # アプリケーションへのアクセスに使用するポート。必要に応じて実際のポートに置き換えます。 protocol: TCP targetPort: 80 # コンテナーが公開するポート。必要に応じて実際のポートに置き換えます。 selector: sae.aliyun.com/app-name: ${deployment-name} # ${deployment-name} をアプリケーション名に置き換えます。svc.yamlファイルがあるディレクトリで、次のコマンドを実行してアプリケーションを既存の SLB インスタンスにアタッチします。saectl apply -f svc.yaml
SLB インスタンスリストの表示
次のコマンドを実行して、既存の SLB インスタンスのリストを表示します。
saectl get service -l sae.aliyun.com/app-name=${deployment-name} -n ${namespace}
# ${deployment-name} はアプリケーション名です。-l パラメーターを使用してアプリケーション名を指定しない場合、デフォルトですべてのアプリケーションにアタッチされている SLB インスタンスが表示されます。
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。出力例は次のとおりです。
NAME TYPE EXTERNAL-IP PORT(S) BOUND AGE
internet-myapp LoadBalancer xxx.x.xx.xx 80/TCP myapp 6d20h
intranet-myapp LoadBalancer xx.xx.xxx.xx 80/TCP myapp 4d1h次の表に、各フィールドの説明を示します。
フィールド | 説明 |
NAME | サービスの名前。フォーマットは
|
TYPE | サービスの種類。`LoadBalancer` は SLB インスタンスを示します。 |
EXTERNAL-IP | SLB インスタンスの IP アドレス。 |
PORT(S) | SLB インスタンスのポートマッピング情報。 |
BOUND | SLB インスタンスがアタッチされているアプリケーションの名前。 |
AGE | サービスの稼働期間。 |
SLB インスタンス詳細の表示
次のコマンドを実行して、SLB インスタンスの構成を表示します。
saectl get service ${service-name} -n ${namespace} -o yaml
# ${service-name} はサービス名です。
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。SLB インスタンスの更新
edit または apply コマンドを使用して SLB インスタンスを更新できます。
edit コマンドを使用したオンラインでの SLB 構成の編集
次のコマンドを実行します。指定した SLB インスタンスの構成が YAML ファイルで開きます。
saectl edit service ${service-name} -n ${namespace} # ${service-name} はサービス名です。 # ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。開いた YAML ファイルで、必要に応じて構成を変更します。その後、ファイルを保存して閉じます。構成の変更が適用されるのを待ちます。
apply コマンドを使用した YAML 構成ファイルに基づく SLB インスタンスの更新
既存の SLB インスタンスの svc.yaml 構成ファイルを変更します。構成ファイルがあるディレクトリで、次のコマンドを実行して構成の変更を適用します。
saectl apply -f svc.yamlSLB インスタンスのデタッチ
次のコマンドを実行して、指定した SLB インスタンスをデタッチします。
saectl delete service ${service-name} -n ${namespace}
# ${service-name} はサービス名です。
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。ConfigMap の管理
`saectl` ツールは、ConfigMap の作成、表示、更新、削除をサポートしています。ConfigMap は、コンテナー内の環境変数として参照したり、ファイルとしてコンテナーにマウントしたりできます。
ConfigMap の作成
cm.yamlという名前のファイルを作成します。次のサンプルコードは、ConfigMap 構成を含むファイルの内容を示しています。apiVersion: v1 kind: ConfigMap metadata: name: database-configmap # ConfigMap の名前。 namespace: default # ConfigMap が配置されている名前空間。 data: # ConfigMap 内のキーと値のペア。 database: mysql database_uri: mysql://localhost:2309cm.yamlファイルがあるディレクトリで、次のコマンドを実行して、デフォルトの名前空間にdatabase-configmapという名前の ConfigMap を作成します。saectl apply -f cm.yaml
リージョン内の ConfigMap リストの表示
次のコマンドを実行して、リージョン内に存在する ConfigMap のリストを表示します。
saectl get configmap -A出力例は次のとおりです。
NAMESPACE NAME DATA AGE
default nacos 1 69d
test test-config 2 10d次の表に、各フィールドの説明を示します。
フィールド | 説明 |
NAMESPACE | ConfigMap が配置されている名前空間。 |
NAME | ConfigMap の名前。 |
DATA | ConfigMap 内のデータエントリ数。 |
AGE | ConfigMap の経過時間。 |
名前空間内の ConfigMap リストの表示
次のコマンドを実行して、名前空間内に存在する ConfigMap のリストを表示します。
saectl get configmap -n ${namespace}
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。ConfigMap 詳細の表示
次のコマンドを実行して、指定した ConfigMap の詳細を表示します。
saectl get cm ${cm-name} -n ${namespace} -o yaml
# ${cm-name} は ConfigMap の名前です。
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。コンテナー環境変数としての ConfigMap の参照
次のサンプルファイルは、ConfigMap をコンテナー環境変数として参照する方法を示しています。必要に応じて、キーと値のペアの一部またはすべてを参照できます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-configmap
namespace: default
spec:
replicas: 1
selector:
matchLabels:
sae.aliyun.com/app-name: test-configmap
template:
metadata:
creationTimestamp: null
labels:
sae.aliyun.com/app-name: test-configmap
spec:
containers:
- args:
- /home/admin/start.sh
command:
- /bin/bash
env: ### 以下は、一部のキーと値のペアを参照する例です。
- name: database # コンテナー内の環境変数の名前。
valueFrom:
configMapKeyRef: # 環境変数の値は、database-configmap の database キーの値を参照します。
key: database
name: database-configmap
envFrom: ### 以下は、すべてのキーと値のペアを参照する例です。
- configMapRef: # other-configmap 内のすべてのキーと値のペアは、コンテナー内の環境変数として参照されます。
name: other-configmap
name: main
image: registry.cn-shenzhen.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-provider-v1.0
imagePullPolicy: Always
resources:
limits:
cpu: "2"
memory: 4Gi
requests:
cpu: "2"
memory: 4Gi
restartPolicy: Always
terminationGracePeriodSeconds: 10ファイルとしての ConfigMap のコンテナーへのマウント
次のサンプルファイルは、ConfigMap をファイルとしてコンテナーにマウントする方法を示しています。
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-configmap
namespace: default
spec:
replicas: 1
selector:
matchLabels:
sae.aliyun.com/app-name: test-configmap
template:
metadata:
labels:
sae.aliyun.com/app-name: test-configmap
spec:
containers:
- args:
- /home/admin/start.sh
command:
- /bin/bash
name: main
image: registry.cn-shenzhen.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-provider-v1.0
imagePullPolicy: Always
resources:
limits:
cpu: "2"
memory: 4Gi
requests:
cpu: "2"
memory: 4Gi
volumeMounts:
- mountPath: /tmp/nacos # ConfigMap ファイルのマウントパス。
name: my-volume # マウントされたボリュームの名前は my-volume です。
volumes: # nacos-configmap に基づいて my-volume を宣言します。
- configMap:
name: nacos-configmap
name: my-volume
restartPolicy: Always
terminationGracePeriodSeconds: 10ConfigMap の更新
edit または apply コマンドを使用して ConfigMap を更新できます。
edit コマンドを使用したオンラインでの ConfigMap の編集
次のコマンドを実行します。指定した ConfigMap の構成が YAML ファイルで開きます。
saectl edit cm ${cm-name} -n ${namespace} # ${cm-name} は ConfigMap の名前です。 # ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。開いた YAML ファイルで、必要に応じて構成を変更します。その後、ファイルを保存して閉じます。構成の変更が適用されるのを待ちます。
apply コマンドを使用した YAML 構成ファイルに基づく ConfigMap の更新
既存の ConfigMap の cm.yaml 構成ファイルを変更します。構成ファイルがあるディレクトリで、次のコマンドを実行して構成の変更を適用します。
saectl apply -f cm.yamlConfigMap の削除
次のコマンドを実行して、指定した ConfigMap を削除します。
saectl delete cm ${cm-name} -n ${namespace}
# ${cm-name} は ConfigMap の名前です。
# ${namespace} は名前空間の名前です。-n パラメーターを使用して名前空間を指定しない場合、デフォルトの名前空間が使用されます。