全部產品
Search
文件中心

Serverless App Engine:saectl工具快速入門

更新時間:Jan 16, 2026

本文介紹saectl工具的使用方法和常用命令,協助您快速入門並實現一些常見的業務需求。

前提條件

已安裝saectl工具,並配置AccessKey ID、AccessKey Secret、應用部署地區,詳見安裝與配置saectl工具

將K8s YAML轉換為SAE YAML檔案

將K8s部署的應用遷移到SAE部署,步驟如下:

  1. 執行以下命令,將已有的K8s YAML檔案轉換為SAE YAML檔案(即符合SAE規範的YAML檔案,它與K8s規範存在差異)。

    saectl convert -f <k8s-compliant-file.yaml> -o <sae-compliant-file.yaml>
    # <k8s-compliant-file.yaml>: 已有的K8s YAML檔案名稱
    # <sae-compliant-file.yaml>: 需要產生的SAE YAML檔案名稱
  2. 執行以下命令,嘗試根據SAE YAML檔案將應用部署到SAE。

    saectl apply -f <sae-compliant-file.yaml>
    # <sae-compliant-file.yaml>: 之前產生的SAE YAML檔案名稱
  3. 如遇報錯,則根據報錯資訊手動修正SAE YAML檔案內容,然後返回上一步迭代執行。報錯通常分為以下情形:

    1. 某些K8s YAML支援的欄位,在SAE YAML中不再支援或有特定格式要求,在轉換後您需要手動刪除或替換這些欄位。SAE YAML中支援的欄位和格式要求,詳見本目錄下其他文檔。

    2. 某些SAE YAML必須的欄位,在K8s YAML中缺失,在轉換後會通過 ${參數名}的形式提示您補充該欄位。例如,以下SAE YAML中您只需手動將其中${vpc-id}替換為實際值即可。本例中由於在SAE定義命名空間時需要關聯VPC,而原來的K8s 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: {}
重要

如果K8s YAML定義了多個資源,您可以將它們定義在同一個K8s YAML檔案中,並使用K8s規定的分隔字元---進行分隔,saectl支援將它們批量轉換為SAE YAML檔案。例如:

apiVersion: apps/v1
kind: Deployment
# ... Deployment Definition ...

---
apiVersion: v1
kind: ConfigMap
# ... ConfigMap Definition ...

但需要注意多個資源的建立不應依賴彼此間的執行順序。

例如:同一個SAE YAML檔案中同時定義了Deployment和依賴該Deployment的Service,由於建立Service的前提是Deployment已成功建立,因此通過執行該SAE YAML來一併建立Deployment和Service時會報錯。

推薦的做法是:將Deployment和Service分別在不同的SAE YAML檔案中定義,先建立Deployment,待Deployment建立成功後,再建立Service。

樣本 - 通過saectl部署Nginx

  1. 以下檔案定義了在K8s部署Nginx所需的資源,包括Deployment和Service。

    1. nginx-deployment.yaml

      apiVersion: apps/v1 
      kind: Deployment
      metadata:
        name: nginx
        labels:
          app: nginx
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image:  registry.cn-beijing.aliyuncs.com/sae-serverless-demo/sae-demo:nginx-v1.23.4
              ports:
              - containerPort: 80
              resources:
                requests:
                  cpu: "1"
                  memory: "2Gi"
      
    2. nginx-service.yaml

      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
      spec:
        allocateLoadBalancerNodePorts: true
        ports:
        - port: 80
          protocol: TCP
        selector:
          app: nginx
        type: LoadBalancer
      
  2. 將K8s YAML檔案轉換為SAE YAML檔案。

    saectl convert -f nginx-deployment.yaml -o output-nginx-deployment.yaml
    saectl convert -f nginx-service.yaml -o output-nginx-service.yaml
  3. 部署deployment,並檢測deployment部署狀態。

    saectl apply -f output-nginx-deployment.yaml
    saectl get deployment nginx # 根據返回結果判斷deployment部署狀態:
    # 如果STATE=PUBLISHING說明deployment正在部署,需要等待一段時間後再執行這條指令重新查看狀態;
    # 如果STATE=RUNNING說明應用部署成功,可以繼續執行後續指令。
  4. 建立service,查看訪問service的公網IP和連接埠,並從公網訪問service。

    saectl apply -f output-nginx-service.yaml
    saectl get service internet-nginx -o wide # 根據返回結果判斷service部署狀態:
    # 如果EXTERNAL-IP=<pending>說明service正在建立,需要等待一段時間後再執行這條指令重新查看狀態;
    # 如果EXTERNAL-IP顯示為一個IP地址,表示service建立成功,你可以通過這個公網IP地址和連接埠來訪問service。
    curl http://<public-ip>:<port> # 驗證service部署成功。也可以通過瀏覽器訪問http://<public-ip>:<port>
  5. 清理資源,刪除deployment和service。

    saectl delete -f output-nginx-deployment.yaml # service會隨deployment刪除而刪除。

