![](/img/trans.png)
[英]How update OpenStack in Pike version installed by Kolla-Ansible
[英]How to pin openstack container versions when using kolla-ansible?
通過 kolla-ansible 安裝 openstack 時,您在 globals.yml 中指定 openstack 版本,即:openstack_release: "victoria"。 這是盡可能具體的,沒有時間點標簽,只是像“維多利亞”這樣的移動目標。
根據我的經驗,容器是隨機更新的,而不是一次性更新,而且是經常更新的。 每次我重建時,我都不得不等待 docker 拉下自上次部署以來發生變化的事情。 由於多種原因,這是有問題的,最嚴重的是:
為了強調第二個問題是什么問題,通常我可以重置失敗的部署並重試,但並非總是如此。 有時我會遇到遺留問題,由於我的菜鳥,轉儲新磁盤並重新開始會更快。 我正在使用與計算節點位於同一位置的外部 ceph(kolla-ansible:victoria 中唯一的 ceph 選項)。 將池 / OSD state 重置到更早的時間點還沒有在我的工具箱中,所以我還擦除了我的 OSD 並重做 ceph 安裝。 我可以在 ceph 容器上固定版本,但是一旦 kolla-ansible 安裝開始,我就會開始出汗。 對於 4 小時的總安裝,此時另一個容器發生更改的可能性不小。
對於專業從事 IT 或軟件的任何人來說,顯而易見的答案是將我的 kolla:* 容器版本固定到特定的時間點標簽,而不是“維多利亞”。 我可以將每個容器固定到摘要中,但這在劇本中不支持。 我需要編輯 ansible 劇本並為我要固定的每個容器添加一個變量。 然后在添加新容器時保持該邏輯。 我現在正在拉 43 個容器。 這種方法感覺就像“2 個拖車公園女孩 go '圍繞外面”。
我計划的一個更簡單的方法是拉出所有帶有“victoria”標簽的容器,然后通過將它們推回我自己的 docker 存儲庫(例如,“victoria-feralcoder-20120321”)進行迭代,然后更新全局變量。 yml 來使用這個穩定的標簽。 我是管理自己的 docker 存儲庫的新手,所以我不知道是否可以在拉出緩存中重新標記圖像,或者是否需要為此設置私有存儲庫,所以我可能還必須切換 kolla - 可以在 docker.io 和私人 feralcoder 存儲庫之間進行操作,具體取決於我是要進行最新拉動還是固定拉動。 那會有點“嘿十九”,更干凈,更好,但仍然不太正確......
我覺得這種 pull-retag-push-reconfigure-redeploy 方法是 hack jankery。 有人有更好的建議嗎? 比如,如果本地鏡像中已經有標簽匹配,不檢查上游的容器更改? 或者也許是一種在注冊表級別進行拉通和重新標記的方法?
在此先感謝,也感謝 kolla-ansible 貢獻者所做的所有工作,除了不提供版本穩定性。
這是我目前首選的解決方案,誠然,它仍然是一個 hack:
批量拉取最新圖像,然后標記它們並將它們推送到本地注冊表。
首先,我需要 2 個 docker 注冊表:我無法推送到拉入式緩存,因此我還需要設置一個可以推送到的私有注冊表。
我需要在 kolla-ansible 部署期間來回切換 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
對於現有部署,這是一個答案:
如果您已經將容器拉到所有主機,您可以編輯一些 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 時,如果容器存在於主機上,則不會被拉回。
這無助於主機尚未拉取 package 並且您的本地鏡像中已有版本的情況。 在這種情況下,堆棧主機將拉取容器,而您的拉取緩存將拉取自上次拉取以來的所有容器更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.