Debian 12 bookworm
Sponsored Link

OpenStack Zed : How to use Magnum2023/06/30

 
Install OpenStack Container Infrastructure Management Service (Magnum).
This example is based on the environment like follows.
------------+--------------------------+--------------------------+------------
            |                          |                          |
        eth0|10.0.0.30             eth0|10.0.0.50             eth0|10.0.0.51
+-----------+-----------+  +-----------+-----------+  +-----------+-----------+
|   [ dlp.srv.world ]   |  | [ network.srv.world ] |  |  [ node01.srv.world ] |
|     (Control Node)    |  |     (Network Node)    |  |     (Compute Node)    |
|                       |  |                       |  |                       |
|  MariaDB    RabbitMQ  |  |  Neutron L2/L3 Agent  |  |        Libvirt        |
|  Memcached  Nginx     |  |   Neutron Metadata    |  |      Nova Compute     |
|  Keystone   httpd     |  |     Open vSwitch      |  |    Neutron L2 Agent   |
|  Glance     Nova API  |  |     iSCSI Target      |  |      Open vSwitch     |
|  Neutron Server       |  |     Cinder Volume     |  |                       |
|  Neutron Metadata     |  |    Heat API/Engine    |  |                       |
|  Cinder API           |  |         Nginx         |  |                       |
|  Barbican API         |  |    Magnum Services    |  |                       |
+-----------------------+  +-----------------------+  +-----------------------+

[1] On Control Node, Download a VM image for containers (Fedora CoreOS) and add it to Glance.
root@dlp ~(keystone)#
wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/37.20230303.3.0/x86_64/fedora-coreos-37.20230303.3.0-openstack.x86_64.qcow2.xz

root@dlp ~(keystone)#
xz -dv fedora-coreos-37.20230303.3.0-openstack.x86_64.qcow2.xz

root@dlp ~(keystone)#
openstack image create Fedora-CoreOS --file=fedora-coreos-37.20230303.3.0-openstack.x86_64.qcow2 --disk-format=qcow2 --container-format=bare --property os_distro='fedora-coreos' --public

[2] How to use Magnum. For example, Create Kubernetes Cluster with [admin] user.
root@dlp ~(keystone)#
openstack flavor list

+----+-----------+------+------+-----------+-------+-----------+
| ID | Name      |  RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+-----------+------+------+-----------+-------+-----------+
| 1  | m1.small  | 2048 |   10 |         0 |     1 | True      |
| 2  | m1.medium | 4096 |   10 |         0 |     2 | True      |
| 3  | m1.large  | 8192 |   10 |         0 |     4 | True      |
| 4  | m2.large  | 8192 |   10 |        10 |     4 | True      |
| 5  | m3.large  | 8192 |   20 |         0 |     4 | True      |
+----+-----------+------+------+-----------+-------+-----------+

root@dlp ~(keystone)#
openstack keypair list

+--------+-------------------------------------------------+------+
| Name   | Fingerprint                                     | Type |
+--------+-------------------------------------------------+------+
| my-key | 24:33:d1:3d:ad:3c:13:92:7b:78:04:77:4e:a0:f6:70 | ssh  |
+--------+-------------------------------------------------+------+

root@dlp ~(keystone)#
openstack network list

+--------------------------------------+---------+--------------------------------------+
| ID                                   | Name    | Subnets                              |
+--------------------------------------+---------+--------------------------------------+
| ae5fdb1f-efb9-412b-9053-b81106c90336 | private | b3234f3f-b3e3-41d2-b3a4-ca3d4ec55d24 |
| b9b8536b-0696-4a5b-af05-602587435c0a | public  | 0129c597-e411-450e-a4f9-b387c68eddb3 |
+--------------------------------------+---------+--------------------------------------+

root@dlp ~(keystone)#
openstack subnet list

