一、前言

由于阿里云自带K8S存在细微差距,为了保证大家能够统一的进行服务的部署,这里将以人资项目为背景进行说明,如何部署一个完整的服务到阿里云的K8S上。

二、镜像推送

首先需要根据阿里云服务清单将对应服务通过CI发布到阿里云的镜像仓库中,以保证部署时镜像可以被正确拉取到。相关账户信息可以通过历史CI配置或具体负责人人员获取。

三、发布无状态服务

1. 使用镜像创建

1.png

首先选择“容器服务-Kubernetes”,接着通过左边的菜单点击“无状态”服务,进入到无状态服务后可以看到对应命名空间下的服务,接着我们点击
2.png

通过镜像来创建我们自己的服务,点击后将会进入到如下界面。
3.png

开发者需要根据业务的实际名称填写对应的应用名称,并且需要根据清单中的命名空间选择正确的命名空间进行部署,对于副本数量需要根据业务的实际负载能力进行选择。填写之后我们通过“下一步”进入到后续的服务配置界面。

注意:建议勾选时区同步

2. 容器配置设置

4.png

这里我们需要通过点击“选择镜像”打开镜像的选择看板,通过其中我们需要找到我们推送上去的镜像,完成选择后我们还需要点击“选择镜像Tag”去选择我们需要部署的镜像版本,完成这一些列操作后我们就确定了镜像,但是如果直接进行部署我们将没有权限拉取对应的镜像,所以我们还需要点击“设置镜像密钥”选择登录到镜像仓库的账户信息,当然这里的账户信息均已经提前导入直接按照对应命名空间进行选择即可(cdb选择cbd-images-repository,其他命名空间选择aliyun-cr)具体如下图。
5.png

接着我们需要设置对应容器的初始资源以及上限资源,考虑到实际无法估上限资源,所以这里开发者可以仅设置所需资源保证拥有充足的资源使服务可以快速启动并进入工作状态。
6.png

以上仅仅完成的容器启动的最低需求,下面我们还需要将服务中存在请求的端口等资源进行暴露,这里需要通过以下方式进行。
7.png

这样我们就完成了服务对外能力的提供了。

3. 环境变量设置

由于后台均采用了基于环境变量进行服务配置的读取切换,这里需要通过如下进行设置(ASPNETCORE_ENVIRONMENT=Production)。
8.png

这里仅做为最低配置的要求,如果开发者还有其他需要进行配置按照上图的方式即可。

4. 数据卷

由于我们很多情况下需要进行配置文件的映射,所以我们需要提前在配置项中进行写入。 9.png
这里我们以人资为例说明配置。10.png

其中 config 为应用配置,nlogconfig为日志配置信息,整体配置名为” hrms-back-config”,这里需要注意对应配置的名字,在后续我们修改yaml中将会使用这些名字进行映射。

注意:logstash由于各命名空间独立部署需要修改nlog配置指向到正确地址,一般地址均为 logstash-svc ,同时对于通过内网进行通信的服务也需要修改内部通讯服务的地址。

完成上述的配置文件的初始化工作后,我们回到数据卷进行配置的设置,由于大多数后台的发布路径均一致所以这里可以考虑参照如下进行映射:
l /usr/publish/nlog.Production.config
l /usr/publish/appsettings.Production.json

最终设置的结果如下:
11.png

至此我们仅仅完成了基本的文件映射设置后,后续我们服务创建完成之后我们还需要通过修改yaml文件完成更具体的设置。接着我们点击下一步进入到下一个环节。

5. 访问设置

12.png

对于路由需要根据服务是否需要提供公网的访问能力进行选择,但是对于大多数服务来说均需要提供服务能力,所以我们这里先创建服务。
13.png

完成之后同命名空间的服务就可以通过“test-hrms-svc:5000”访问该服务了,天然的提供了负载均衡的能力。对于需要提供公网访问能力的我们还需要进行路由设置。
14.png

这里我们需要填写对应服务的域名地址,由于有的服务采用前后端分离等,所以还需要进行二级路径的映射,同时所有服务均需要提供TLS能力,并且证书均已上传到对应命名空间中了,开发者仅需要根据域名地址进行选择即可。完成后我们通过点击“创建”即可完成服务的创建工作了。

6. yaml修改

由于阿里云自身的配置文件映射并没有子文件映射,所以我们将无法启动服务,这里我们还需要修改对应的yaml文件实现服务读取正确的配置。15.png

通过点击该按钮我们可以查看到服务的具体yaml文件,这里我们需要根据之前配置设置的key进行调整。
16.png

最终调整后的内容如下:
17.png

主要增加的如下几个配置项

  1. mountPropagation: None
  2. subPath: appsettings.Production.json
  3. mountPropagation: None
  4. subPath: nlog.Production.config
  5. items:
  6. - key: config
  7. path: appsettings.Production.json
  8. items:
  9. - key: nlogconfig
  10. path: nlog.Production.config

完成如上配置后主要域名解析申请成功,我们就可以看到服务已经可以提供访问能力了。