管理应用

制作应用

应用是搭建教学实验环境的部署模板,它定义了部署一个实验环境的完整过程。 当我们需要设计一个新的实验环境时,就需要制作一个新的应用了。 应用的制作必须在后台完成,通过点击首页右上角账户区域的下拉框按钮,我们可以看到“进入后台”的菜单。具体如下。

进入后台后,依次点击“实验环境->应用”进入应用列表。具体如下。

点击应用列表左上方的“创建”按钮,进入制作应用的页面。

制作应用时各个字段的含义及作用

在正式开始制作应用前,我们需要了解下制作应用页面各个字段的含义。

字段 含义及作用
应用名称 必填。应用的名称会用在ABC平台首页进行展示,所以一个简短而又准确描述应用内容的名称非常重要。应用的名称必须唯一,也就是不能重复创建相同名称的应用。
图片 必填。应用的图片。请上传一个能够准确描述应用内容的图片,这些图片会在ABC平台首页展示给用户,所以一个高大上的图片非常重要。可以参考应用所使用镜像的官方图片。
发布 当选择“发布”时,应用才能够被其他用户看见,他们才能够选择并使用该应用创建实验环境。
置顶 当选择“置顶”时,应用才能够在首页展现出来,被其他用户看到或搜索到。
帮助文档(pdf) 选填。该应用的PDF格式帮助文档。建议优先使用模板里的“用户手册”字段,这样帮助信息可以直接在应用环境左侧看到。
帮助文档(word) 选填。该应用的WORD格式帮助文档。建议优先使用模板里的“用户手册”字段,这样帮助信息可以直接在应用环境左侧看到。
部署到期时间(天) 选填。通过该应用部署的实验环境存续的时间,过期后该实验环境将被自动销毁。值为0表示不销毁。
部署到期提前通知时间(天) 选填。当通过该应用部署的实验环境即将到期时,会在控制台应用环境列表上显示该应用环境即将到期。该值指定了提前多少天进行通知。
应用包含的模板 必填。模板用于定义该应用部署的细节。关于模板的配置在本节接下来的表中会详细描述。一个应用必须包含至少一个模板。大多数情况下一个应用包含一个模板即可。但是对于由多个组件构成的应用,就需要包含多个模板。比如,如果你的应用由一个Web服务和一个MySQL数据库构成,那这个时候应用就需要报一个Web服务模板,和一个MySQL数据库服务模板。

其中,“应用包含的模板”字段指定了用于部署应用各个组件的模板。点击“添加明细行”,进入添加模板的表单。

创建“模板”的各个字段的含义如下。