+--------------------------------------+----------------+--------------------------------------+------------------+
| ID                                   | Name           | Network                              | Subnet           |
+--------------------------------------+----------------+--------------------------------------+------------------+
| 0129c597-e411-450e-a4f9-b387c68eddb3 | public-subnet  | b9b8536b-0696-4a5b-af05-602587435c0a | 10.0.0.0/24      |
| b3234f3f-b3e3-41d2-b3a4-ca3d4ec55d24 | private-subnet | ae5fdb1f-efb9-412b-9053-b81106c90336 | 192.168.100.0/24 |
+--------------------------------------+----------------+--------------------------------------+------------------+

# create Kubernetes Cluster template
root@dlp ~(keystone)# openstack coe cluster template create k8s-cluster-template \
--image Fedora-CoreOS \
--external-network public \
--fixed-network private \
--fixed-subnet private-subnet \
--dns-nameserver 10.0.0.10 \
--network-driver calico \
--docker-storage-driver overlay2 \
--docker-volume-size 10 \
--master-flavor m3.large \
--flavor m3.large \
--coe kubernetes 
Request to create cluster template k8s-cluster-template accepted
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| insecure_registry     | -                                    |
| labels                | {}                                   |
| updated_at            | -                                    |
| floating_ip_enabled   | True                                 |
| fixed_subnet          | private-subnet                       |
| master_flavor_id      | m3.large                             |
| uuid                  | 19959f08-5962-4359-afeb-2267ec67804b |
| no_proxy              | -                                    |
| https_proxy           | -                                    |
| tls_disabled          | False                                |
| keypair_id            | -                                    |
| public                | False                                |
| http_proxy            | -                                    |
| docker_volume_size    | 10                                   |
| server_type           | vm                                   |
| external_network_id   | public                               |
| cluster_distro        | fedora-coreos                        |
| image_id              | Fedora-CoreOS                        |
| volume_driver         | -                                    |
| registry_enabled      | False                                |
| docker_storage_driver | overlay2                             |
| apiserver_port        | -                                    |
| name                  | k8s-cluster-template                 |
| created_at            | 2023-06-30T06:56:07.534093+00:00     |
| network_driver        | calico                               |
| fixed_network         | private                              |
| coe                   | kubernetes                           |
| flavor_id             | m3.large                             |
| master_lb_enabled     | False                                |
| dns_nameserver        | 10.0.0.10                            |
| hidden                | False                                |
| tags                  | -                                    |
+-----------------------+--------------------------------------+

# create Kubernetes Cluster with 2 nodes
root@dlp ~(keystone)# openstack coe cluster create k8s-cluster \
--cluster-template k8s-cluster-template \
--master-count 1 \
--node-count 1 \
--keypair my-key 
Request to create cluster 7790f694-91b4-4f3b-bd7c-98276b75330f accepted

# verify status
# proceed to create cluster during [CREATE_IN_PROGRESS] state

root@dlp ~(keystone)#
openstack coe cluster list

+--------------------------------------+-------------+---------+------------+--------------+--------------------+---------------+
| uuid                                 | name        | keypair | node_count | master_count | status             | health_status |
+--------------------------------------+-------------+---------+------------+--------------+--------------------+---------------+
| 7790f694-91b4-4f3b-bd7c-98276b75330f | k8s-cluster | my-key  |          1 |            1 | CREATE_IN_PROGRESS | None          |
+--------------------------------------+-------------+---------+------------+--------------+--------------------+---------------+

# Heat orchestration System is used for creating

root@dlp ~(keystone)#
openstack stack list

+--------------------------------------+--------------------------+----------------------------------+--------------------+----------------------+--------------+
| ID                                   | Stack Name               | Project                          | Stack Status       | Creation Time        | Updated Time |
+--------------------------------------+--------------------------+----------------------------------+--------------------+----------------------+--------------+
| 44ff9533-48c9-4b9c-a945-5cc4d7d17ada | k8s-cluster-5d747yxstr3q | 757625ae78404e38a8cfdd7c6d262860 | CREATE_IN_PROGRESS | 2023-06-30T06:56:59Z | None         |
+--------------------------------------+--------------------------+----------------------------------+--------------------+----------------------+--------------+

