本文介紹saectl工具的使用方法和常用命令,協助您快速入門並實現一些常見的業務需求。
前提條件
已安裝saectl工具,並配置AccessKey ID、AccessKey Secret、應用部署地區,詳見安裝與配置saectl工具。
將K8s YAML轉換為SAE YAML檔案
將K8s部署的應用遷移到SAE部署,步驟如下:
執行以下命令,將已有的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檔案名稱執行以下命令,嘗試根據SAE YAML檔案將應用部署到SAE。
saectl apply -f <sae-compliant-file.yaml> # <sae-compliant-file.yaml>: 之前產生的SAE YAML檔案名稱如遇報錯,則根據報錯資訊手動修正SAE YAML檔案內容,然後返回上一步迭代執行。報錯通常分為以下情形:
某些K8s YAML支援的欄位,在SAE YAML中不再支援或有特定格式要求,在轉換後您需要手動刪除或替換這些欄位。SAE YAML中支援的欄位和格式要求,詳見本目錄下其他文檔。
某些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
將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 # 建議將containers的名稱固定設定為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參數指定命名空間,則預設使用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工具支援使用get或describe命令查看應用詳情。
通過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工具支援使用scale,edit或apply命令更新應用。
通過scale命令實現應用手動擴縮容
執行以下命令,實現應用手動擴縮容。
saectl scale deployment ${deployment-name} -n ${namespace} --replicas=${pod-num}
# ${deployment-name}為應用程式名稱
# ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間
# ${pod-num}為期望的應用執行個體數通過edit命令線上編輯應用配置資訊
執行以下命令,將會以YAML檔案的形式開啟指定應用的配置資訊。
saectl edit deployment ${deployment-name} -n ${namespace} # ${deployment-name}為應用程式名稱 # ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間在開啟的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
編寫檔案名稱為
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}替換為您的應用程式名稱在
svc.yaml檔案所在路徑執行以下命令,實現為應用建立新的Server Load Balancer。saectl apply -f svc.yaml
將應用綁定到已有的Server Load Balancer
編寫檔案名稱為
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}替換為您的應用程式名稱在
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的名稱,格式為 對於 |
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工具支援使用edit或apply命令更新Server Load Balancer。
通過edit命令線上編輯Server Load Balancer配置資訊
執行以下命令,將會以YAML檔案的形式開啟指定Server Load Balancer的配置資訊。
saectl edit service ${service-name} -n ${namespace} # ${service-name}為service名稱 # ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間在開啟的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
編寫檔案名稱為
cm.yaml的檔案,樣本檔案的內容如下,其中包含ConfigMap的配置資訊。apiVersion: v1 kind: ConfigMap metadata: name: database-configmap # 表示ConfigMap的名稱 namespace: default # 表示ConfigMap所在的命名空間 data: #表示ConfigMap中包含的索引值對資訊 database: mysql database_uri: mysql://localhost:2309在
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工具支援使用edit或apply命令更新ConfigMap。
通過edit命令線上編輯ConfigMap
執行以下命令,將會以YAML檔案的形式開啟指定ConfigMap的配置資訊。
saectl edit cm ${cm-name} -n ${namespace} # ${cm-name}為ConfigMap名稱 # ${namespace}為命名空間的名稱,如果不通過-n參數指定命名空間,則預設使用default命名空間在開啟的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命名空間