Zun: проблемы с развертыванием
Ставим все по общему руководству https://docs.openstack.org/zun/latest/index.html В данной статье, в основном, приведены доработки, которых нет в документации.
Kuryr
При взаимодействии zun, docker и kuryr используются настпройки из файла /var/lib/zun/.docker/config.json
Там упоминаются entrypoint и “Socket”: “kuryr-libnetwork.sock”
Файл сокета должен быть здесь: /run/docker/plugins/kuryr-libnetwork.sock - но он не создается.
mkdir -p /run/docker/plugins/
chown kuryr:docker /usr/local/libexec/kuryr /run/docker/plugins/
chmod 775 /usr/local/libexec/kuryr /run/docker/plugins/
Скрипт установки плагина v2:
Добавляем пользователя kuryr:
Смотрим сеть:
[
{
"Name": "3de10eb9-b4a2-40e9-bd1a-9f4c58c23855",
"Id": "0a5c7d5f49d82227fa2446fd822d0ca7414138904df873747f57160b79b1d6ec",
"Created": "2021-06-23T19:13:00.123597602Z",
"Scope": "local",
"Driver": "kuryr",
"EnableIPv6": false,
"IPAM": {
"Driver": "kuryr",
"Options": {
"neutron.net.shared": "False",
"neutron.subnet.uuid": "4a2a46d1-c968-474f-a468-d4f7c74a3e34"
},
"Config": [
{
"Subnet": "192.168.100.0/24",
"Gateway": "192.168.100.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"19106b014542e8746f2655d4b2bc83a0b1ed01d0c1f6169c2473f450221f54e5": {
"Name": "zun-cfacc614-5bce-4dfa-82df-db58d83437c6",
"EndpointID": "747993d7c9dd4442b45522c86f4f66443c716e08a5c9994ca429c58283cfdf83",
"MacAddress": "fa:16:3e:e4:e4:34",
"IPv4Address": "192.168.100.6/24",
"IPv6Address": ""
},
"acf0eca95a07f67ee572883e048dbb48df61e8305652038415cc568797565413": {
"Name": "zun-01b9df40-7670-48dd-b688-2ca12367f56d",
"EndpointID": "3df72fc949c289f669d039d360b528c32cc7374fc2823a115bb93145dad53dec",
"MacAddress": "fa:16:3e:a9:e0:43",
"IPv4Address": "192.168.100.13/24",
"IPv6Address": ""
}
},
"Options": {
"neutron.net.shared": "False",
"neutron.net.uuid": "3de10eb9-b4a2-40e9-bd1a-9f4c58c23855",
"neutron.subnet.uuid": "4a2a46d1-c968-474f-a468-d4f7c74a3e34"
},
"Labels": {}
}
]
Та-же сеть на нейтрон:
openstack network show 3de10eb9-b4a2-40e9-bd1a-9f4c58c23855
+---------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+---------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | nova |
| created_at | 2021-06-15T15:21:32Z |
| description | |
| dns_domain | None |
| id | 3de10eb9-b4a2-40e9-bd1a-9f4c58c23855 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| is_vlan_transparent | None |
| mtu | 1450 |
| name | k8 |
| port_security_enabled | True |
| project_id | 476fde6aa42b4da3b972b2f733031db0 |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 8278 |
| qos_policy_id | None |
| revision_number | 25 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | 4a2a46d1-c968-474f-a468-d4f7c74a3e34 |
| tags | kuryr.net.existing:0a5c7d5f49d8, kuryr.net.uuid.lh:0a5c7d5f49d82227fa2446fd822d0ca7, kuryr.net.uuid.uh:414138904df873747f57160b79b1d6ec |
| updated_at | 2021-06-23T19:13:02Z |
+---------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
ETCD
Ставим ETCD:
Добавляем настройки в /etc/default/etcd:
ETCD_NAME="zun-1"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="zun-1=http://10.212.0.111:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.212.0.111:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.212.0.111:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.212.0.111:2379"
Zun-api
policy.json
Надо обязательно прописать политику в файле /etc/zun/policy.d/policy.json
{
"context_is_admin": "role:admin",
"admin_or_owner": "is_admin:True or project_id:%(project_id)s",
"default": "rule:admin_or_owner",
"admin_api": "rule:context_is_admin",
"container:create": "rule:default",
"container:delete": "rule:default",
"container:get": "rule:default",
"container:get_all": "rule:default",
"container:get_all_all_tenants": "rule:admin_api",
"container:update": "rule:default",
"container:start": "rule:default",
"container:stop": "rule:default",
"container:reboot": "rule:default",
"container:pause": "rule:default",
"container:unpause": "rule:default",
"container:logs": "rule:default",
"container:execute": "rule:default",
"container:execute_resize": "rule:default",
"container:kill": "rule:default",
"container:rename": "rule:default",
"container:attach": "rule:default",
"container:resize": "rule:default",
"container:top": "rule:default",
"container:get_archive": "rule:default",
"container:put_archive": "rule:default",
"container:stats": "rule:default",
"container:commit": "rule:default",
"container:add_security_group": "rule:default",
"image:pull": "rule:default",
"image:get_all": "rule:default",
"image:search": "rule:default",
"zun-service:delete": "rule:admin_api",
"zun-service:disable": "rule:admin_api",
"zun-service:enable": "rule:admin_api",
"zun-service:force_down": "rule:admin_api",
"zun-service:get_all": "rule:default",
"host:get_all": "rule:admin_api",
"host:get": "rule:admin_api"
}
Zun-compute
Версия python
Выяснил, что на python2.7 не будет работать, т.к. для этой версии нет поддержки google-cloud-scheduler.
В связи с этим, nova-api выдает ошибку:
Исправить ошибку не удалось, поэтому перешел на вариант python3.6 (zun-1, 192.168.30.61)
Сборка из исходного кода
cd /opt
git clone https://opendev.org/openstack/zun.git
pip install --upgrade setuptools
# не катит! # pip install -c http://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/pike /opt/zun
cd /opt/zun
pip install -t requirements.txt
pip install wheel tox
pip install configparser
sudo cp /usr/lib/python3.7/configparser.py /usr/lib/python3.7/ConfigParser.py
export PBR_VERSION=1.2.3
python setup.py sdist
python setup.py install
lspci
В логе ошибка:
Необходимо установить пакетpciutils
:
Docker config
Ошибка конфигурации:
No config file found find_config_file /usr/local/lib/python3.7/dist-packages/docker/utils/config.py:28
Создаем файл конфигурации .dockercfg
:
Glance images path not exist
Создаем каталог для хранения образов сервиса glance
:
Neutron integration
В файле настроек /etc/zun/zun.conf:
[neutron_client]
region_name = RegionOne
...
#endpoint_type = http://10.212.0.10:9696
endpoint_type = internalURL
...
ВАЖНО! На узле с контейнерами нужен neutron-l3-agent.
Иначе не отрабатывает связка docker - kuryr - neutron.
Keystone
Понижение версии keystone:
pip uninstall keystoneauth1
pip install keystoneauth1==3.14.0
pip install python-keystoneclien
pip install python-keystoneclient==3.13.0
pip uninstall keystonemiddleware
pip install keystonemiddleware==4.17.0
Было:
keystoneauth1 4.3.1
keystonemiddleware 9.2.0
python-keystoneclient 4.2.0
requests 2.25.1
requestsexceptions 1.4.0
Не помогло! Вернул обратно.
Лог с ошибкой - запрос в placement от zun:
10.212.0.13 - - [07/May/2021:13:22:37 +0300] "GET /resource_providers?in_tree=eb175fec-2c71-4d5b-b967-fcbc478d10d3 HTTP/1.1" 406 578 "-" "zun-compute keystoneauth1/4.3.1 python-requests/2.25.1 CPython/3.7.3"
Результат нижеприведенного теста позвроляет сделать вывод, что нам надо работать с версией v3 сервиса keystone:
# curl http://10.212.0.10:5000
{"versions": {"values": [{"status": "stable", "updated": "2017-02-22T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v3+json"}], "id": "v3.8", "links": [{"href": "http://10.212.0.10:5000/v3/", "rel": "self"}]}, {"status": "deprecated", "updated": "2016-08-04T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v2.0+json"}], "id": "v2.0", "links": [{"href": "http://10.212.0.10:5000/v2.0/", "rel": "self"}, {"href": "https://docs.openstack.org/", "type": "text/html", "rel": "describedby"}]}]}}
# curl http://10.212.0.10:5000/v3
{"version": {"status": "stable", "updated": "2017-02-22T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v3+json"}], "id": "v3.8", "links": [{"href": "http://10.212.0.10:5000/v3", "rel": "self"}]}}
Ошибка настройки haproxy
В файле /etc/haproxy/haproxy.cfg в параметре keystone_url_ext был прописан потр 5000, вместо 35357, а блок параметра keystone_uri_ext вообще не было.
Вот фрагмент правильного конфигуратора:
listen keystone_uri_ext
bind 10.10.31.2:5000
balance leastconn
option tcpka
option httpchk
maxconn 10000
server 40526 192.168.30.18:5000 check inter 10000 rise 2 fall 5
listen keystone_url_ext
bind 10.10.31.2:35357
balance leastconn
option tcpka
option httpchk
maxconn 10000
server 40526 192.168.30.18:5000 check inter 10000 rise 2 fall 5
RootWrap
На узле docker-1 (zun-api, zun-wsproxy) надо не забыть:
echo "zun ALL=(root) NOPASSWD: /usr/local/bin/zun-rootwrap /etc/zun/rootwrap.conf *" | sudo tee /etc/sudoers.d/zun-rootwrap
User zun
Должен быть в двух доменах: default, rgpu:
Системный user zun должен входить в группу docker:
zun registry-create --name zun --username zun --password Aepie2ir --domain Default
zun registry-list
+--------------------------------------+------+---------+----------+----------+
| uuid | name | domain | username | password |
+--------------------------------------+------+---------+----------+----------+
| 5219fe5a-0371-4673-b012-27d06d913c11 | zun | Default | zun | *** |
+--------------------------------------+------+---------+----------+----------+
zun registry-show 5219fe5a-0371-4673-b012-27d06d913c11
------------------------------------------------------+
| Property | Value |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| uuid | 5219fe5a-0371-4673-b012-27d06d913c11 |
| links | ["{'href': 'http://192.168.30.61:9517/v1/registries/5219fe5a-0371-4673-b012-27d06d913c11', 'rel': 'self'}", "{'href': 'http://192.168.30.61:9517/registries/5219fe5a-0371-4673-b012-27d06d913c11', 'rel': 'bookmark'}"] |
| name | zun |
| project_id | d5c1f7a8947941b6860cacc21f736525 |
| user_id | e53606fd856b40efa343e378c433aaab |
| domain | Default |
| username | zun |
| password | *** |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Microversion
Смотрим версии микросервисов:
openstack module list
+-----------------+--------+
| Field | Value |
+-----------------+--------+
| cinderclient | 7.4.0 |
| glanceclient | 3.3.0 |
| keystoneclient | 4.2.0 |
| novaclient | 11.0.0 |
| openstack | 0.56.0 |
| openstackclient | 3.16.2 |
| zunclient | 2.1.0 |
+-----------------+--------+
Neutron
Для поддержки контейнеров kubernetes в neutron должен быть еще плагин Trunk.
Его поддержку добавляем в /etc/neutron/neutron.conf на контейнерах сервиса.
service_plugins = router,neutron.services.vpn.plugin.VPNDriverPlugin,neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2,neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,neutron.services.trunk.plugin.TrunkPlugin
Об этом сказано здесь
Пока непонятно, нужно ли это для docker, но в нашем варианте настройки сети (linuxbridge) добавление этого плагина привело к ошибкам neutron.
ERROR oslo_messaging.rpc.server AgentNotFoundByTypeHost: Agent with agent_type=L3 agent and host=cu-rgpu-02 could not be found
Python
Некоторые ошибки python (pip) и методы их устранения.
1) pip: no module named _internal
2) no module named six
cd /usr/local/lib/python2.7/dist-packages
wget https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz
tar xvf six-1.16.0.tar.gz
3) cannot import name util (from …sqlalchemy.py)
4) jsonschema
ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.
kuryr-lib 2.0.0 requires pyroute2>=0.4.21; sys_platform != "win32", but you'll have pyroute2 file-.VERSION which is incompatible.
kuryr-libnetwork 1.2.3 requires jsonschema<3.0.0,>=2.6.0, but you'll have jsonschema 3.2.0 which is incompatible.
kuryr-libnetwork 1.2.3 requires pyroute2>0.4.18, but you'll have pyroute2 file-.VERSION which is incompatible.
oslo-log 3.44.1 requires debtcollector>=1.19.0, but you'll have debtcollector 1.17.2 which is incompatible.
oslo-log 3.44.1 requires oslo.i18n>=3.20.0, but you'll have oslo-i18n 3.17.2 which is incompatible.
oslo-middleware 3.38.1 requires WebOb>=1.8.0, but you'll have webob 1.7.3 which is incompatible.
warlock 1.2.0 requires jsonschema<3,>=0.7, but you'll have jsonschema 3.2.0 which is incompatible.
Horizon
Testing
Создание контейнера
export NET_ID=$(openstack network list | awk '/ k8 / { print $2 }')
#zun create -n nginx --cpu 1 --memory 512 --disk 1 --net network=$NET_ID nginx # не работает, т.к. хост не поддерживает disk quotas
zun create -n nginx --cpu 1 --memory 512 --net network=$NET_ID nginx
Список узлов сервиса
Запуск контейнера
openstack appcontainer run \
--net network=19369de1-642e-43bc-b792-782424f8ba1f,v4-fixed-ip=192.168.11.41 \
nginx:latest
openstack port create --project aa3beb7f1d7a429ba704e2b3068f4cc6 --network internal --tag zun --host zun-1 --enable zun_port2
Sources
- Общее руководство: https://docs.openstack.org/zun/latest/index.html
- Wiki Zun: https://wiki.openstack.org/wiki/Zun
- Kuryr: https://docs.openstack.org/kuryr-libnetwork/latest/index.html
- Kury howto works: https://www.programmersought.com/article/87894897759/
- Zun UI (Horizon deploy): https://docs.openstack.org/zun-ui/latest/
- ETCD: https://docs.openstack.org/install-guide/environment-etcd.html
- Zun API guide: https://docs.openstack.org/python-openstackclient/latest/cli/plugin-commands/zun.html#appcontainer-service-enable
- Zun on Pike: https://docs.openstack.org/zun/pike/
[статья не завершена!]