开始使用边缘容器

通过创建边缘容器,您可以将容器应用连接至自己的站点域名,并使用该域名对容器应用进行访问。

重要

边缘容器目前处于内测阶段,我们将向符合测试条件的用户免费提供相关服务。如有需要,请联系我们申请开通。

创建容器

步骤一:创建应用

应用是管理边缘容器的基本单位,您需要将边缘安全加速 ESA域名绑定至某个应用,从而使应用对外提供服务。

  1. 登录ESA控制台

  2. 在左侧导航栏,选择边缘计算 > 边缘容器,单击创建应用

  3. 填写应用名称服务端口等信息,单击确定

    参数

    说明

    应用名称

    请以小写字母开头,支持小写字母、数字、“-”符号组合。以小写字母或数字结尾,长度6~128字节。

    服务端口

    容器内部对外提供服务的端口信息,端口范围1~65535。

    image

步骤二:创建触发器

触发器是边缘容器对外提供服务的方式。域名绑定功能允许您将容器应用连接至自己的站点域名,在完成域名绑定后,您可以直接使用该域名对容器应用进行访问,系统边缘安全加速 ESA将自动在站点下添加一条绑定域名的DNS记录。

  1. 在边缘容器列表中,单击应用ID或操作列的详情

  2. 触发器页签中单击添加域名

  3. 填写访问容器时使用的域名,单击确定

  4. 完成域名添加后,我们将在域名对应的站点下创建新的DNS记录。此时,您可以通过该域名访问您的边缘容器应用。

步骤三:上传镜像

镜像是一种容器化标准交付物,用于打包应用程序及其依赖的环境。可以拉取基于Dockerfile文件构建应用程序的容器镜像并上传到容器镜像仓库中,然后您在仓库中拉取镜像并启动容器。

  1. 编写代码,注意服务端口健康检查创建容器步骤保持一致。

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
}
  1. 编写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%前,不允许发布其它版本,但允许进行回滚操作。

  1. 在边缘容器列表中,单击应用ID或操作列的详情

  2. 版本管理页签中单击创建版本

  3. 填写版本名称版本备注镜像信息,点击确定,完成版本创建。

    配置项

    说明

    版本信息

    版本名称

    支持输入长度为 6 - 128 位的小写英文、数字、中划线(-),且需英文开头,英文或数字结尾,版本名称不可重复

    版本备注

    一般情况是对版本的功能进行说明。

    镜像设置

    镜像类型

    自定义镜像

    • 自定义镜像,您只需要输入镜像地址即可。

    ACR镜像

    • ACR镜像,您需要首先开通“容器镜像服务”,具体请参考:创建企业版实例。在容器镜像服务中上传镜像实例。然后您可以在边缘安全加速 ESA边缘容器产品中直接引用“容器镜像服务”中的容器,并授权边缘容器允许对镜像进行拉取。

    • 制品中心:阿里云容器镜像服务ACR推出的云原生制品中心为容器开发者提供了来源于阿里云官方和龙蜥社区的安全可信容器基础镜像,涵盖了应用容器化基础OS镜像、基础语言镜像以及AI/大数据相关镜像,支持多种系统架构,使得业务容器化过程更加便捷高效、更加安全可信。详情请参见:制品中心

    容器设置

    算力规格

    您需要根据应用规模,选择不同的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相关的具体信息或数据。

步骤五:调试

生产环境发布前,我们强烈建议您在我们提供的测试环境进行调试。测试环境生产环境相互隔离,可以分别发布不同的应用版本。

  1. 在边缘容器列表中,单击应用ID或操作列的详情

  2. 选择版本管理页签,在测试环境栏中,单击发布,会弹出选择版本的弹窗,选择您需要发布的版本,单击发布

    说明

    发布状态显示为发布成功时,测试环境发布结束。

  3. 发布成功过后,在测试环境栏中,单击实例登录直接进入容器,在窗口中的命令行进行应用调试。

  4. 测试环境栏中,单击实例日志可以看到应用启动和运行过程中的日志。

    image

步骤六:版本管理

发布版本

边缘容器版本发布支持灰度发布,您可以在发布时对发布比例进行控制。

  1. 在边缘容器列表中,单击应用ID或操作列的详情,进入版本管理页签。

  2. 生产环境栏中,单击发布,在弹窗中选择需要发布的版本以及期望发布的比例。

  3. 单击发布开始发布,当发布状态显示为发布成功时表示本次发布完成。image

    说明

    边缘容器支持灰度发布,当发布比例达到100%时表示全网发布结束,已发布的版本将成为基线版本。

回滚版本

对于已发布但发布比例未达到100%的版本,可以通过单击回滚按钮进行回滚操作,当发布状态显示为rollbacked时表示回滚完成,回滚后的版本为当前基线版本。