首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用kolla-ansible时插入openstack容器版本?

如何在使用kolla-ansible时插入openstack容器版本?
EN

Stack Overflow用户
提问于 2021-03-21 21:22:21
回答 2查看 496关注 0票数 0

当通过kolla-ansible安装openstack时,您可以在globals.yml中指定openstack版本,即: openstack_release:"victoria“。这是你所能得到的最具体的,没有时间点标签,只有一个移动的目标像“维多利亚”。

根据我的经验,容器是随机更新的,不是一次性更新的,而且经常更新。每次我重建的时候,我都得等着码头拆东西,这些东西自从我上一次部署以来已经改变了。由于多种原因,这是有问题的,其中最尖锐的原因是:

  • 这是一个快速发展的社区驱动项目。由于更改,我每隔几次就必须处理新的问题。如果我将
  • 部署到一组主机上,然后在几个小时后部署到更多的主机上,我将再次等待更新,而我的堆栈正在运行各种不同的
  • 容器,占用时间,使我的部署容易受到超时和网络问题的影响。

为了强调第二个问题是什么问题,通常我可以重置失败的部署,然后再试一次,但并不总是如此。有些时候我遇到了一些遗留问题,而且由于我的不熟悉,抛出新的磁盘并重新开始会更快。我使用的是外部ceph (kolla-ansible:victoria中唯一的ceph选项),它与计算节点并置。在我的工具箱中还没有将池/ OSD状态重置到更早的时间,所以我也擦去了我的OSD并重新做了ceph的安装。我可以将版本钉在ceph容器上,但是一旦kolla-ansible安装开始,我就开始流汗了。对于一个4小时的总安装,有一个不小的机会,另一个容器将改变在这个时候。

对于任何从事IT或软件专业工作的人来说,显而易见的答案是将我的kolla:*容器版本固定在特定的时间点标签上,而不是"victoria“。我可以将每个容器都钉在摘要上,但在编写的剧本中不支持这一点。我需要编辑ansible播放库,并为我想要插入的每个容器添加一个变量。然后在添加新容器时维护该逻辑。我现在要拉43个集装箱。这种方式就像“两个拖车公园的女孩绕着外面走”。

我计划的一个简单得多的方法是把所有的“维多利亚”-tagged容器都拉回来,然后迭代把它们推回我自己的码头回购系统(例如,“维多利亚-20120321”),然后更新globals.yml以使用这个稳定的标签。我刚开始管理我自己的码头回购,所以我不知道我是否能在一个拉深缓存中保留图像,或者我是否需要为此设置一个私人回购,所以我也可能不得不在docker.io和一个私人冰箱回购之间切换kolla-ansible,这取决于我是想做一个最新的-拉还是一个钉-拉。会有点“嘿,19”,更干净更好,还是不太对.

我觉得这种拉-拉-推-再配置-重新部署的方法是黑客攻击。有人有更好的建议吗?例如,如果本地镜像中已经有标记匹配,则不检查上游的容器更改?或者是一种方式,在注册级别上拉着你的后腿?

感谢,提前,也感谢科拉-不可靠的贡献者的所有工作,但没有提供版本的稳定性。

EN

回答 2

Stack Overflow用户

发布于 2021-03-22 01:40:34

这是我目前最喜欢的解决方案,诚然,它仍然是一个黑客:

将最新的图像作为一个批处理,然后标记它们并将它们推送到本地注册表。

首先,我需要两个对接器注册中心:我不能推送到拉式缓存,所以我也需要设置一个私有注册中心,我可以推送到它。

我需要在kolla部署期间来回切换globals.yml中的设置,以实现这一点:

  • 当我运行"kolla-ansible引导服务器“时,我需要配置本地注册表,以便堆栈主机配置有适当的不安全注册中心。当我想更新时,
  • 使用"kolla-ansible pull”预取最新的包。为此,我将kolla/*:victoria.
  • After重新配置为指向registry.
  • Before --我获取最新的容器,在我的堆栈主机上运行一个循环,从拉通缓存中提取它们,用日期标记标记它们到本地注册表,并将它们推到本地registry.
  • Before--我运行实际的部署配置globals.yml来使用本地注册表和标记。

这些是感兴趣的globals.yml设置:

代码语言:javascript
复制
## PINNED CONTAINER VERSIONS
#docker_registry: 192.168.127.220:4001
#docker_namespace: "feralcoder"
#openstack_release: "feralcoder-20210321"

# LATEST CONTAINER VERSIONS
docker_registry:
docker_registry_username: feralcoder
docker_namespace: "kolla"
openstack_release: "victoria"

我的伪代码是这样的(中间步骤被修剪了.):

代码语言:javascript
复制
use_localized_containers () {
  cp $KOLLA_SETUP_DIR/files/kolla-globals-localpull.yml /etc/kolla/globals.yml
  cat $KOLLA_SETUP_DIR/files/kolla-globals-remainder.yml >> /etc/kolla/globals.yml
}

use_latest_dockerhub_containers () {
  # We switch to dockerhub container fetches, to get the latest "victoria" containers
  cp $KOLLA_SETUP_DIR/files/kolla-globals-dockerpull.yml /etc/kolla/globals.yml
  cat $KOLLA_SETUP_DIR/files/kolla-globals-remainder.yml >> /etc/kolla/globals.yml
}

localize_latest_containers () {
  for CONTAINER in `ls $KOLLA_PULL_THRU_CACHE`; do
    ssh_control_run_as_user root "docker image pull kolla/$CONTAINER:victoria" $PULL_HOST
    ssh_control_run_as_user root "docker image tag kolla/$CONTAINER:victoria $LOCAL_REGISTRY/feralcoder/$CONTAINER:$TAG" $PULL_HOST
    ssh_control_run_as_user root "docker image push $LOCAL_REGISTRY/feralcoder/$CONTAINER:$TAG" $PULL_HOST
  done
}

use_localized_containers 
kolla-ansible -i $INVENTORY  bootstrap-servers
use_latest_dockerhub_containers
kolla-ansible -i $INVENTORY pull
localize_latest_containers
use_localized_containers
kolla-ansible -i $INVENTORY deploy
票数 0
EN

Stack Overflow用户

发布于 2021-03-22 17:05:41

对于现有的部署,这里有一个答案:

如果您已经将容器拖到所有主机上,则可以编辑一些ansible或python,以便为所有容器提供docker_container.pull=false。

这是实现模块:

.../lib/python3.6/site-packages/ansible/modules/cloud/docker/docker_container.py.

该文件可能位于/usr/local/share/kolla-ansible/中,或./venvs/kolla-ansible/。当为false时,如果容器存在于主机上,它将不会被重新提取。

这无助于这样的情况:主机还没有取出包,并且您的本地镜像中已经有了一个版本。在这种情况下,堆栈主机将拉出容器,而您的拉通缓存将拉下自上次拉起的任何容器更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66737691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档