簡體   English   中英

Octavia:嘗試刪除不可變負載均衡器

[英]Octavia: Trying to delete immutable loadbalancer

我有一個要刪除的負載均衡器(請參閱下面的狀態)。 我已經刪除了其池中的實例。 完全披露:這是在我重新啟動的 Devstack 上,並在其中手動重新創建了lb-mgmt-network路由。 重啟后我可能忽略了一個細節。 負載均衡器在重啟前工作。

刪除負載均衡器的第一步是刪除其池成員。 這將失敗如下:

$ alias olb='openstack loadbalancer'
$ olb member delete website-pool 08f55..
Load Balancer 1ff... is immutable and cannot be updated. (HTTP 409)

我該怎么做才能使它可變?

下面,在重新創建o-hm0路由並重新啟動 amphora 后,查看負載均衡器的狀態。 它的配置狀態是 ERROR,但根據 API ,這應該使我能夠刪除它:

$ olb status show kubelb
{
    "loadbalancer": {
        "id": "1ff7682b-3989-444d-a1a8-6c91aac69c45",
        "name": "kubelb",
        "operating_status": "ONLINE",
        "provisioning_status": "ERROR",
        "listeners": [
            {
                "id": "d3c3eb7f-345f-4ded-a7f8-7d97e3af0fd4",
                "name": "weblistener",
                "operating_status": "ONLINE",
                "provisioning_status": "ACTIVE",
                "pools": [
                    {
                        "id": "9b0875e0-7d16-4ebc-9e8d-d1b90d4264a6",
                        "name": "website-pool",
                        "provisioning_status": "ACTIVE",
                        "operating_status": "ONLINE",
                        "members": [
                            {
                                "id": "08f55bba-260a-4b83-ad6d-f9d6b44f0e2c",
                                "name": "",
                                "operating_status": "NO_MONITOR",
                                "provisioning_status": "ACTIVE",
                                "address": "172.16.0.21",
                                "protocol_port": 80
                            },
                            {
                                "id": "f7665e90-dad0-480e-8ef4-65e0a042b9fa",
                                "name": "",
                                "operating_status": "NO_MONITOR",
                                "provisioning_status": "ACTIVE",
                                "address": "172.16.0.22",
                                "protocol_port": 80
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

當負載均衡器處於 ERROR 狀態時,您有兩個選擇:

  1. 使用級聯刪除選項(cli 上的 --cascade)刪除負載均衡器。
  2. 使用故障轉移 API 告訴 Octavia 在您的雲修復后修復負載均衡器。

在 Octavia 中,操作狀態是一種測量/觀察狀態。 如果他們不聯機,則 lb-mgmt-net 可能存在網絡配置問題,並且運行狀況心跳消息 (UDP 5555) 未將其返回到運行狀況管理器控制器。

也就是說,devstack 未設置為在重新啟動后工作。 特別是 neutron 和網絡接口將處於不正確的狀態。 正如您所發現的,您可以手動重新配置這些內容,並且通常可以重新開始工作。

如果我正確理解文檔和源代碼,則可以刪除配置狀態為 ERROR 的負載均衡器,但不能修改 不幸的是,它只能在其池和偵聽器被刪除后才能刪除,這會修改負載均衡器。 對我來說看起來像雞和蛋的問題。 我通過從頭開始重新創建雲來“解決”這個問題。 我想我也可以清理數據庫。

對 stack.sh 日志文件的分析表明,需要一些額外的步驟來使 Devstack 雲重新啟動。 要使 Octavia 准備就緒:

  • 創建/var/run/octavia ,由 stack 用戶擁有
  • 確保 o-hm0 已啟動
  • 給 o-hm0 正確的 MAC 和 IP 地址,都可以在 Neutron 端口的細節中找到 Octavia -health-manager-standalone-listen-port
  • 為來自 o-hm0 的流量添加 netfilter 規則

在這一點上,我覺得我可以重新啟動 Devstack 並且仍然可以使用負載平衡器。 奇怪的是,所有負載平衡器的operation_status (以及它們的監聽器和池的operation_status )都是離線的。 但是,這並不妨礙它們工作。 我還沒有找到如何在線制作。

如果有人感興趣,下面是我在重新啟動 Devstack 后使用的腳本。 此外,我還更改了 Netplan 配置,以便 br-ex 獲取服務器的 IP 地址(下文進一步介紹)。

恢復開發堆棧腳本:

$ cat restore-devstack

source ~/devstack/openrc admin admin

if losetup -a | grep -q /opt/stack/data/stack-volumes
then echo loop devices are already set up
else
    sudo losetup -f --show --direct-io=on /opt/stack/data/stack-volumes-default-backing-file
    sudo losetup -f --show --direct-io=on /opt/stack/data/stack-volumes-lvmdriver-1-backing-file
    echo restarting Cinder Volume service
    sudo systemctl restart devstack@c-vol
fi
sudo lvs
openstack volume service list
echo
echo recreating /var/run/octavia
sudo mkdir /var/run/octavia
sudo chown stack /var/run/octavia
echo
echo setting up the o-hm0 interface
if ip l show o-hm0 | grep -q 'state DOWN'
then sudo ip l set o-hm0 up
else echo o-hm0 interface is not DOWN
fi

HEALTH_IP=$(openstack port show octavia-health-manager-standalone-listen-port -c fixed_ips -f yaml | grep ip_address | cut -d' ' -f3)
echo health monitor IP is $HEALTH_IP
if ip a show dev o-hm0 | grep -q $HEALTH_IP
then echo o-hm0 interface has IP address
else sudo ip a add ${HEALTH_IP}/24 dev o-hm0
fi
HEALTH_MAC=$(openstack port show octavia-health-manager-standalone-listen-port -c mac_address -f value)
echo health monitor MAC is $HEALTH_MAC
sudo ip link set dev o-hm0 address $HEALTH_MAC
echo o-hm0 MAC address set to $HEALTH_MAC
echo route to loadbalancer network:
ip r show 192.168.0.0/24
echo
echo fix netfilter for Octavia
sudo iptables -A INPUT -i o-hm0 -p udp -m udp --dport 20514 -j ACCEPT
sudo iptables -A INPUT -i o-hm0 -p udp -m udp --dport 10514 -j ACCEPT
sudo iptables -A INPUT -i o-hm0 -p udp -m udp --dport 5555 -j ACCEPT
echo fix netfilter for Magnum
sudo iptables -A INPUT -d 192.168.1.200/32 -p tcp -m tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -d 192.168.1.200/32 -p tcp -m tcp --dport 9511 -j ACCEPT

網絡規划配置:

$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    enp1s0:
      dhcp4: no
    br-ex:
      addresses: [192.168.1.200/24]
      nameservers: { addresses: [192.168.1.16,1.1.1.1] }
      gateway4: 192.168.1.1
  version: 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM