通过创建边缘容器,您可以将容器应用连接至自己的站点域名,并使用该域名对容器应用进行访问。
边缘容器目前处于内测阶段,我们将向符合测试条件的用户免费提供相关服务。如有需要,请联系我们申请开通。
创建容器
步骤一:创建应用
应用是管理边缘容器的基本单位,您需要将边缘安全加速 ESA域名绑定至某个应用,从而使应用对外提供服务。
登录ESA控制台。
在左侧导航栏,选择
,单击创建应用。填写应用名称、服务端口等信息,单击确定。
参数
说明
应用名称
请以小写字母开头,支持小写字母、数字、“-”符号组合。以小写字母或数字结尾,长度6~128字节。
服务端口
容器内部对外提供服务的端口信息,端口范围1~65535。
步骤二:创建触发器
触发器是边缘容器对外提供服务的方式。域名绑定功能允许您将容器应用连接至自己的站点域名,在完成域名绑定后,您可以直接使用该域名对容器应用进行访问,系统边缘安全加速 ESA将自动在站点下添加一条绑定域名的DNS记录。
在边缘容器列表中,单击应用ID或操作列的详情。
在触发器页签中单击添加域名。
填写访问容器时使用的域名,单击确定。
完成域名添加后,我们将在域名对应的站点下创建新的DNS记录。此时,您可以通过该域名访问您的边缘容器应用。
步骤三:上传镜像
镜像是一种容器化标准交付物,用于打包应用程序及其依赖的环境。可以拉取基于Dockerfile文件构建应用程序的容器镜像并上传到容器镜像仓库中,然后您在仓库中拉取镜像并启动容器。
编写代码,注意服务端口、健康检查与创建容器步骤保持一致。
package main
import (
"bytes"
"net/http"
"strconv"
"strings"
"github.com/gorilla/mux"
)
func main() {
router := mux.NewRouter()
router.Path("/livez").HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
rw.WriteHeader(http.StatusOK)
rw.Write([]byte("OK"))
})
router.Path("/pi").HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
nums := req.URL.Query()["n"]
if len(nums) == 0 {
rw.Write([]byte("3.14"))
return
}
n, _ := strconv.Atoi(nums[0])
rw.Write([]byte(formatPi(computePi(n))))
})
http.ListenAndServe("0.0.0.0:8081", router)
}
func formatPi(i, N int, pi []int) string {
sb := new(bytes.Buffer)
sb.WriteString("3.")
for i++; i < N-2; i++ {
s := strconv.Itoa(pi[i])
s = strings.Repeat("0", 4-len(s)) + s
sb.WriteString(s)
}
return sb.String()
}
func computePi(n int) (i, N int, pi []int) {
N = n/4 + 3
pi = make([]int, N)
var j, k, p, q, r, t, u, v int
a, b := [2]int{956, 80}, [2]int{57121, 25}
s := 2
M := 10000
e := make([]int, N)
for {
s--
if s+1 == 0 {
break
}
k = s
e[0] = a[s]
i = N
for {
i--
if i == 0 {
break
}
e[i] = 0
}
q = 1
for {
j = i - 1
if i >= N {
break
}
r, v = 0, 0
for {
j += 1
if j >= N {
break
}
p = r*M + e[j]
e[j] = p / b[s]
t = v*M + e[j]
u = t / q
r = p % b[s]
v = t % q
if k != 0 {
pi[j] += u
} else {
pi[j] -= u
}
}
if e[i] == 0 {
i++
}
q += 2
if k != 0 {
k = 0
} else {
k = 1
}
}
}
for {
i--
if i == 0 {
break
}
t = pi[i] + s
pi[i] = t % M
if pi[i] < 0 {
pi[i] += M
s = t/M - 1
} else {
s = t / M
}
}
return
}
编写Dockerfile,构建镜像并上传到镜像仓库。
FROM alpine:latest
ENV TZ Asia/Shanghai
ADD lambda .
CMD ./lambda
export GOARCH="amd64" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux"; go build -o lambda main.go
docker build -t *****.alibaba-inc.com/***/lambda:v0.1 .
docker push *****.alibaba-inc.com/***/lambda:v0.1
步骤四:创建版本
创建版本是应用发布的基础,您可以在不同版本中配置不同的镜像、算力规格、探测方法等。
在某一版本发布比例达到100%前,不允许发布其它版本,但允许进行回滚操作。
在边缘容器列表中,单击应用ID或操作列的详情。
在版本管理页签中单击创建版本。
填写版本名称、版本备注和镜像信息,点击确定,完成版本创建。
配置项
说明
版本信息
版本名称
支持输入长度为 6 - 128 位的小写英文、数字、中划线(-),且需英文开头,英文或数字结尾,版本名称不可重复
版本备注
一般情况是对版本的功能进行说明。
镜像设置
镜像类型
自定义镜像:
自定义镜像,您只需要输入镜像地址即可。
ACR镜像:
容器设置
算力规格
您需要根据应用规模,选择不同的CPU、内存规格,目前支持的规格包括1C2G、2C4G、2C8G、4C8G、4C16G、8C16G、8C32G,不同算力规格的费用不同。
临时硬盘大小
临时硬盘支持512M、10GB、20GB、30GB,其中512M免费,其他规格收费。
启动命令
该指令运行于容器创建后,用于启动服务进程的脚本命令。
探测方法
支持HTTP、TCP、COMMAND三种探测方式。
HTTP
探测URL:探测路径,例如"/test"。
探测端口:范围1-65535。
探测HOST:HTTP请求Host头信息。
SCHEME:支持HTTP或HTTPS。
HEADER:用于自定义探测HTTP请求头。
TCP
探测端口:范围1~65535。
COMMAND
即自定义脚本,脚本返回0则认为探测成功,否则探测失败。
探测参数
探测时间
表示容器创建多长时间后开始进行探测,通常应用于服务进程启动时间较长的场景。
超时时间
使用HTTP探测方法时此值表示响应超时时间。
使用TCP探测方法时此值表示TCP握手超时时间。
使用COMMAND探测方法时此值表示脚本运行超时时间。
探测间隔
两次探测发起的间隔时间。
成功次数
当容器处于摘除状态时,探测成功次数达到该值后则认为容器可用,将重新恢复容器服务。
失败次数
当容器处于服务状态时,探测失败次数达到该值后则认为容器不可用,将摘除该容器。
高级命令
postStart
该指令运行于容器创建后,启动命令执行前,通常用于系统的初始化。
preStop
该指令运行于容器销毁前,通常用于应用的优雅退出。
环境变量
Key
环境变量的名称,用于表示该变量的用途。
Value
与Key相关的具体信息或数据。
步骤五:调试
在生产环境发布前,我们强烈建议您在我们提供的测试环境进行调试。测试环境和生产环境相互隔离,可以分别发布不同的应用版本。
在边缘容器列表中,单击应用ID或操作列的详情。
选择版本管理页签,在测试环境栏中,单击发布,会弹出选择版本的弹窗,选择您需要发布的版本,单击发布。
说明当发布状态显示为发布成功时,测试环境发布结束。
发布成功过后,在测试环境栏中,单击实例登录直接进入容器,在窗口中的命令行进行应用调试。
在测试环境栏中,单击实例日志可以看到应用启动和运行过程中的日志。
步骤六:版本管理
发布版本
边缘容器版本发布支持灰度发布,您可以在发布时对发布比例进行控制。
在边缘容器列表中,单击应用ID或操作列的详情,进入版本管理页签。
在生产环境栏中,单击发布,在弹窗中选择需要发布的版本以及期望发布的比例。
单击发布开始发布,当发布状态显示为发布成功时表示本次发布完成。
说明边缘容器支持灰度发布,当发布比例达到100%时表示全网发布结束,已发布的版本将成为基线版本。
回滚版本
对于已发布但发布比例未达到100%的版本,可以通过单击回滚按钮进行回滚操作,当发布状态显示为rollbacked时表示回滚完成,回滚后的版本为当前基线版本。