將docker-compose YAML轉換為SAE YAML檔案

將docker compose部署的應用遷移到SAE部署,步驟如下:

  1. 將docker-compose YAML轉換為K8s YAML

  2. 將K8s YAML轉換為SAE YAML檔案

管理命名空間

saectl工具支援建立、查看、刪除命名空間,不支援更新命名空間。

建立命名空間

  1. 編寫檔案名稱為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: {}
  2. 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工具支援建立、查看、更新、刪除應用。

建立應用

  1. 編寫檔案名稱為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 # 建議將containers的名稱固定設定為main,避免衝突。
            image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 # 本例以部署nginx鏡像為例
  2. deployment.yaml檔案所在路徑執行以下命令,實現在預設命名空間下建立應用。

    saectl apply -f deployment.yaml
  3. 執行以下命令,查看已建立的應用的資訊。當輸出結果中STATE值為RUNNING時,表示應用正在運行。

    saectl get deployment ${deployment-name}
    # ${deployment-name}為應用程式名稱
  4. 執行以下命令,查看已建立的應用的執行個體資訊。

    saectl get pods -l sae.aliyun.com/app-name=${deployment-name}
    # ${deployment-name}為應用程式名稱

查看應用列表

執行以下命令,查看指定命名空間下已有的應用。

saectl get deployment -n ${namespace} 
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間

輸出樣本如下:

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

已準備就緒的應用執行個體數 / 期望部署的目標執行個體數,準備就緒是指已通過Readiness探針檢查。

AVAILABLE

當前正在啟動並執行應用執行個體數。

TYPE

應用的部署方式,Image表示通過鏡像部署。

STATE

應用的狀態,Running表示應用正在運行。

LANGUAGE

應用的技術棧語言。

AGE

應用的存在時間長度。

查看應用詳情

saectl工具支援使用getdescribe命令查看應用詳情。

通過get命令查看應用配置資訊

執行以下命令,查看應用的配置資訊。

saectl get deployment ${deployment-name} -o yaml -n ${namespace}
# ${deployment-name}為應用程式名稱
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間

通過describe命令查看應用詳情

執行以下命令,查看應用詳情。

saectl describe deployment ${deployment-name} -n ${namespace}
# ${deployment-name}為應用程式名稱
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間

更新應用

saectl工具支援使用scaleeditapply命令更新應用。

通過scale命令實現應用手動擴縮容

執行以下命令,實現應用手動擴縮容。

saectl scale deployment ${deployment-name} -n ${namespace} --replicas=${pod-num}
# ${deployment-name}為應用程式名稱
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間
# ${pod-num}為期望的應用執行個體數

通過edit命令線上編輯應用配置資訊

  1. 執行以下命令,將會以YAML檔案的形式開啟指定應用的配置資訊。

    saectl edit deployment ${deployment-name} -n ${namespace}
    # ${deployment-name}為應用程式名稱
    # ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間
  2. 在開啟的YAML檔案中按需修改配置資訊,儲存並關閉檔案,等待配置資訊變更完成。

通過apply命令實現按照YAML設定檔更新應用

修改已部署的應用的設定檔deployment.yaml,在設定檔所在路徑執行以下命令,實現應用配置資訊的變更。

saectl apply -f deployment.yaml

刪除應用

執行以下命令,刪除指定應用。

saectl delete deployment ${deployment-name} -n ${namespace}
# ${deployment-name}為應用程式名稱
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間

管理Server Load Balancer

Server Load Balancer對應Kubernetes的service資源類型。saectl工具支援建立、查看、更新、解除綁定Server Load Balancer。

為應用建立新的Server Load Balancer

  1. 編寫檔案名稱為svc.yaml的檔案,樣本檔案的內容如下,其中包含Server Load Balancer的配置資訊。

    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}替換為您的應用程式名稱
  2. svc.yaml檔案所在路徑執行以下命令,實現為應用建立新的Server Load Balancer。

    saectl apply -f svc.yaml

