一位新加入的人试图在DevStack上使用Tacker的故事

目录

1. 首先
2. 环境
3. 安装步骤
4. 遇到的错误
5. 总结

URL的参考

    • Install via Devstack

 

    • DevStack

 

    • OpenStack Configuration

 

    Welcome to kuryr-kubernetes’s documentation!

首先

你好。我是一位新员工,入职大约三个月了。

这篇文章将分为多个章节,记载一个对NFV一词一无所知的新人通过参考DevStack的安装进行了DevStack环境的安装,并登记了OpenStack和Kubernetes作为VIM的步骤以及遇到的错误。

    第 1 章: この記事です。

我将尝试通过Devstack进行安装。

    第 2 章: 続く。。。

我在此次安装过程中所调查的术语已总结如下。

网络功能虚拟化 (Network Function Virtualization)

这是一种在通用服务器的虚拟化基础设施上以软件形式实现网络功能的方式。
ETSI(欧洲电信标准化机构)提倡的NFV架构中,将其分为VNF、NFVI和MANO三个领域。

VNF(虚拟网络功能)

这是一个作为虚拟机运行的网络设备。
这是用来替代现有网络设备的想法。

网络功能虚拟化基础设施 (NFVI)

用于运行VNF的物理资源和虚拟化功能。
包括服务器、存储等硬件资源以及用于虚拟化的虚拟机监控程序。

NFV MANO(管理与编排)

提供硬件资源、软件资源、VNF管理功能和编排功能。
由以下三个功能组成。

NFVO (NFV Orchestrator)
自動化の中心的な役割を担い、複数の VNF から構成されるネットワークサービスのライフサイクルを管理し、システム全体を統合的に運用します。

VNFM (VNF Manager)
VNF が必要なリソースや VNF のライフサイクルを管理します。

VIM (Virtualized Infrastructure Manager)
NFVI を制御します。
OpenStack や Kubernetes といったものが該当し、必要な VM やリソースの割り当てを行います。

VNF描述符 (VNF Descriptor)

这是一个基于TOSCA的YAML格式的模板,相当于VNF目录。

    • TOSCA (Topology and Orchestration Specification for Cloud Applications)

 

    クラウドアプリケーション向けトポロジ・オーケストレーションに関する仕様です。

查找者

NFVO(NFV编配器)和VNFM(VNF管理器)。

通过基于目录化的网络服务(NSD)和目录化的虚拟网络功能(VNFD),通过基础设施驱动程序将VNF及其相关网络部署到VIM中。

跟踪器-导员(tacker-conductor)和跟踪器-服务器(tacker-server)是由MySQL进程组成的。
MySQL是一个数据库,记录了注册的VIM信息等。
在安装了DevStack环境后,您也可以实际查看MySQL的内容。

导轨导线

指挥者在这里的意思是指导员、向导,或者是音乐术语中的指挥者。因此,这部分是指负责执行Tacker接收到的处理并担任对VIM进行API客户端操作的角色的部分。

追踪器服务器

接受来自NFVO和VNF的请求。
根据所接收的请求,将其传递给tacker-conductor或MySQL进行处理。

环境

我在ESXi上准备了以下配置的虚拟机。
所使用的操作系统是Ubuntu 20.04 LTS。

自環境推奨環境CPU4 core4core 以上RAM16GB16GB 以上Storage160GB80GB 以上

在虚拟机准备完成后,使用以下命令将其更新到最新状态并重新启动。

sudo apt-get update
sudo apt-get upgrade

如果您的系统(例如ESXi)可以使用快照功能,建议您在此阶段将其记录为初始状态。

安装步骤

这个过程在本环境下成功地安装完成了。
将发生的错误总结为4个,即发生的错误。

安装Tacker

安装Tacker的第一步是克隆Devstack并准备local.conf。

Devstack
OpenStack を簡単にデプロイするためのツールです。

local.conf
このファイルには、インストールに必要なさまざまな構成オプションが含まれています。

创建DevStack安装用户

