示例

本文将会说明VKUBE的一些使用示例:

  • 简单部署使用
  • VKUBE上如何使用在ghcr或者docker hub的私有镜像
  • VKUBE中多个服务进行网络请求的可能性:
    • 一个用户服务中,部署两个容器,使用localhost网络
    • 两个用户服务部署在任意区域,使用hostIP:port网络
    • 两个用户服务部署在任意区域,使用域名功能
    • 两个用户服务部署在同一区域,使用Alias功能
  • 对于网络请求的额外补充,使用network policy功能
  • VKUBE中使用多个配置文件

简单部署使用

按照自己的需求进行购买相应的资源后,进行付款支付获取Access Token(在VKUBE中也称之为Secret),在containers中使用Access Token进行导入,即可对其进行部署。具体可参考

例如,部署一个nginx服务,这个服务我需要2G 内存,至少一个网络访问的出口,这个服务想在欧洲地区,至少运行半年,那么在我选择服务选项的时候,就对应选择了Europe区域,选择2Resource Unit,即2Gi的内存,2个Host Port的映射数量,选择180天的服务时长,进行下单付款。Service Option的具体情况可参考

部署一个nginx服务,需要准备好了nginx的镜像,无论是使用docker hub (opens new window)上公共的nginx (opens new window),还是自己重新改过的新的镜像。

在部署的弹窗中:

  • Image: nginx:latest
  • Name: myNginx(任意自己想取的名字)
  • Ram Unit: 2(最高上限是在购买时所选择的2 Resource Unit)
  • Port:
    • Container Port: 80(之所以填80,是因为nginx的监听的端口是80)
    • Host Port: 12235(任意你喜欢的端口号,之后VKUBE系统会审核这个端口允许不允许使用)

完成上述内容的填写后,就可以进行部署了。VKUBE系统会为启动一个以nginx:latest作为镜像的container,并映射到Host Port指定的端口上,并限制其内存使用量为2Gi。之后你就可以通过http://HostIP:12235/进行访问了。

VKUBE上如何使用在ghcr或者docker hub的私有镜像

目前VKUBE系统支持Docker hubGithub Container Registry(ghcr)的镜像导入,只需要在镜像的名称前面加上ghcr.io/或者docker.io/即可。且支持他们的私有镜像,只要填入用户的账户以及对应的Access Token即可。推荐使用Access Token的方式进行授权,你可以设置为只读权限,这样就可以尽可能保证你的账户安全性。 关于docker hub可以参考:Personal Access Tokens (opens new window)

alt text 关于ghcr的使用可以参考:Introduction to GitHub Packages (opens new window)

VKUBE的部署弹窗中,在镜像名输入框可以选择使用docker.io或者ghcr.io,末尾有一个方框,选择则表明将使用私有镜像,然后填写用户名和相应的token即可。 alt text

VKUBE中多个服务进行网络请求的可能性

如果需要进行多个服务之间的网络请求,那么在VKUBE中有哪些方式可以实现呢? 假定有这么一个场景,部署一个mongodb服务,这个服务作为DB服务,另外一个服务作为API服务,API服务需要连接到mongodb服务,那么在VKUBE中,该如何实现呢?

一个用户服务中,部署两个容器,使用localhost网络

VKUBE中,可以选择将两个容器部署在同一个pod中,使用localhost网络进行通信。这里需要强调的是,在购买服务的时候,需要购买两个以上的resource-unit,因为一个服务当中,需要两个容器,而一个容器至少需要一个resource-unit,所以需要购买至少两个resource-unit的服务。其他选项可参考简单部署使用进行选择。

在部署的弹窗中,按照预期的需求所得的目标是:

  • 一个服务中启动两个container(说明至少使用2-resource-unit)
  • 明确两个container所需的内存大小(如果服务场景需要更多的内存资源,可以选择购买超过2-resource-unit)
  • 对外暴露的方式,这里选择使用hostPort进行映射
  • DB服务和App服务之间的通信方式,这里选择使用localhost网络
  • 参数的传入,可以选择配置文件或者环境变量的方式进行传入,这里选择环境变量

