本文介绍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命名空间
管理负载均衡SLB
负载均衡SLB对应Kubernetes的service资源类型。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参数指定命名空间,则默认使用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表示负载均衡SLB。 |
EXTERNAL-IP | 负载均衡SLB的IP地址。 |
PORT(S) | 负载均衡SLB的端口映射信息。 |
BOUND | 负载均衡SLB绑定的应用名称。 |
AGE | Service的存在时长。 |
查看负载均衡SLB详情
执行以下命令,查看负载均衡SLB的配置信息。
saectl get service ${service-name} -n ${namespace} -o yaml
# ${service-name}为service名称
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间
更新负载均衡SLB
saectl工具支持使用edit
或apply
命令更新负载均衡SLB。
通过edit命令在线编辑负载均衡SLB配置信息
执行以下命令,将会以YAML文件的形式打开指定负载均衡SLB的配置信息。
saectl edit service ${service-name} -n ${namespace} # ${service-name}为service名称 # ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间
在打开的YAML文件中按需修改配置信息,保存并关闭文件,等待配置信息变更完成。
通过apply命令实现按照YAML配置文件更新负载均衡SLB
修改已有的负载均衡SLB的配置文件svc.yaml
。在配置文件所在路径执行以下命令,实现负载均衡SLB配置信息的变更。
saectl apply -f svc.yaml
解绑负载均衡SLB
执行以下命令,解绑指定的负载均衡SLB。
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命名空间