创建一个用于安装DevStack的用户。

sudo useradd -s /bin/bash -d /opt/stack -m stack
sudo chmod +x /opt/stack
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
sudo -u stack -i

下载 DevStack

根据需要,在Git上使用特定分支获取Devstack。
此次将使用2022/4/30发布的Yoga版。

git clone https://opendev.org/openstack/devstack.git
cd devstack
git checkout stable/yoga

准备 local.conf 文件

通过local.conf文件启用Tacker相关的Devstack插件。本次使用的是面向Openstack和Kubernetes作为VIM的插件。

在取得之后,将 HOST_IP 的值更改为自己环境中的IP。
通过将其更改为可以从本地主机外部连接的IP,可以实现从外部访问Horizon。

在本环境中,最终使用的 local.conf 如下所示。所有启用的插件都使用了 stable/yoga 版本。在 master 版本中发生了后面要提到的错误。

[[local|localrc]]
############################################################
# Customize the following HOST_IP based on your installation
############################################################
HOST_IP=10.100.2.220

ADMIN_PASSWORD=devstack
MYSQL_PASSWORD=devstack
RABBIT_PASSWORD=devstack
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=devstack

############################################################
# Customize the following section based on your installation
############################################################

# Pip
PIP_USE_MIRRORS=False
USE_GET_PIP=1

#OFFLINE=False
#RECLONE=True

# Logging
LOGFILE=$DEST/logs/stack.sh.log
VERBOSE=True
ENABLE_DEBUG_LOG_LEVEL=True
ENABLE_VERBOSE_LOG_LEVEL=True

# Neutron ML2 with OpenVSwitch
Q_PLUGIN=ml2
Q_AGENT=ovn
PHYSICAL_NETWORK=mgmtphysnet0

# Disable security groups
LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver

# Enable neutron, heat, networking-sfc, barbican and mistral
enable_plugin neutron https://opendev.org/openstack/neutron stable/yoga
enable_plugin heat https://opendev.org/openstack/heat stable/yoga
enable_plugin networking-sfc https://opendev.org/openstack/networking-sfc stable/yoga
enable_plugin barbican https://opendev.org/openstack/barbican stable/yoga
enable_plugin mistral https://opendev.org/openstack/mistral stable/yoga

# Ceilometer
#CEILOMETER_PIPELINE_INTERVAL=300
enable_plugin ceilometer https://opendev.org/openstack/ceilometer stable/yoga
enable_plugin aodh https://opendev.org/openstack/aodh stable/yoga

# Blazar
enable_plugin blazar https://github.com/openstack/blazar.git stable/yoga

# Tacker
enable_plugin tacker https://opendev.org/openstack/tacker stable/yoga

enable_service n-novnc
enable_service n-cauth

disable_service tempest

# Enable kuryr-kubernetes, docker, octavia
KUBERNETES_VIM=True
enable_plugin kuryr-kubernetes https://opendev.org/openstack/kuryr-kubernetes stable/yoga
enable_plugin octavia https://opendev.org/openstack/octavia stable/yoga
enable_plugin devstack-plugin-container https://opendev.org/openstack/devstack-plugin-container stable/yoga
#KURYR_K8S_CLUSTER_IP_RANGE="10.0.0.0/24"

enable_service kubernetes-master
enable_service kuryr-kubernetes
enable_service kuryr-daemon

[[post-config|/etc/neutron/dhcp_agent.ini]]
[DEFAULT]
enable_isolated_metadata = True

[[post-config|$OCTAVIA_CONF]]
[controller_worker]
amp_active_retries=9999
[[post-config|/etc/cinder/cinder.conf]]
[lvmdriver-1]
image_volume_cache_enabled = False

关于local.conf

可以从Tacker存储库复制local.conf文件,并且每种配置类型都有相应的示例。

基本的组成有两种形式。

1. 一体机模式

安装完整的Devstack环境,其中包含Tacker。
这个模式有以下两个示例。

    1. OpenStack作为VIM

 

    OpenStack和Kubernetes作为VIM