# confirm checkpoints for creation

root@dlp ~(keystone)#
openstack stack list --nested | grep k8s-cluster

| 22a31b8c-04a3-480f-b43e-be52bd8f8859 | k8s-cluster-5d747yxstr3q-kube_minions-7k7yznhzwfkb-0-b4ollnbov4r4                                 | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T07:00:07Z | None         | 321cf254-97c5-4d0b-866c-04bd529e06ea |
| 9053ee77-ac52-4d56-9aaa-5f4c4bc9acc5 | k8s-cluster-5d747yxstr3q-api_address_floating_switch-oviashfdkuvx                                 | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T07:00:06Z | None         | 44ff9533-48c9-4b9c-a945-5cc4d7d17ada |
| 321cf254-97c5-4d0b-866c-04bd529e06ea | k8s-cluster-5d747yxstr3q-kube_minions-7k7yznhzwfkb                                                | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T07:00:06Z | None         | 44ff9533-48c9-4b9c-a945-5cc4d7d17ada |
| 7c42be78-59c6-4fcb-82fa-bd11f8bf868d | k8s-cluster-5d747yxstr3q-api_address_lb_switch-k77qarn7dobf                                       | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T07:00:05Z | None         | 44ff9533-48c9-4b9c-a945-5cc4d7d17ada |
| b98a5ce4-eedd-4e55-b57c-79995681bc05 | k8s-cluster-5d747yxstr3q-etcd_address_lb_switch-wbd5t6rgun3a                                      | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T07:00:04Z | None         | 44ff9533-48c9-4b9c-a945-5cc4d7d17ada |
| ec132afc-e8c0-4647-9fb1-bc0b85aace77 | k8s-cluster-5d747yxstr3q-kube_masters-hrd7vlt6xvos-0-dewo6txtuo54-api_address_switch-oi4fxlbsewmv | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T06:57:29Z | None         | 88244e99-1df8-4a99-b5fe-4ddca9f70f66 |
| 88244e99-1df8-4a99-b5fe-4ddca9f70f66 | k8s-cluster-5d747yxstr3q-kube_masters-hrd7vlt6xvos-0-dewo6txtuo54                                 | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T06:57:07Z | None         | e7074d57-631e-43e4-aa39-95d4d8c2ea7c |
| e7074d57-631e-43e4-aa39-95d4d8c2ea7c | k8s-cluster-5d747yxstr3q-kube_masters-hrd7vlt6xvos                                                | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T06:57:06Z | None         | 44ff9533-48c9-4b9c-a945-5cc4d7d17ada |
| f85de343-388a-48ee-877f-b3bcc19f0a44 | k8s-cluster-5d747yxstr3q-etcd_lb-4ja6buynrvyp                                                     | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T06:57:05Z | None         | 44ff9533-48c9-4b9c-a945-5cc4d7d17ada |
| 61e764ad-3e2f-4adf-a9f5-6016aa9af351 | k8s-cluster-5d747yxstr3q-api_lb-lsk5qra5uxce                                                      | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T06:57:05Z | None         | 44ff9533-48c9-4b9c-a945-5cc4d7d17ada |
| 965f9ea8-5830-45b4-862e-5b45300c0415 | k8s-cluster-5d747yxstr3q-network-xbrtftx2g7dd-network_switch-2colkowcycmx                         | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T06:57:03Z | None         | 3c6ea82c-c54c-4ac6-8d32-57700ab88585 |
| 3c6ea82c-c54c-4ac6-8d32-57700ab88585 | k8s-cluster-5d747yxstr3q-network-xbrtftx2g7dd                                                     | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T06:57:03Z | None         | 44ff9533-48c9-4b9c-a945-5cc4d7d17ada |
| 44ff9533-48c9-4b9c-a945-5cc4d7d17ada | k8s-cluster-5d747yxstr3q                                                                          | 757625ae78404e38a8cfdd7c6d262860 | CREATE_COMPLETE | 2023-06-30T06:56:59Z | None         | None                                 |