字段 含义及作用
内部服务名称 选填。内部服务名称用于在应用的多个组件之间提供相互访问的名称,其作用相当于“域名”。内部服务名不能够被外部用户或程序使用。“内部服务名称”配合“内部服务端口”能够在同属于一个应用的多个实验环境之间,提供相互访问的方法。比如,如果你的应用由两部分环境组成,一个是Web服务,一个是MySQL数据库服务,Web服务在运行过程中需要访问MySQL。那么,当我们将MySQL数据库模板的内部服务名称设置为“mysql”之后,Web服务模板就可以在其环境变量中,通过类似于这样的jinja2语法,引用MySQL服务实例。
类型 必填。请选择“容器”类型。
部署类型 必填。可选“Deployment部署”或者“StatefulSet部署”。它们的区别在于,“Deployment部署”不能够挂载数据卷进行数据持久化,并且实验环境在部署重启后,不可连接使用。因此“Deployment部署”适合短期临时搭建和使用环境。而“StatefulSet部署”则能够支持挂载数据卷,从而对应用数据进行持久化,并且在“调试部署”模式下,提交实验环境容器时,会对数据卷也保存快照,从而将应用数据的快照也添加到模板里。另外,“StatefulSet部署”的实验环境在部署重启后,依旧能够连接使用。因此“StatefulSet部署”适合应用于需要保存应用数据,以及长期使用环境的场景。
镜像 必填。我们在底层使用了容器技术来保存实验环境的二进制文件,这个保存实验环境的二进制文件就被称之为“镜像”。镜像可以通过两种方式获得。一种是从“Docker Hub”上通过pull命令拉取而来,你可以在ABC平台的镜像管理器里,创建一个新的镜像管理器,并设置需要拉取镜像的地址,从而将其拉取下来,后续就可以在模板中使用该镜像管理器。另一种是,可以将运行中的实验环境,通过“提交容器”的按钮,保存为新的容器镜像。具体来说,就是在使用“调试部署”时,你可以将修改后的环境,通过“提交容器”的按钮,将其保存为新的容器镜像。第二种方式是我们在制作一个新的实验环境模板时,最常用也是最关键的步骤。
外部服务端口 选填。外部服务端口用于提供给外部用户或程序访问环境里运行服务的方法。比如,如果实验环境运行了一个MySQL数据库,在3306端口提供服务。如果你想将这个3306端口的MySQL数据库服务提供给外部用户使用,那就在该外部服务端口处添加一行TCP端口的记录。外部服务端口包括了三种类型:HTTP、TCP和UDP。其中:1)HTTP,表示环境里运行的服务提供的是HTTP的访问方式,比如在8080端口运行的Web网站。在大多数情况下,对于提供HTTP服务的端口,可以添加一个HTTP类型的外部服务端口。 2)TCP,表示环境里运行的服务提供的是TCP的访问方式,比如在22端口运行的SSH服务,在3306端口运行的MySQL服务等。在少数情况下,有些网站以HTTP外部服务端口访问时会存在资源路径或者域名不对的问题,这个时候就可以使用TCP外部服务端口来替代HTTP外部服务端口。因为HTTP就是运行在TCP协议上的,所以TCP类型外部服务端口,始终是能够替代HTTP类型外部服务端口,来提供外部访问方式的。 3)UDP,表示环境里运行的服务提供的是UDP的访问方式。 另外需要注意的是,对于HTTP服务,ABC平台提供一个生成的URL来让外部用户访问环境中的HTTP服务。而对于TCP和UDP服务,ABC平台并不会生成URL,而是会随机生成一个端口号,让外部用户通过这个生成的端口号来访问环境中的TCP或UDP服务。
内部服务端口 选填。内部服务端口用于在内部服务之间提供相互访问的端口,其作用相当于“端口号”。内部端口不能够被外部用户或程序访问。比如,如果你的实验由两部分环境组成,一个是Web服务,一个是MySQL数据库服务,Web服务在运行过程中需要访问MySQL。那这个时候,你就需要创建一个Web服务模板和一个MySQL数据库服务模板。一般情况下,这两个服务模板是各自独立的,Web服务模板并不能够访问到MySQL数据库服务模板的3306端口。那怎么办呢?这个时候,内部服务端口就非常有用了。当你在一个模板中添加了一个内部服务端口时,在与该模板关联的其它模板中,就能够在它们的环境变量中,通过类似于这样的jinja2语法,使用MySQL数据库服务的内部服务端口。
环境变量 选填。环境变量就是在实验环境启动时,传递给实验环境的系统变量。比如,像MySQL数据库模板,在其启动时,我们可以指定数据库的初始密码,这个初始密码就是通过环境变量传给容器的。另外,这里的环境变量是支持jinja2语法的。比如,当我们的实验包含多个环境,其中各个环境各自的模板定义了内部服务名称和内部服务端口时,我们就可以通过类似于或这样的jinja2语法占位符,引用对应内部服务的名称和端口。
集群最大数量 必填。默认值为“1”。使用默认值就好了。
显示Shell 选填。默认值为“打开”。使用默认值就好了。
开启VNC 选填。默认值为“关闭”。如果你的容器镜像支持VNC服务,并且你希望用户能够在前端使用VNC图形化桌面,访问实验环境的话,那么就可以打开这个VNC选项。
可用CPU上限 必填。默认值为“2核”。“可用CPU上限”限制了你的实验环境能够使用的CPU核心数上限。在设置该上限值时,请尽量克制些,选择能够让你的实验环境顺利运行的最小值即可。
可用内存上限 必填。默认值为“4096MiB”。“可用内存上限”限制了你的实验环境能够使用的内存量上限。在设置该上限值时,请尽量克制些,选择能够让你的实验环境顺利运行的最小值即可。
启动CPU要求 必填。默认值为“0核”。“启动CPU要求”是指你的实验环境启动前,需要后台给你的实验环境分配的CPU核心数。这个数值不能超过“可用CPU上限”。
启动内存要求 必填。默认值为“0MiB”。“启动内存要求”是指你的实验环境启动前,需要后台给你的实验环境分配的内存量。这个数值不能超过“可用内存上限”。
运行命令 选填。如果你希望实验环境在启动后执行你给定的shell命令,那么就可以在这个地方添加一条运行命令。比如,在运行Ubuntu容器时,可能需要执行“/bin/bash -c "tail -f /dev/null"”命令,避免环境启动后立刻退出的问题。这时候,你就可以添加一条运行命令“/bin/bash”,然后再运行命令参数里添加一条“-c”和一条“tail -f /dev/null”参数。注意,大多数情况下我们并不需要设置“运行命令”参数,因为一般情况下,从Docker Hub拉取的容器镜像或者自己通过Dockerfile制作的镜像里,是包含ENTRYPOINT或CMD的,它们设定了容器启动时需要运行的命令或程序。所以,大多数情况下你并不需要自行设置运行命令,只有在少数情况下容器镜像满足不了你的运行目的时,你可能需要设置特定的运行命令。
运行命令参数 选填。如果你希望运行的命令是带有参数的,比如 “/bin/bash -c "tail -f /dev/null"”命令,就需要添加一条“-c”和一条“tail -f /dev/null”运行命令参数。
以特权身份运行 选填。默认值为“关闭”。不要打开,不要打开,不要打开。该字段即将被弃用,禁止使用该字段。否则后续你制作的镜像和模板将不能够正常工作。
数量 只读。指通过该模板创建的实验环境的数量。
帮助文档(pdf) 选填。该模板的PDF格式帮助文档。建议优先使用“用户手册”字段。
帮助文档(word) 选填。该模板的WORD格式帮助文档。建议优先使用“用户手册”字段。
节点亲和性 选填。用于设置使用该模板创建的环境,被分配在哪些K8S集群节点上。如果是制作实验环境镜像和模板,需要选择使用“调试部署”模式。在“调试部署”模式下,该模板创建的环境都会被分配到master节点上,此时“节点亲和性”设置是无效的。
挂载的存储卷 选填。当“部署类型”是“StatefulSet部署”时,可以指定“挂载的存储卷”,用于持久化保存应用数据。比如,Postgres数据库容器的数据保存在“/var/lib/postgresql/data”目录下,如果你希望数据库实验环境重启后,数据库里的数据依旧存在,那么就需要添加一条“挂载的存储卷”,并将其挂载点设置为“/var/lib/postgresql/data”。使用存储卷后,如果你的应用数据是保存在存储卷中,那么即使实验环境重启,你的应用数据依旧存在。所以,对于需要持久化保存的应用数据,都应该将其数据保存路径添加到“挂载的存储卷”中。注意,只有“StatefulSet部署”支持挂载存储卷,“Deployment部署”不支持挂载存储卷。另外,如果一个模板挂载了存储卷,那么当在“调试部署”模式下,将由该模板创建的环境提交容器时,会同时将所有挂载的存储卷保存为快照,并将快照添加到该模板的“挂载存储卷快照”字段。之后,再通过该模板创建新的环境变量时,存储卷就会从快照中恢复出之前提交容器时保存的存储卷数据。
挂载存储卷快照 选填。挂载存储卷快照,是由挂载了存储卷的模板部署环境后,提交环境容器镜像时,对存储卷创建快照产生的。挂载存储卷快照的作用在于,使模板能够对应用运行产生的数据进行快照和保存,并在之后再通过该模板部署新的环境时,恢复出之前保存的应用数据。
主模板 选填。主模板和子模版,用于将多个模板关联起来,从而支持创建更加复杂的实验环境。当前,一个模板只支持指定一个镜像。所以,当你的实验需要同时使用到多个镜像时,就需要使用多个模板,并通过“主模板”和“子模版”字段,将这些模板相互关联起来。比如,如果你的实验环境由两部分组成,一个是Web服务,一个是MySQL数据库服务,Web服务在运行过程中需要访问MySQL数据库服务。那这个时候,你就需要创建一个Web服务模板,使用Web服务的镜像。再创建一个MySQL数据库服务模板,使用MySQL数据库的镜像。最后,设置MySQL数据库服务模板的“主模板”字段为Web服务模板。这样,就实现Web服务模板和MySQL数据库服务模板的关联。之后,在你通过Web服务模板部署实验环境时,ABC平台会自动先为你创建一个MySQL数据库环境,再创建Web服务环境,这样就实现了在一个实验中使用多个镜像的目的。另外需要注意的是,主模板和子模版之间,可以相互引用在“内部服务名称”和“内部服务端口”字段指定的名称和端口。比如,如果Web服务需要访问MySQL服务的3306端口,就可以在Web服务模板的环境变量中,使用类似于和这样jinja2语法进行引用。
子模版 选填。具体含义请参考对“主模板”字段的说明。
模板介绍 选填。用于描述模板的功能和内容等信息。发布模板前,请添加一个对你模板的详尽描述吧。该字段会在首页“实践中心”的应用详情页面进行展现。
用户手册 选填。用于指导学生如何在通过该模板部署的实验环境中,展开具体的实验操作。

查看镜像和推送状态

在后台的实验环境的系统菜单里面可以查看镜像仓库,镜像都是存在这个镜像仓库里面,这个镜像仓库一般介绍云服务器的镜像仓库,如图所示。

点击进入,里面介绍该仓库的镜像和镜像的推送/拉取的状态,如图所示。

镜像的拉取和推送

在后台的实验环境的系统菜单,有一个镜像管理器的菜单,在这可能有镜像的拉取和推送按钮,如图所示。

点击进入,里面介绍了该仓库的基本配置,以及可以拉取和推送镜像,如图所示。