在这种模式下的区别是,Openstack 和 Kubernetes 作为 VIM 部署了 Octavia 和 Kuryr-Kubernetes。

    octavia

这是一个OpenStack负载均衡服务。
它在控制器节点上运行。

    kuryr-kubernetes

这是一个关于OpenStack网络和Kubernetes集成的项目。
其目的是使OpenStack上的虚拟机(VM)和Kubernetes的Pod可以通过同一个Neutron网络连接。

您可以从 Tacker 存储库中复制样本文件,并确认以下差异。

$ diff local.conf.example local.conf.kubernetes
37c37,38
< # Enable heat, networking-sfc, barbican and mistral
---
> # Enable neutron, heat, networking-sfc, barbican and mistral
> enable_plugin neutron https://opendev.org/openstack/neutron master
45d45
< CEILOMETER_EVENT_ALARM=True
62a63,73
> # Enable kuryr-kubernetes, docker, octavia
> KUBERNETES_VIM=True
> enable_plugin kuryr-kubernetes https://opendev.org/openstack/kuryr-kubernetes master
> enable_plugin octavia https://opendev.org/openstack/octavia master
> enable_plugin devstack-plugin-container https://opendev.org/openstack/devstack-plugin-container master
> #KURYR_K8S_CLUSTER_IP_RANGE="10.0.0.0/24"
>
> enable_service kubernetes-master
> enable_service kuryr-kubernetes
> enable_service kuryr-daemon
>
65a77,80
>
> [[post-config|$OCTAVIA_CONF]]
> [controller_worker]
> amp_active_retries=9999
2. 独立模式

只有包含了一些必要的 OpenStack 服务的 Tacker 环境才会被安装。
Nova、Neutron 或其他重要组件不会被包括在此模式中。

Devstack 安装

执行安装脚本。
这个脚本的执行时间取决于环境,大约需要60到120分钟。
在此期间,请注意不要发生连接中断(如ssh连接时的无通信断开)。

./stack.sh

发生的错误 de

已总结了安装DevStack时出现的错误。

中子错误

这是在执行stack.sh脚本时发生的错误。

[Call Trace]
./stack.sh:1291:start_neutron_service_and_check
/home/yoshi/devstack/lib/neutron-legacy:562:test_with_retry
/home/yoshi/devstack/functions-common:2382:die
[ERROR] /home/yoshi/devstack/functions-common:2382 Neutron did not start
Error on exit

曾经尝试过的事情

漏掉的设置补充

    • /etc/hosts に外向け IP のローカル名前解決設定追加

 

    • local.conf の HOST_IP を外向けの IP に変更

 

    • インストールスクリプトを実行するユーザーがパスワードなしで sudo できるように設定

 

    再度、stack.sh スクリプト実行

结果,没有发生错误的变化。

堆栈的用户使用

    • DevStack 環境を初めからインストールし直し

 

    • stack ユーザ作成して実施する (参考: DevStack)

 

    再度、stack.sh スクリプト実行

结果,发生了以下错误。

+inc/python:pip_install:190                sudo -H LC_ALL=en_US.UTF-8 SETUPTOOLS_USE_DISTUTILS=stdlib http_proxy= https_proxy= no_proxy= PIP_FIND_LINKS= python3.8 -m pip install -c /opt/stack/requirements/upper-constraints.txt -e /opt/stack/cinder
/usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
  from cryptography.utils import int_from_bytes
/usr/lib/python3/dist-packages/secretstorage/util.py:19: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
  from cryptography.utils import int_from_bytes