# if sucessfully finished, state is [CREATE_COMPLETE] + [HEALTHY]

root@dlp ~(keystone)#
openstack coe cluster list

+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+
| uuid                                 | name        | keypair | node_count | master_count | status          | health_status |
+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+
| 7790f694-91b4-4f3b-bd7c-98276b75330f | k8s-cluster | my-key  |          1 |            1 | CREATE_COMPLETE | HEALTHY       |
+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+

# instances are running

root@dlp ~(keystone)#
openstack server list

+--------------------------------------+-----------------------------------+--------+-------------------------------------+---------------+----------+
| ID                                   | Name                              | Status | Networks                            | Image         | Flavor   |
+--------------------------------------+-----------------------------------+--------+-------------------------------------+---------------+----------+
| 4ad48718-5fd7-462d-913e-d2384d5eb010 | k8s-cluster-5d747yxstr3q-node-0   | ACTIVE | private=192.168.100.115             | Fedora-CoreOS | m3.large |
| 1e21221d-fda8-41d1-8e50-c8ebd7cd26a6 | k8s-cluster-5d747yxstr3q-master-0 | ACTIVE | private=10.0.0.205, 192.168.100.192 | Fedora-CoreOS | m3.large |
+--------------------------------------+-----------------------------------+--------+-------------------------------------+---------------+----------+
[3] To access to use Kubernetes Cluster, Set like follows.
# install [kubectl]

root@dlp ~(keystone)#
apt -y install kubernetes-client
root@dlp ~(keystone)#
openstack coe cluster list

+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+
| uuid                                 | name        | keypair | node_count | master_count | status          | health_status |
+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+
| 7790f694-91b4-4f3b-bd7c-98276b75330f | k8s-cluster | my-key  |          1 |            1 | CREATE_COMPLETE | HEALTHY       |
+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+

root@dlp ~(keystone)#
openstack coe cluster config k8s-cluster

export KUBECONFIG=/root/config
root@dlp ~(keystone)#
export KUBECONFIG=/root/config
root@dlp ~(keystone)#
kubectl get nodes

NAME                                STATUS   ROLES    AGE    VERSION
k8s-cluster-5d747yxstr3q-master-0   Ready    master   7m8s   v1.23.3
k8s-cluster-5d747yxstr3q-node-0     Ready    <none>   5m8s   v1.23.3

# verify cluster to create test pods

root@dlp ~(keystone)#
kubectl create deployment test-nginx --image=nginx --replicas=2

deployment.apps/test-nginx created
root@dlp ~(keystone)#
kubectl get pods -o wide

NAME                         READY   STATUS    RESTARTS   AGE   IP               NODE                              NOMINATED NODE   READINESS GATES
test-nginx-976fbbd77-wbp5j   1/1     Running   0          12s   10.100.176.196   k8s-cluster-5d747yxstr3q-node-0   <none>           <none>
test-nginx-976fbbd77-x8xrg   1/1     Running   0          12s   10.100.176.195   k8s-cluster-5d747yxstr3q-node-0   <none>           <none>

root@dlp ~(keystone)#
kubectl expose deployment test-nginx --type="NodePort" --port 80

service/test-nginx exposed
root@dlp ~(keystone)#
kubectl get services test-nginx

NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
test-nginx   NodePort   10.254.124.127   <none>        80:31615/TCP   6s

root@dlp ~(keystone)#
kubectl port-forward service/test-nginx --address 0.0.0.0 10443:80 &

Forwarding from 0.0.0.0:10443 -> 80
root@dlp ~(keystone)#
curl localhost:10443

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
.....
.....
[4] If you'd like to use Magnum with common users, it needs to change some settings.
root@dlp ~(keystone)#
openstack role list

