示例
本文将会说明VKUBE
的一些使用示例:
- 简单部署使用
- 在
VKUBE
上如何使用在ghcr或者docker hub的私有镜像 - 在
VKUBE
中多个服务进行网络请求的可能性:- 一个用户服务中,部署两个容器,使用localhost网络
- 两个用户服务部署在任意区域,使用hostIP:port网络
- 两个用户服务部署在任意区域,使用域名功能
- 两个用户服务部署在同一区域,使用Alias功能
- 对于网络请求的额外补充,使用network policy功能
- 在
VKUBE
中使用多个配置文件
简单部署使用
按照自己的需求进行购买相应的资源后,进行付款支付获取Access Token
(在VKUBE
中也称之为Secret
),在containers中使用Access Token
进行导入,即可对其进行部署。具体可参考。
例如,部署一个nginx
服务,这个服务我需要2G 内存,至少一个网络访问的出口,这个服务想在欧洲地区,至少运行半年,那么在我选择服务选项的时候,就对应选择了Europe
区域,选择2
个Resource Unit
,即2
个Gi
的内存,2个Host Port的映射数量,选择180天的服务时长,进行下单付款。Service Option的具体情况可参考。
部署一个nginx
服务,需要准备好了nginx
的镜像,无论是使用docker hub (opens new window)上公共的nginx (opens new window),还是自己重新改过的新的镜像。
在部署的弹窗中:
Image
: nginx:latestName
: myNginx(任意自己想取的名字)Ram Unit
: 2(最高上限是在购买时所选择的2Resource 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 hub
和Github Container Registry(ghcr)
的镜像导入,只需要在镜像的名称前面加上ghcr.io/
或者docker.io/
即可。且支持他们的私有镜像,只要填入用户的账户以及对应的Access Token
即可。推荐使用Access Token
的方式进行授权,你可以设置为只读权限,这样就可以尽可能保证你的账户安全性。
关于docker hub可以参考:Personal Access Tokens (opens new window)
关于ghcr的使用可以参考:Introduction to GitHub Packages (opens new window)
在VKUBE
的部署弹窗中,在镜像名输入框可以选择使用docker.io
或者ghcr.io
,末尾有一个方框,选择则表明将使用私有镜像,然后填写用户名和相应的token即可。
在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的部署:
Image
: 使用了mongo:5.0的镜像作为DB服务Name
: mongoRam Unit
: 申明1Gi的内存(总共可申请2Gi,因为购买的是2 resource-unit)Mount Path
: 填写/data/db
作为数据存储路径进行持久化(这是由于mongodb本身的数据存储路径是/data/db
,所以填写了/data/db
)Port
: 无。不需要对外暴露端口,db服务在这个方案中,使用localhost进行通信,不需要对外暴露服务Config
:无。在这个方案中,没有选择使用配置文件来作为参数的传入。Environment Variables
:填写相应的环境变量,这里填写了MONGO_INITDB_ROOT_USERNAME
和MONGO_INITDB_ROOT_PASSWORD
,用于初始化mongodb的root用户和密码。这里设置的值为user和password。Add Container
: 在同一个服务当中添加多一个container。该按钮在整个部署弹窗的右上角,点击即可添加一个container。 按照目标进行关于web app的部署:Image
: 使用了nanajanashia/k8s-demo-app:v1.0的镜像作为web appliacation服务Name
: appRam 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服务的部署中:
Image
: 使用了mongo:5.0的镜像作为DB服务Name
: mongoRam 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_USERNAME
和MONGO_INITDB_ROOT_PASSWORD
,用于初始化mongodb的root用户和密码。这里设置的值为user和password。
需要注意的地方是使用了Port
,这个服务使用了hostport对外暴露了服务。
在web app服务的部署中:
Image
: 使用了nanajanashia/k8s-demo-app:v1.0的镜像作为web appliacation服务Name
: appRam 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服务的部署中:
Image
: 使用了mongo:5.0的镜像作为DB服务Name
: mongoRam 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_USERNAME
和MONGO_INITDB_ROOT_PASSWORD
,用于初始化mongodb的root用户和密码。这里设置的值为user和password。
在用户自己的域名服务商中,例如,设置添加db.mydomain.com
域名 A Record到上述Mongodb的HostIP中。
在web app服务的部署中:
Image
: 使用了nanajanashia/k8s-demo-app:v1.0的镜像作为web appliacation服务Name
: appRam 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_URL
:db.mydomain.com
。此为前面所设置的域名,VKUBE
将会代理这个域名到对应的mongodb服务中。
这里也可以在Actions中,选择Domain
按钮,添加域名。例如添加了app.mydomain.com
的域名。
到现在,已经部署了两个独立的服务了,他们通过域名进行网络通信,最终代理到对应的服务。即,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服务的部署中:
Image
: 使用了mongo:5.0的镜像作为DB服务Name
: mongoRam Unit
: 只能申明1Gi的内存(总共可申请1Gi,因为购买的是1resource-unit)Mount Path
: 填写/data/db
作为数据存储路径进行持久化(这是由于mongodb本身的数据存储路径是/data/db
,所以填写了/data/db
)Port
: 无。不使用hostPort这一方式进行通信。Config
:无。在这个方案中,没有选择使用配置文件来作为参数的传入。Environment Variables
:填写相应的环境变量,这里填写了MONGO_INITDB_ROOT_USERNAME
和MONGO_INITDB_ROOT_PASSWORD
,用于初始化mongodb的root用户和密码。这里设置的值为user和password。
在Actions中,选择Alias
按钮,添加别名。例如添加了mydb
的别名。
在web app服务的部署中:
Image
: 使用了nanajanashia/k8s-demo-app:v1.0的镜像作为web appliacation服务Name
: appRam 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
按钮,添加策略。
在输入框中写入web app服务的user service id即可。
在VKUBE
中使用多个配置文件
在VKUBE
中,我们可以将多个配置文件作为参数传入到容器中,这样可以实现配置文件的动态更新。下面将用两个例子来说明。
部署一个静态网页,使用nginx作为web服务器,并将静态html内容作为配置文件传入到容器中。
在nginx的部署中:
配置文件的路径为/usr/share/nginx/html/index.html
,我们可以将静态html内容写入这个文件中。
Image
: 使用了nginx:latest的镜像作为web appliacation服务Name
: webRam 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),用于提供动态内容。
Image
: 使用了nginx:latest的镜像作为web appliacation服务Name
: staticRam 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
:无。在这个方案中,没有选择使用环境变量来作为参数的传入。
Image
: 使用了python:3.9-alpine的镜像作为web appliacation服务Name
: appRam 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服务。