Obtaining file:///opt/stack/cinder
ERROR: Exception:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pip/_internal/req/req_install.py", line 443, in check_if_exists
    self.satisfied_by = pkg_resources.get_distribution(str(no_marker))
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 481, in get_distribution
    dist = get_provider(dist)
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 357, in get_provider
    return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 900, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 791, in resolve
    raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.ContextualVersionConflict: (jmespath 1.0.1 (/usr/local/lib/python3.8/dist-packages), Requirement.parse('jmespath<1.0.0,>=0.7.1'), {'botocore', 'boto3'})

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 186, in _main
    status = self.run(options, args)
  File "/usr/lib/python3/dist-packages/pip/_internal/commands/install.py", line 357, in run
    resolver.resolve(requirement_set)
  File "/usr/lib/python3/dist-packages/pip/_internal/legacy_resolve.py", line 177, in resolve
    discovered_reqs.extend(self._resolve_one(requirement_set, req))
  File "/usr/lib/python3/dist-packages/pip/_internal/legacy_resolve.py", line 333, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/usr/lib/python3/dist-packages/pip/_internal/legacy_resolve.py", line 265, in _get_abstract_dist_for
    return self.preparer.prepare_editable_requirement(req)
  File "/usr/lib/python3/dist-packages/pip/_internal/operations/prepare.py", line 560, in prepare_editable_requirement
    req.check_if_exists(self.use_user_site)
  File "/usr/lib/python3/dist-packages/pip/_internal/req/req_install.py", line 447, in check_if_exists
    existing_dist = pkg_resources.get_distribution(
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 481, in get_distribution
    dist = get_provider(dist)
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 357, in get_provider
    return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 900, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 791, in resolve
    raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.ContextualVersionConflict: (jmespath 1.0.1 (/usr/local/lib/python3.8/dist-packages), Requirement.parse('jmespath<1.0.0,>=0.7.1'), {'botocore', 'boto3'})
+inc/python:pip_install:1                  exit_trap
+./stack.sh:exit_trap:516                  local r=2
++./stack.sh:exit_trap:517                  jobs -p
+./stack.sh:exit_trap:517                  jobs=
+./stack.sh:exit_trap:520                  [[ -n '' ]]
+./stack.sh:exit_trap:526                  '[' -f '' ']'
+./stack.sh:exit_trap:531                  kill_spinner
+./stack.sh:kill_spinner:426               '[' '!' -z '' ']'
+./stack.sh:exit_trap:533                  [[ 2 -ne 0 ]]
+./stack.sh:exit_trap:534                  echo 'Error on exit'
Error on exit
+./stack.sh:exit_trap:536                  type -p generate-subunit
+./stack.sh:exit_trap:537                  generate-subunit 1657008105 608 fail
+./stack.sh:exit_trap:539                  [[ -z /opt/stack/logs ]]
+./stack.sh:exit_trap:542                  /usr/bin/python3.8 /opt/stack/devstack/tools/worlddump.py -d /opt/stack/logs
ovs-vsctl: unix:/var/run/openvswitch/db.sock: database connection failed (No such file or directory)
ovs-vsctl: unix:/var/run/openvswitch/db.sock: database connection failed (No such file or directory)
+./stack.sh:exit_trap:551                  exit 2

启动ovn服务

ovs-vsctl: unix:/var/run/openvswitch/db.sock: database connection failed (No such file or directory)
ovs-vsctl: unix:/var/run/openvswitch/db.sock: database connection failed (No such file or directory)

从上述错误中执行以下操作。

    • ovn サービス等起動

 

    再度、stack.sh スクリプト実行
sudo systemctl start ovn-northd.service
sudo systemctl start ovn-controller.service
sudo systemctl start ovs-vswitchd.service
sudo systemctl start ovsdb-server.service

结果,数据库连接失败的错误已经消失,但其他错误仍然存在。

更新 apt-get

查看日志时,发现以下记录。

ERROR: neutron 20.1.0.dev412 has requirement neutron-lib>=2.21.0, but you'll have neutron-lib 2.20.0 which is incompatible.
ERROR: neutron 20.1.0.dev412 has requirement oslo.policy>=3.12.0, but you'll have oslo-policy 3.11.0 which is incompatible.
ERROR: neutron 20.1.0.dev412 has requirement ovsdbapp>=1.16.0, but you'll have ovsdbapp 1.15.2 which is incompatible.
Installing collected packages: neutron

由于最初没有更新apt,导致neutron-lib(2.20.0)的版本较旧,因此要执行以下操作。

    • apt-get update を実行

 

    再度、stack.sh スクリプト実行

结果,错误没有任何变化。
neutron-lib 的版本没有自动升级。

将neutron更改为stable/yoga。

查看 journalctl 后发现出现了以下导入错误。

$ journalctl -xe -u devstack@q-svc.service --no-pager

...

ERROR neutron   File "/opt/stack/neutron/neutron/plugins/ml2/plugin.py", line 45, in <module>
ERROR neutron     from neutron_lib.api.definitions import port_mac_address_override
ERROR neutron ImportError: cannot import name 'port_mac_address_override' from 'neutron_lib.api.definitions' (/usr/local/lib/python3.8/dist-packages/neutron_lib/api/definitions/__init__.py)

由于最近实施了port_mac_address_override且无法导入,所以发生了以下错误,我执行了下面的操作。

    • neutron のファイル (/opt/stack/neutron) を stable/yoga に checkout を実施

 

    再度、stack.sh スクリプト実行

结果,发生了以下两个错误。

AttributeError: module 'neutron.common.config' has no attribute 'register_common_config_options'

ovs-vsctl: unix:/var/run/openvswitch/db.sock: database connection failed (No such file or directory)

将环境恢复到执行 stack.sh 之前并执行。

    • 一度きれいな環境にし、今までの対策をすべて実施

 

    • neutron が stable/yoga を利用するように指定するために下記のように local.conf 変更

 

    再度、stack.sh スクリプト実行
$ vim local.conf 

・・・

# Enable neutron, heat, networking-sfc, barbican and mistral
enable_plugin neutron https://opendev.org/openstack/neutron master
--
enable_plugin neutron https://opendev.org/openstack/neutron stable/yoga ←に変更

结果,发生了以下错误。

/usr/lib/python3/dist-packages/secretstorage/util.py:19: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
  from cryptography.utils import int_from_bytes
Traceback (most recent call last):
  File "/usr/local/bin/neutron-db-manage", line 10, in <module>
    sys.exit(main())
  File "/opt/stack/neutron/neutron/db/migration/cli.py", line 661, in main
    return_val |= bool(CONF.command.func(config, CONF.command.name))
  File "/opt/stack/neutron/neutron/db/migration/cli.py", line 183, in do_upgrade
    run_sanity_checks(config, revision)
  File "/opt/stack/neutron/neutron/db/migration/cli.py", line 645, in run_sanity_checks
    script_dir.run_env()
  File "/usr/local/lib/python3.8/dist-packages/alembic/script/base.py", line 563, in run_env
    util.load_python_file(self.dir, "env.py")
  File "/usr/local/lib/python3.8/dist-packages/alembic/util/pyfiles.py", line 92, in load_python_file
    module = load_module_py(module_id, path)
  File "/usr/local/lib/python3.8/dist-packages/alembic/util/pyfiles.py", line 108, in load_module_py
    spec.loader.exec_module(module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 848, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/opt/stack/networking-sfc/networking_sfc/db/migration/alembic_migrations/env.py", line 25, in <module>
    from networking_sfc.db.migration.models import head  # noqa
  File "/opt/stack/networking-sfc/networking_sfc/db/migration/models/head.py", line 17, in <module>
    from networking_sfc.db import flowclassifier_db  # noqa
  File "/opt/stack/networking-sfc/networking_sfc/db/flowclassifier_db.py", line 34, in <module>
    from networking_sfc.extensions import flowclassifier as fc_ext
  File "/opt/stack/networking-sfc/networking_sfc/extensions/flowclassifier.py", line 34, in <module>
    common_config.register_common_config_options()
AttributeError: module 'neutron.common.config' has no attribute 'register_common_config_options'

我得到了前辈的以下反馈。

网络服务函数(networking-sfc)在调用neutron库的过程中出现了属性错误。可能是因为networking-sfc处于master分支,而neutron处于stable/yoga分支,所以导致了不一致。建议将local.conf中的其他部分也修改为引用stable/yoga分支,可能会更好。

将本地配置文件 local.conf 中的所有分支都更改为 stable/yoga。

    • 前回の stack.sh を実行する前の状態に戻す

 

    • 下記の local.conf に変更

 

    再度 stack.sh 実行
$ cat local.conf
[[local|localrc]]
############################################################
# Customize the following HOST_IP based on your installation
############################################################
HOST_IP=10.100.2.220

ADMIN_PASSWORD=devstack
MYSQL_PASSWORD=devstack
RABBIT_PASSWORD=devstack
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=devstack

############################################################
# Customize the following section based on your installation
############################################################

# Pip
PIP_USE_MIRRORS=False
USE_GET_PIP=1

#OFFLINE=False
#RECLONE=True

# Logging
LOGFILE=$DEST/logs/stack.sh.log
VERBOSE=True
ENABLE_DEBUG_LOG_LEVEL=True
ENABLE_VERBOSE_LOG_LEVEL=True

# Neutron ML2 with OpenVSwitch
Q_PLUGIN=ml2
Q_AGENT=ovn
PHYSICAL_NETWORK=mgmtphysnet0

# Disable security groups
LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver

# Enable neutron, heat, networking-sfc, barbican and mistral
enable_plugin neutron https://opendev.org/openstack/neutron stable/yoga
enable_plugin heat https://opendev.org/openstack/heat stable/yoga
enable_plugin networking-sfc https://opendev.org/openstack/networking-sfc stable/yoga
enable_plugin barbican https://opendev.org/openstack/barbican stable/yoga
enable_plugin mistral https://opendev.org/openstack/mistral stable/yoga

# Ceilometer
#CEILOMETER_PIPELINE_INTERVAL=300
enable_plugin ceilometer https://opendev.org/openstack/ceilometer stable/yoga
enable_plugin aodh https://opendev.org/openstack/aodh stable/yoga

# Blazar
enable_plugin blazar https://github.com/openstack/blazar.git stable/yoga

# Tacker
enable_plugin tacker https://opendev.org/openstack/tacker stable/yoga

enable_service n-novnc
enable_service n-cauth

disable_service tempest

# Enable kuryr-kubernetes, docker, octavia
KUBERNETES_VIM=True
enable_plugin kuryr-kubernetes https://opendev.org/openstack/kuryr-kubernetes stable/yoga
enable_plugin octavia https://opendev.org/openstack/octavia stable/yoga
enable_plugin devstack-plugin-container https://opendev.org/openstack/devstack-plugin-container stable/yoga
#KURYR_K8S_CLUSTER_IP_RANGE="10.0.0.0/24"

enable_service kubernetes-master
enable_service kuryr-kubernetes
enable_service kuryr-daemon

[[post-config|/etc/neutron/dhcp_agent.ini]]
[DEFAULT]
enable_isolated_metadata = True

[[post-config|$OCTAVIA_CONF]]
[controller_worker]
amp_active_retries=9999
[[post-config|/etc/cinder/cinder.conf]]
[lvmdriver-1]
image_volume_cache_enabled = False

最终,安装已完成。您也可以在http://10.100.2.220/dashboard 上查看Horizon仪表板。

$ ./stack.sh

・・・

=========================
DevStack Component Timing
(times are in seconds)
=========================
wait_for_service      22
pip_install          569
apt-get              908
run_process           71
dbsync                32
git_timed            1112
apt-get-update       10
test_with_retry        8
async_wait           356
osc 1011
-------------------------
Unaccounted time   2453
=========================
Total runtime        6552

=================
Async summary
=================
Time spent in the background minus waits: 690 sec
Elapsed time: 6552 sec 
Time if we did everything serially: 7242 sec
Speedup:  1.10531


This is your host IP address: 10.100.2.220
This is your host IPv6 address: ::1
Horizon is now available at http://10.100.2.220/dashboard  
Keystone is serving at http://10.100.2.220/identity/  
The default users are: admin and demo
The password: devstack

Services are running under systemd unit files.
For more information see:
https://docs.openstack.org/devstack/latest/systemd.html

DevStack Version: yoga
Change: 6f545e2567166ed9790601ccb589307df688d40d Allow to skip stop of ovn services 2022-05-31 07:31:08 +0000                     
OS Version: Ubuntu 20.04 focal

在克隆 ceilometer 时,git 调用失败。

Cloning into '/opt/stack/ceilometer'...
error: RPC failed; curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet.
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
+ESC[38;5;242mfunctions-common:git_timed:725           ESC[m^O [[ 128 -ne 124 ]]
+ESC[38;5;242mfunctions-common:git_timed:726           ESC[m^O die 726 'git call failed: [git clone' https://opendev.org/openstack/ceilometer /opt/stack/ceilometer --branch 'master]'
+ESC[38;5;242mfunctions-common:die:264                 ESC[m^O local exitcode=0
[Call Trace]
./stack.sh:590:fetch_plugins
/opt/stack/devstack/functions-common:1793:git_clone_by_name
/opt/stack/devstack/functions-common:702:git_clone
/opt/stack/devstack/functions-common:650:git_timed
/opt/stack/devstack/functions-common:726:die
[ERROR] /opt/stack/devstack/functions-common:726 git call failed: [git clone https://opendev.org/openstack/ceilometer /opt/stack/ceilometer --branch master]
Error on exit

由于git clone操作仅暂时失败,我们通过再次执行该操作解决了问题。

Kubernetes 启动失败

这个错误与通过 Devstack 安装的步骤没有直接关系,它是由我自己实验时发生的。

在设置 local.conf 的过程中,Kubernetes 完全无法运行。
在执行 stack.sh 脚本后,甚至没有 kubelet 命令等。

我使用这个 local.conf 配置文件尝试不安装 kuryr-kubernetes,而是安装 Calico 作为 CNI,并确保在 OpenStack 上的虚拟机和 Kubernetes 的 Pod 不在同一个 Neutron 网络中连接。

$ cat local.conf
[[local|localrc]]
############################################################
# Customize the following HOST_IP based on your installation
############################################################
HOST_IP=10.100.2.211

・・・

# Enable kuryr-kubernetes, docker, octavia
KUBERNETES_VIM=True
#enable_plugin kuryr-kubernetes https://opendev.org/openstack/kuryr-kubernetes stable/yoga
enable_plugin calico https://git.openstack.org/openstack/networking-calico
enable_plugin octavia https://opendev.org/openstack/octavia stable/yoga
enable_plugin devstack-plugin-container https://opendev.org/openstack/devstack-plugin-container stable/yoga
#KURYR_K8S_CLUSTER_IP_RANGE="10.0.0.0/24"

enable_service kubernetes-master
#enable_service kuryr-kubernetes
#enable_service kuryr-daemon

・・・

在尝试这个步骤之前,我以为Kubernetes相关的内容需要在kubernetes-master中访问,并且kuryr-kubernetes会将Kubernetes网络连接到OpenStack。

DevStack的根目录通常包含与DevStack相关的内容,因此检查DevStack的根目录可以确认有neutron和kuryr-kubernetes等内容。
然而,可以看到不存在kubernetes-master等内容,只有kuryr-kubernetes与Kubernetes相关的项目。

如果使用`grep`命令在kuryr-kubernetes内搜索,会出现”kubeadm”和”kubernetes-master”的文本匹配。因此,如果kuryr-kubernetes不存在,Kubernetes似乎无法正常工作。

grep -e "kubernetes-master" -rn ./kuryr-kubernetes/
grep -e "kubeadm" -rn ./kuryr-kubernetes/

在结论中,我们得出了一个结论:如果没有启用Kuryr-Kubernetes,Kubernetes将无法在Devstack上运行。

总结

很多错误发生,但Tacker已经在DevStack环境中成功运行起来了。
下次我们将使用TOSCA在VM上部署NFV。

广告
将在 10 秒后关闭
bannerAds