+----------------------------------+------------------+
| ID                               | Name             |
+----------------------------------+------------------+
| 109c6488ef4347d681ba691f8ac97a6b | member           |
| 6055174790cd4797ae3671b38d935c53 | service          |
| 81f2687109a245b580690b6e8f9095db | heat_stack_owner |
| 82699442db4e4edea2fb7986340b5ab4 | admin            |
| db9927603e564f94b2f0a4312d1a63da | heat_stack_user  |
| eb3d0d5b10cd456093463a2c12e41b82 | reader           |
+----------------------------------+------------------+

root@dlp ~(keystone)#
openstack project list

+----------------------------------+------------------------------------------------------------------+
| ID                               | Name                                                             |
+----------------------------------+------------------------------------------------------------------+
| 1c2f5dc8c4f9494fbaaa4217c8e3585a | hiroshima                                                        |
| 757625ae78404e38a8cfdd7c6d262860 | admin                                                            |
| d8b09d86ed7743039f92b2e542ea26c1 | service                                                          |
| e614281e49f54c51abdc90b92e938846 | 757625ae78404e38a8cfdd7c6d262860-44ff9533-48c9-4b9c-a945-5cc4d7d |
+----------------------------------+------------------------------------------------------------------+

root@dlp ~(keystone)#
openstack user list

+----------------------------------+---------------------+
| ID                               | Name                |
+----------------------------------+---------------------+
| a45313c73c4842d7b5ba90f56be73de2 | admin               |
| b166b462bd214a34b99e079c806bef55 | glance              |
| 9fb0ad5b33f9492594f4139f5b428dab | nova                |
| 5db174d072dd4bcc90d34d7b0c4f0e36 | placement           |
| 1b4f2549a8ee462d909185b6a321e265 | neutron             |
| de51d5f0ee2c485885877d21f5b424e0 | serverworld         |
| 5b1712badfdb4824927488f7882cc7ca | cinder              |
| f485fdd327064f56ac0182c3b084525b | heat                |
| 65993a5e1fe0476486e82091276c2827 | heat_domain_admin   |
| b0c091c98dbe452db61fdb9d8d44d719 | barbican            |
| c5916ff29c094da88560ba100c6f0340 | magnum              |
| 846e638c9f394766bf193e09782e1b4e | magnum_domain_admin |
+----------------------------------+---------------------+

# for example, add [serverworld] user in [hiroshima] project to [heat_stack_owner] role

root@dlp ~(keystone)#
openstack role add --project hiroshima --user serverworld heat_stack_owner
# on the Node Neutron server is running, change settings like follows

root@dlp ~(keystone)#
vi /etc/neutron/policy.d/00_default_policy.yaml
# add to the end
# overwrite some settings

"create_port:fixed_ips:subnet_id": "(rule:context_is_advsvc) or (rule:network_owner) or (rule:admin_only) or (rule:shared) or (role:member and project_id:%(project_id)s)"
"create_port:allowed_address_pairs": "(rule:admin_only) or (rule:network_owner) or (role:member and project_id:%(project_id)s)"
"create_port:allowed_address_pairs:ip_address": "(rule:admin_only) or (rule:network_owner) or (role:member and project_id:%(project_id)s)"

root@dlp ~(keystone)#
systemctl restart neutron-api

# that's OK, common users can create clusters

debian@dlp ~(keystone)$
openstack coe cluster list

+--------------------------------------+--------------+---------+------------+--------------+-----------------+---------------+
| uuid                                 | name         | keypair | node_count | master_count | status          | health_status |
+--------------------------------------+--------------+---------+------------+--------------+-----------------+---------------+
| 81e42408-4ec6-4d1d-8bec-41017494e7dc | k8s-cluster2 | mykey   |          1 |            1 | CREATE_COMPLETE | None          |
+--------------------------------------+--------------+---------+------------+--------------+-----------------+---------------+
Matched Content