当通过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”,更干净更好,还是不太对.
我觉得这种拉-拉-推-再配置-重新部署的方法是黑客攻击。有人有更好的建议吗?例如,如果本地镜像中已经有标记匹配,则不检查上游的容器更改?或者是一种方式,在注册级别上拉着你的后腿?
感谢,提前,也感谢科拉-不可靠的贡献者的所有工作,但没有提供版本的稳定性。
发布于 2021-03-22 01:40:34
这是我目前最喜欢的解决方案,诚然,它仍然是一个黑客:
将最新的图像作为一个批处理,然后标记它们并将它们推送到本地注册表。
首先,我需要两个对接器注册中心:我不能推送到拉式缓存,所以我也需要设置一个私有注册中心,我可以推送到它。
我需要在kolla部署期间来回切换globals.yml中的设置,以实现这一点:
。
这些是感兴趣的globals.yml设置:
## 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"我的伪代码是这样的(中间步骤被修剪了.):
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发布于 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时,如果容器存在于主机上,它将不会被重新提取。
这无助于这样的情况:主机还没有取出包,并且您的本地镜像中已经有了一个版本。在这种情况下,堆栈主机将拉出容器,而您的拉通缓存将拉下自上次拉起的任何容器更新。
https://stackoverflow.com/questions/66737691
复制相似问题