將應用綁定到已有的Server Load Balancer

  1. 編寫檔案名稱為svc.yaml的檔案,樣本檔案的內容如下,其中包含Server Load Balancer的配置資訊。

    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}替換為您的應用程式名稱
  2. svc.yaml檔案所在路徑執行以下命令,實現將應用綁定到已有的Server Load Balancer。

    saectl apply -f svc.yaml

查看Server Load Balancer列表

執行以下命令,查看已有的Server Load Balancer列表。

saectl get service -l sae.aliyun.com/app-name=${deployment-name} -n ${namespace}
# ${deployment-name}為應用的名稱,如果不通過-l參數指定應用程式名稱,則預設顯示所有應用綁定的Server Load Balancer
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間

輸出樣本如下:

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

Service的名稱,格式為${公網/私網類型}-${應用程式名稱}

對於${公網/私網類型},internet表示公網類型,intranet表示私網類型。

TYPE

Service的類型,LoadBalancer表示Server Load Balancer。

EXTERNAL-IP

Server Load Balancer的IP地址。

PORT(S)

Server Load Balancer的連接埠映射資訊。

BOUND

Server Load Balancer綁定的應用程式名稱。

AGE

Service的存在時間長度。

查看Server Load Balancer詳情

執行以下命令,查看Server Load Balancer的配置資訊。

saectl get service ${service-name} -n ${namespace} -o yaml
# ${service-name}為service名稱
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間

更新Server Load Balancer

saectl工具支援使用editapply命令更新Server Load Balancer。

通過edit命令線上編輯Server Load Balancer配置資訊

  1. 執行以下命令,將會以YAML檔案的形式開啟指定Server Load Balancer的配置資訊。

    saectl edit service ${service-name} -n ${namespace}
    # ${service-name}為service名稱
    # ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間
  2. 在開啟的YAML檔案中按需修改配置資訊,儲存並關閉檔案,等待配置資訊變更完成。

通過apply命令實現按照YAML設定檔更新Server Load Balancer

修改已有的Server Load Balancer的設定檔svc.yaml。在設定檔所在路徑執行以下命令,實現Server Load Balancer配置資訊的變更。

saectl apply -f svc.yaml

解除綁定Server Load Balancer

執行以下命令,解除綁定指定的Server Load Balancer。

saectl delete service ${service-name} -n ${namespace}
# ${service-name}為service名稱
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間

管理ConfigMap

saectl工具支援建立、查看、更新、刪除ConfigMap。ConfigMap可以作為容器的環境變數被引用,或作為檔案掛載到容器中。

建立ConfigMap

  1. 編寫檔案名稱為cm.yaml的檔案,樣本檔案的內容如下,其中包含ConfigMap的配置資訊。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: database-configmap # 表示ConfigMap的名稱
      namespace: default # 表示ConfigMap所在的命名空間
    data: #表示ConfigMap中包含的索引值對資訊
      database: mysql
      database_uri: mysql://localhost:2309
  2. cm.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參數指定命名空間,則預設使用default命名空間

查看ConfigMap具體配置

執行以下命令,查看指定ConfigMap的具體配置。

saectl get cm ${cm-name} -n ${namespace} -o yaml 
# ${cm-name}為ConfigMap的名稱
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間

引用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 # 表示掛載的volume名稱為my-volume
      volumes: # 表示基於nacos-configmap聲明my-volume
      - configMap:
          name: nacos-configmap
        name: my-volume
      restartPolicy: Always
      terminationGracePeriodSeconds: 10

更新ConfigMap

saectl工具支援使用editapply命令更新ConfigMap。

通過edit命令線上編輯ConfigMap

  1. 執行以下命令,將會以YAML檔案的形式開啟指定ConfigMap的配置資訊。

    saectl edit cm ${cm-name} -n ${namespace}
    # ${cm-name}為ConfigMap名稱
    # ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間
  2. 在開啟的YAML檔案中按需修改配置資訊,儲存並關閉檔案,等待配置資訊變更完成。

通過apply命令實現按照YAML設定檔更新ConfigMap

修改已有的ConfigMap的設定檔cm.yaml。在設定檔所在路徑執行以下命令,實現ConfigMap配置資訊的變更。

saectl apply -f cm.yaml

刪除ConfigMap

執行以下命令,刪除指定的ConfigMap。

saectl delete cm ${cm-name} -n ${namespace}
# ${cm-name}為ConfigMap名稱
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間