Serverless应用引擎SAE(Serverless App Engine)是面向应用的Serverless PaaS平台,向上抽象了应用的概念。将应用部署至SAE后,您无需管理和维护集群与服务器,可以专注于设计和构建应用程序。您既可以使用黑屏客户端以Deployment的方式管理SAE应用的整个生命周期,完成从创建、更新到最后删除的整个过程;也可以和白屏操作协作共同管理SAE应用,使用客户端查看和管理已有的SAE应用。本文介绍如何通过Kubernetes Deployment的资源定义来快速创建和管理SAE应用。
前提条件
- 已在本地安装Serverless Devs工具。
- 已配置阿里云认证信息。
使用Serverless Devs工具的config命令配置权限。更多信息,请参见Config命令。
- 已初始化工作区。使用Serverless Devs工具的init命令,把当前目录初始化为工作区。
s init start-saectl -d ./
- 已安装SAE插件。执行任意SAE插件的命令行,触发Serverless Devs工具安装SAE插件。
s saectl get ns
背景信息
SAE兼容Kubernetes Deployment的核心参数,但由于SAE本身的Serverless属性,无法支持全部参数。具体参数是否兼容,请参见SAE对比Deployment与Service的参数兼容表。
查看已有的应用
- 执行以下命令,查看某个地域(Region)下已有的命名空间。
s saectl get ns
预期输出。NAME STATUS REGION LINK default Active cn-shenzhen https://sae.console.aliyun.com/Overview?regionId=cn-shenzhen#/NameSpace/NamespaceDetail?regionId=cn-shenzhen&namespaceId=cn-shenzhen test Active cn-shenzhen https://sae.console.aliyun.com/Overview?regionId=cn-shenzhen#/NameSpace/NamespaceDetail?regionId=cn-shenzhen&namespaceId=cn-shenzhen:test
查看命名空间,显示字段如下。- Name:命名空间的名字。
- STATUS:命名空间的状态。Active表示可用,Terminating表示删除中。
- REGION:命名空间所在地域(Region)。
- Link:命名空间的Web地址,单击后可以直接跳转到对应命名空间的Web页面(浏览器需处于登录状态)。
- 执行以下命令,查看某个命名空间下的所有应用。
s saectl get deployments -n test
预期输出。NAME READY AVAILABLE TYPE STATE LANGUAGE AGE service-1 4/4 4 Image RUNNING java 76d consumer 0/2 0 Image STOPPED java 76d php-zip 2/1 2 PhpZip PUBLISHING php 65d serverless-app 2/2 2 Image RUNNING other 76d sae-jump-server 0/1 0 Image RUNNING java 202d service-jar 2/2 0 FatJar UNSYNCED java 82d web 0/1 0 War STOPPED java 81d
查看Deployment,显示字段如下。- Name:命名空间中Deployment的名称。
- READY:应用的可用的“副本”数,格式为“就绪个数/期望个数”。
- AVAILABLE:应用可供用户使用的副本数。
- TYPE:应用的部署方式。
- STATE:应用的状态。取值说明如下。
- RUNNING:应用处于正常运行中。
- PUBLISHING:应用处于发布中。
- STOPPED:应用已停止。
- UNSYNCED:应用最近一次发布失败(最新的修改未生效)。
- PAUSE:应用的发布流程暂停,等待用户确认,需要用户在白屏上操作发布单继续执行。
- LANGUAGE:应用技术栈语言。
- AGE:应用运行时间。
- 查看应用详情。
- 以YAML格式输出应用详情。
% s saectl get deployment/svc-demo -n test -oyaml
展开查看预期输出。apiVersion: apps/v1 kind: Deployment metadata: annotations: serverless.aliyun.com/language: other serverless.aliyun.com/state: RUNNING serverless.aliyun.com/type: Image creationTimestamp: "2022-11-01T03:52:12Z" generation: 34 labels: s1: t2 name: svc-demo namespace: test resourceVersion: "1670987571659" selfLink: https://sae.console.aliyun.com/Overview?regionId=cn-shenzhen#/AppList/AppDetail?appId=0e99102e-4f34-4a90-bdd0-1082e476**** uid: 0e99102e-4f34-4a90-bdd0-1082e476**** spec: minReadySeconds: 10 replicas: 2 selector: matchLabels: appid: 0e99102e-4f34-4a90-bdd0-1082e47**** strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 0 type: RollingUpdate template: metadata: creationTimestamp: null labels: appid: 0e99102e-4f34-4a90-bdd0-1082e476**** spec: containers: - env: - name: k1 value: s1 envFrom: - configMapRef: name: example-configmap image: registry-vpc.cn-shenzhen.aliyuncs.com/sae-****/wordpress:1.0 imagePullPolicy: Always name: main resources: limits: cpu: "1" memory: 2Gi requests: cpu: "1" memory: 2Gi volumeMounts: - mountPath: /etc/config name: user-example-configmap subPath: database_uri nodeSelector: vpc: vpc-xxx vswitch: vsw-xxx restartPolicy: Always securityContext: seLinuxOptions: role: sg-wz9hokpg2hi517xw**** terminationGracePeriodSeconds: 30 volumes: - configMap: name: example-configmap name: user-example-configmap status: availableReplicas: 2 collisionCount: 0 observedGeneration: 34 readyReplicas: 2 replicas: 2 updatedReplicas: 2
- 优雅展示应用详情。
% s saectl describe deploy/svc-demo -n test
展开查看预期输出。Name: svc-demo Namespace: test CreationTimestamp: Tue, 01 Nov 2022 11:52:12 +0800 Labels: s1=t2 Annotations: serverless.aliyun.com/language: other serverless.aliyun.com/state: RUNNING serverless.aliyun.com/type: Image Selector: appid=0e99102e-4f34-4a90-bdd0-1082e476**** Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 10 RollingUpdateStrategy: 0 max unavailable, 25% max surge Pod Template: Labels: appid=0e99102e-4f34-4a90-bdd0-1082e476**** Containers: main: Image: registry-vpc.cn-shenzhen.aliyuncs.com/sae-****/wordpress:1.0 Port: <none> Host Port: <none> Limits: cpu: 1 memory: 2Gi Requests: cpu: 1 memory: 2Gi Environment Variables from: example-configmap ConfigMap Optional: false Environment: k1: s1 Mounts: /etc/config from user-example-configmap (rw,path="database_uri") Volumes: user-example-configmap: Type: ConfigMap (a volume populated by a ConfigMap) Name: example-configmap Optional: false
- 以YAML格式输出应用详情。
创建新的应用
Kubernetes社区文档中的Deployment示例如下。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
- 执行apply命令,创建应用。
s saectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml -n test
- 执行以下命令,查看创建的应用。
s saectl get deploy/nginx-deployment -n test
当STATE为PUBLISHING,表示应用正在发布中。NAME READY AVAILABLE TYPE STATE LANGUAGE AGE nginx-deployment 0/3 0 Image PUBLISHING other 3s
- 再次执行步骤2的命令,查看应用。当STATE为RUNNING,表示应用已经部署成功。
NAME READY AVAILABLE TYPE STATE LANGUAGE AGE nginx-deployment 3/3 3 Image RUNNING other 87s
更新应用
您可以使用以下四种方式更新应用。
方式一:更新应用镜像
- 执行set image命令,更新应用的镜像。
s saectl set image deploy/ngnix-deployment nginx=registry-vpc.cn-shenzhen.aliyuncs.com/sae-****/nginx:stable -n test
- 查看应用。应用处于发布中(STATE为PUBLISHING)。
NAME READY AVAILABLE TYPE STATE LANGUAGE AGE nginx-deployment 3/3 3 Image PUBLISHING other 26m
- 再次查看应用。当STATE为RUNNING,表示镜像更新完成。
NAME READY AVAILABLE TYPE STATE LANGUAGE AGE nginx-deployment 3/3 3 Image RUNNING other 26m
方式二:对应用进行扩缩容
执行scale命令,更改应用的副本数。
s saectl scale deploy/nginx-deployment --replicas=1 -n test
方式三:用YAML文件更新应用
首先修改该应用的YAML文件,然后执行apply命令。
s saectl apply -f updated.yaml
方式四:在线编辑应用
s saectl edit deploy/nginx-deployment -n test