按照目标进行关于mongodb的部署: alt text

  • Image: 使用了mongo:5.0的镜像作为DB服务

  • Name: mongo

  • Ram Unit: 申明1Gi的内存(总共可申请2Gi,因为购买的是2 resource-unit)

  • Mount Path: 填写/data/db作为数据存储路径进行持久化(这是由于mongodb本身的数据存储路径是/data/db,所以填写了/data/db

  • Port: 无。不需要对外暴露端口,db服务在这个方案中,使用localhost进行通信,不需要对外暴露服务

  • Config:无。在这个方案中,没有选择使用配置文件来作为参数的传入。

  • Environment Variables:填写相应的环境变量,这里填写了MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD,用于初始化mongodb的root用户和密码。这里设置的值为user和password。

  • Add Container: 在同一个服务当中添加多一个container。该按钮在整个部署弹窗的右上角,点击即可添加一个container。 按照目标进行关于web app的部署: alt text

  • Image: 使用了nanajanashia/k8s-demo-app:v1.0的镜像作为web appliacation服务

  • Name: app

  • Ram Unit: 申明1Gi的内存(现在只能申请1Gi了,因为购买的是2 resource-unit,之前的mongo已经申请了1Gi)

  • Mount Path: 无。作为web app服务,不需要挂载任何数据存储路径。

  • Port:

    • Container Port:3000。因为这个程序监听了3000端口
    • Host Port:12345。这里选择了12345作为映射端口,部署成功后,就可以通过HostIP:12345在公共网络上访问这个服务了。
  • Config:无。在这个方案中,没有选择使用配置文件来作为参数的传入。

  • Environment Variables:根据自己的程序填写相应的环境变量。这里的web App程序需要以下的参数:

    • USER_NAME:user。此为mongodb的账户名
    • USER_PWD:password。此为mongodb的账户密码
    • DB_URL:localhost。此为所连接的mongodb的地址,因为在一个内网当中,没有暴露到公网,所以使用了localhost。

点击Deploy即可部署完成。

使用两个容器在一个服务当中,使用的是localhost网络进行通信,可以快速实现两个服务之间的通信,而且网络通信是最快的了,但是这种方式不够灵活,如果想对web app重启一下,db服务也会一同重启。所以,可以采用两个不同的服务分别部署db服务和web app服务。使用两个服务的话,他们之间的通信,可以有:

  • hostIP:port的方式进行通信。可以在任意的region中实现,因为是通过最一般ip加端口的方式进行通信。
  • domain的方式进行通信。使用VKUBE代理,帮助用户的域名可以代理到用户在VKUBE的服务(仅限HTTP协议代理)。也可以在任意的region中实现,但就是需要用户自己拥有域名。
  • Alias的方式进行通信。相当于VKUBE内的域名,仅就内网使用,所以仅能在同一个region当中使用,但不需要用户自己拥有域名。

两个用户服务部署在任意区域,使用hostIP:port网络

VKUBE中,我们可以将两个服务分别部署在不同的pod中,使用host:port进行通信。

在部署的弹窗中,按照预期的需求所得的目标是:

  • 可以部署1个container的两个服务(说明每一个至少使用1-resource-unit)
  • 分别明确两个服务的container所需的内存大小(如果服务场景需要更多的内存资源,可以选择购买超过1-resource-unit)
  • 对外暴露的方式,这里选择使用hostPort进行映射
  • DB服务和App服务之间的通信方式,这里选择使用hostPort网络,db的访问接口也会对外暴露
  • 参数的传入,可以选择配置文件或者环境变量的方式进行传入,这里选择环境变量

在DB服务的部署中: alt text

  • Image: 使用了mongo:5.0的镜像作为DB服务
  • Name: mongo
  • Ram Unit: 只能申明1Gi的内存(总共可申请1Gi,因为购买的是1resource-unit)
  • Mount Path: 填写/data/db作为数据存储路径进行持久化(这是由于mongodb本身的数据存储路径是/data/db,所以填写了/data/db
  • Port:
    • Container Port:27017。因为这个程序监听了27017端口
    • Host Port:27017。这里选择了27017作为映射端口,部署成功后,就可以通过HostIP:27017在英特网上访问这个服务了。
  • Config:无。在这个方案中,没有选择使用配置文件来作为参数的传入。
  • Environment Variables:填写相应的环境变量,这里填写了MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD,用于初始化mongodb的root用户和密码。这里设置的值为user和password。

需要注意的地方是使用了Port,这个服务使用了hostport对外暴露了服务。

在web app服务的部署中: alt text

  • Image: 使用了nanajanashia/k8s-demo-app:v1.0的镜像作为web appliacation服务
  • Name: app
  • Ram Unit: 只能申明1Gi的内存(因为购买的是1 resource-unit)
  • Mount Path: 无。作为web app服务,不需要挂载任何数据存储路径。
  • Port:
    • Container Port:3000。因为这个程序监听了3000端口
    • Host Port:12345。这里选择了12345作为映射端口,部署成功后,就可以通过HostIP:12345在公共网络上访问这个服务了。
  • Config:无。在这个方案中,没有选择使用配置文件来作为参数的传入。
  • Environment Variables:根据自己的程序填写相应的环境变量。这里的web App程序需要以下的参数:
    • USER_NAME:user。此为mongodb的账户名
    • USER_PWD:password。此为mongodb的账户密码
    • DB_URL:填写前面mongodb服务所使用的hostIP(只用填写ip是因为这个web程序已经默认了27017的端口号了,所以就只用填写hostIP)。

到现在,已经部署了两个独立的服务了,他们通过hostIP和hostPort进行网络通信。即,web app通过DB-HostIP:HostPort和mongodb进行网络通信,用户通过web-HostIP:HostPort在浏览器中对web网页进行访问。


两个用户服务部署在任意区域,使用域名网络

VKUBE中,我们可以将两个服务分别部署在不同的pod中,设置域名进行通信。

在DB服务的部署中: alt text

  • Image: 使用了mongo:5.0的镜像作为DB服务
  • Name: mongo
  • Ram Unit: 只能申明1Gi的内存(总共可申请1Gi,因为购买的是1resource-unit)
  • Mount Path: 填写/data/db作为数据存储路径进行持久化(这是由于mongodb本身的数据存储路径是/data/db,所以填写了/data/db
  • Port:
    • Container Port:27017。因为这个程序监听了27017端口
    • Host Port:27017。这里选择了27017作为映射端口,部署成功后,就可以通过HostIP:27017在公共网络上访问这个服务了。可以通过设置域名来辅助访问。
  • Config:无。在这个方案中,没有选择使用配置文件来作为参数的传入。
  • Environment Variables:填写相应的环境变量,这里填写了MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD,用于初始化mongodb的root用户和密码。这里设置的值为user和password。

在用户自己的域名服务商中,例如,设置添加db.mydomain.com域名 A Record到上述Mongodb的HostIP中。

在web app服务的部署中: alt text

  • Image: 使用了nanajanashia/k8s-demo-app:v1.0的镜像作为web appliacation服务
  • Name: app
  • Ram Unit: 只能申明1Gi的内存(因为购买的是1 resource-unit)
  • Mount Path: 无。作为web app服务,不需要挂载任何数据存储路径。
  • Port: 无。不使用hostPort这一方式进行通信,选择通过VKUBE进行HTTP的域名代理服务来作为网络通信的路径。
  • Config:无。在这个方案中,没有选择使用配置文件来作为参数的传入。
  • Environment Variables:根据自己的程序填写相应的环境变量。这里的web App程序需要以下的参数:
    • USER_NAME:user。此为mongodb的账户名
    • USER_PWD:password。此为mongodb的账户密码
    • DB_URLdb.mydomain.com。此为前面所设置的域名,VKUBE将会代理这个域名到对应的mongodb服务中。

这里也可以在Actions中,选择Domain按钮,添加域名。例如添加了app.mydomain.com的域名。 alt text

到现在,已经部署了两个独立的服务了,他们通过域名进行网络通信,最终代理到对应的服务。即,web app通过db.mydomain.com:27017(或者HostIP:27017)和mongodb进行网络通信,用户通过app.mydomain.com:80在浏览器中对web网页进行访问。

注意: VKUBE的域名服务仅提供了域名的应用层代理功能,仅支持HTTP/HTTPS的80端口和443端口的代理。

两个用户服务部署在同一区域,使用Alias网络

VKUBE中,我们可以将两个服务分别部署在不同的pod中,设置Alias进行通信。注意这两个服务必须在同一个region中才可以。 基本的需求分析和hostPort一样,细节在于部署的时候,不需要使用hostPort了。

在DB服务的部署中: alt text

  • Image: 使用了mongo:5.0的镜像作为DB服务
  • Name: mongo
  • Ram Unit: 只能申明1Gi的内存(总共可申请1Gi,因为购买的是1resource-unit)
  • Mount Path: 填写/data/db作为数据存储路径进行持久化(这是由于mongodb本身的数据存储路径是/data/db,所以填写了/data/db
  • Port: 无。不使用hostPort这一方式进行通信。
  • Config:无。在这个方案中,没有选择使用配置文件来作为参数的传入。
  • Environment Variables:填写相应的环境变量,这里填写了MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD,用于初始化mongodb的root用户和密码。这里设置的值为user和password。

在Actions中,选择Alias按钮,添加别名。例如添加了mydb的别名。 alt text

在web app服务的部署中: alt text

  • Image: 使用了nanajanashia/k8s-demo-app:v1.0的镜像作为web appliacation服务
  • Name: app
  • Ram Unit: 只能申明1Gi的内存(因为购买的是1 resource-unit)
  • Mount Path: 无。作为web app服务,不需要挂载任何数据存储路径。
  • Port:
    • Container Port:3000。因为这个程序监听了3000端口
    • Host Port:12345。这里选择了12345作为映射端口,部署成功后,就可以通过HostIP:12345在公共网络上访问这个服务了。
  • Config:无。在这个方案中,没有选择使用配置文件来作为参数的传入。
  • Environment Variables:根据自己的程序填写相应的环境变量。这里的web App程序需要以下的参数:
    • USER_NAME:user。此为mongodb的账户名
    • USER_PWD:password。此为mongodb的账户密码
    • DB_URL:mydb。此为前面所设置的别名,仅能在同一个region的服务之间进行通信。

这里的web appliacation服务对外暴露服务就需要使用hostPort或者domain来完成了。可参考前面

到现在,已经部署了两个独立的服务了,他们通过域名进行网络通信,最终代理到对应的服务。即,web app通过mydb:27017和mongodb进行网络通信。


对于网络请求的额外补充,使用network policy功能

目前VKUBE的Network Policy可以提供网络入口的白名单设置,可以设置允许VKUBE中的什么服务可以进行访问。

例如在上述的例子中,可以为mongodb设置一个policy,仅允许app服务访问,起到一个安全的保护作用。那么就可以在Actions中,选择Policy按钮,添加策略。 alt text 在输入框中写入web app服务的user service id即可。

VKUBE中使用多个配置文件

VKUBE中,我们可以将多个配置文件作为参数传入到容器中,这样可以实现配置文件的动态更新。下面将用两个例子来说明。

部署一个静态网页,使用nginx作为web服务器,并将静态html内容作为配置文件传入到容器中。 在nginx的部署中: alt text 配置文件的路径为/usr/share/nginx/html/index.html,我们可以将静态html内容写入这个文件中。 alt text

  • Image: 使用了nginx:latest的镜像作为web appliacation服务
  • Name: web
  • Ram Unit: 只能申明1Gi的内存(因为购买的是1 resource-unit)
  • Mount Path: 无。作为web app服务,不需要挂载任何数据存储路径。
  • Port:
    • Container Port:80。因为这个程序监听了80端口
    • Host Port:12345。这里选择了12345作为映射端口,部署成功后,就可以通过HostIP:12345在英特网上访问这个服务了。可以通过设置域名来辅助访问。
  • Config
    • Config Path: /usr/share/nginx/html/index.html
    • Config Content: 填写配置文件的内容,在现在这个例子中,写的是静态html内容
  • Environment Variables:无。在这个方案中,没有选择使用环境变量来作为参数的传入。

在Actions中,选择Config,可以查看当前已经设置的配置文件,以及修改配置文件的内容。 注意,在Config只能修改配置文件的内容,无法增加和删除配置文件的数量,也无法修改配置文件的路径以及文件名,在修改后如果程序没有热加载功能,则需要在Actions中执行Restart功能,让程序重新启动读取新的配置文件内容。 如果想增加或者删除配置文件,修改文件的路径以及名称的,可以在Redeploy中处理。

在同一个 Pod 中运行两个容器,一个容器运行Nginx,用一个配置文件来提供静态网页,另一个容器运行一个简单的 HTTP 服务器(例如,基于 Python 的 http.server),用于提供动态内容。

alt text

  • Image: 使用了nginx:latest的镜像作为web appliacation服务
  • Name: static
  • Ram Unit: 申明1Gi的内存
  • Mount Path: 无。作为web app服务,不需要挂载任何数据存储路径。
  • Port:
    • Container Port:80。因为这个程序监听了80端口
    • Host Port:12345。这里选择了12345作为映射端口,部署成功后,就可以通过HostIP:12345在英特网上访问这个服务了。可以通过设置域名来辅助访问。
  • Config
    • Config Path: /usr/share/nginx/html/index.html
      • Config Content: 填写配置文件的内容,在现在这个例子中,写的是静态html内容
    • Config Path: /etc/nginx/conf.d/default.conf
      • Config Content: 填写配置文件的内容,在现在这个例子中,写的是nginx的默认配置文件内容,增加了读取app服务的路由
  • Environment Variables:无。在这个方案中,没有选择使用环境变量来作为参数的传入。

alt text

  • Image: 使用了python:3.9-alpine的镜像作为web appliacation服务
  • Name: app
  • Ram Unit: 申明1Gi的内存
  • Mount Path: 无。作为web app服务,不需要挂载任何数据存储路径。
  • Port: 无。通过localhost通信。
  • Config
    • Config Path: /app/app.py
    • Config Content: 填写配置文件的内容,在现在这个例子中,写的是一个简单的Python HTTP服务器脚本
  • Environment Variables:无。在这个方案中,没有选择使用环境变量来作为参数的传入。

最终的部署结果是,可以通过HostIP:12345访问到一个静态网页,它的内容是通过/usr/share/nginx/html/index.html配置文件提供的,和通过请求python编写的简单HTTP服务返回的内容构成,通过/etc/nginx/conf.d/default.conf完成路由规则的设置,通过/app/app.py脚本提供HTTP服务。

上次更新: 2024/10/21 上午2:12:53