Ubuntu 20.04
Sponsored Link

OpenStack Yoga : How to use Magnum
2022/04/12
 
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
+-----------+-----------+   +-----------+-----------+   +-----------+-----------+
|    [ Control Node ]   |   |    [ Storage Node ]   |   |    [ Compute Node ]   |
|                       |   |                       |   |                       |
|  MariaDB    RabbitMQ  |   |      Open vSwitch     |   |        Libvirt        |
|  Memcached  httpd     |   |     Neutron Server    |   |     Nova Compute      |
|  Keystone   Glance    |   |       OVN-Northd      |   |      Open vSwitch     |
|  Nova API             |   |     Cinder Volume     |   |   OVN Metadata Agent  |
|  Cinder API           |   |     iSCSI Target      |   |     OVN-Controller    |
|  Barbican API         |   |    Heat API/Engine    |   |                       |
|                       |   |       Magnum API      |   |                       |
+-----------------------+   +-----------------------+   +-----------------------+

[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/35.20220313.3.1/x86_64/fedora-coreos-35.20220313.3.1-openstack.x86_64.qcow2.xz

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

root@dlp ~(keystone)#
openstack image create Fedora-CoreOS --file=fedora-coreos-35.20220313.3.1-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 |
+----+----------+------+------+-----------+-------+-----------+
| 0  | m1.small | 2048 |   10 |         0 |     1 | True      |
| 1  | m1.large | 8192 |   20 |         0 |     4 | True      |
+----+----------+------+------+-----------+-------+-----------+

root@dlp ~(keystone)#
openstack keypair list

+--------+-------------------------------------------------+------+
| Name   | Fingerprint                                     | Type |
+--------+-------------------------------------------------+------+
| my-key | f3:14:05:3e:de:01:95:20:6e:4e:94:11:09:7a:b0:85 | ssh  |
+--------+-------------------------------------------------+------+

root@dlp ~(keystone)#
openstack network list

+--------------------------------------+---------+--------------------------------------+
| ID                                   | Name    | Subnets                              |
+--------------------------------------+---------+--------------------------------------+
| 8fd7472d-9182-4a17-aa35-984fb7fb059d | public  | 99f81758-a8a8-4a25-8c20-a8c52f374815 |
| b19c6ee5-26f7-4a98-8a8c-58a2e7637610 | private | 5d1edead-636e-4622-942a-bfd2347908e3 |
+--------------------------------------+---------+--------------------------------------+

root@dlp ~(keystone)#
openstack subnet list

+--------------------------------------+----------------+--------------------------------------+------------------+
| ID                                   | Name           | Network                              | Subnet           |
+--------------------------------------+----------------+--------------------------------------+------------------+
| 5d1edead-636e-4622-942a-bfd2347908e3 | private-subnet | b19c6ee5-26f7-4a98-8a8c-58a2e7637610 | 192.168.100.0/24 |
| 99f81758-a8a8-4a25-8c20-a8c52f374815 | public-subnet  | 8fd7472d-9182-4a17-aa35-984fb7fb059d | 10.0.0.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 flannel \
--docker-storage-driver overlay2 \
--docker-volume-size 10 \
--master-flavor m1.large \
--flavor m1.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      | m1.large                             |
| uuid                  | a897802d-c2c4-4b63-a40f-43ea060d6a25 |
| 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            | 2022-04-12T07:46:07+00:00            |
| network_driver        | flannel                              |
| fixed_network         | private                              |
| coe                   | kubernetes                           |
| flavor_id             | m1.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 406ecbcc-ea0f-4ca1-8ed4-2cc3d3d211c4 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 |
+--------------------------------------+-------------+---------+------------+--------------+--------------------+---------------+
| 406ecbcc-ea0f-4ca1-8ed4-2cc3d3d211c4 | 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 |
+--------------------------------------+--------------------------+----------------------------------+--------------------+----------------------+--------------+
| 43797700-bdeb-48f5-b771-c1e5224bbac5 | k8s-cluster-bivfkluajpoy | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_IN_PROGRESS | 2022-04-12T07:46:44Z | None         |
+--------------------------------------+--------------------------+----------------------------------+--------------------+----------------------+--------------+

# confirm checkpoints for creation

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

| 3d953ef1-0fff-4f0d-9dd3-328bb042e711 | k8s-cluster-bivfkluajpoy-kube_minions-3elssevbibu3-0-hacig2iifajl                                 | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:50:42Z | None         | 9b5475db-48c8-4a2b-8be3-3d36cc3965c9 |
| 9b5475db-48c8-4a2b-8be3-3d36cc3965c9 | k8s-cluster-bivfkluajpoy-kube_minions-3elssevbibu3                                                | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:50:41Z | None         | 43797700-bdeb-48f5-b771-c1e5224bbac5 |
| 52c7ef51-c036-43cd-b3c0-1022877e75a9 | k8s-cluster-bivfkluajpoy-api_address_floating_switch-7odq46hizfcw                                 | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:50:41Z | None         | 43797700-bdeb-48f5-b771-c1e5224bbac5 |
| d42bd31f-bb12-4ca4-a6dd-f205024ffcfd | k8s-cluster-bivfkluajpoy-api_address_lb_switch-utopvqfgzjev                                       | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:50:40Z | None         | 43797700-bdeb-48f5-b771-c1e5224bbac5 |
| 0f379350-f7e0-4e0a-a1bc-4eb3fda2e5a2 | k8s-cluster-bivfkluajpoy-etcd_address_lb_switch-dv53ws5rmjxj                                      | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:50:40Z | None         | 43797700-bdeb-48f5-b771-c1e5224bbac5 |
| f5615292-c6eb-4aa9-9f35-1fb923baf128 | k8s-cluster-bivfkluajpoy-kube_masters-3qzwogjxhlna-0-zr3vjxb4yppj-api_address_switch-ep72qxu2aj7w | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:47:27Z | None         | 3d181305-a4ce-4bea-a638-423bb167a3c9 |
| 3d181305-a4ce-4bea-a638-423bb167a3c9 | k8s-cluster-bivfkluajpoy-kube_masters-3qzwogjxhlna-0-zr3vjxb4yppj                                 | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:46:53Z | None         | 827f164b-4e06-49c1-b036-c820e4eb4fef |
| 827f164b-4e06-49c1-b036-c820e4eb4fef | k8s-cluster-bivfkluajpoy-kube_masters-3qzwogjxhlna                                                | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:46:49Z | None         | 43797700-bdeb-48f5-b771-c1e5224bbac5 |
| fc02f356-d7bf-4e70-bc71-13b754780295 | k8s-cluster-bivfkluajpoy-api_lb-jgbibrk66s4t                                                      | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:46:47Z | None         | 43797700-bdeb-48f5-b771-c1e5224bbac5 |
| 8454b7f0-fcc7-4f35-b570-b6f45d182591 | k8s-cluster-bivfkluajpoy-etcd_lb-vfztt37lrsjj                                                     | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:46:47Z | None         | 43797700-bdeb-48f5-b771-c1e5224bbac5 |
| d34b40ea-f7d9-4aad-8687-8c8923927b65 | k8s-cluster-bivfkluajpoy-network-i2pdfdvxyrfl                                                     | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:46:45Z | None         | 43797700-bdeb-48f5-b771-c1e5224bbac5 |
| 1a9f2fa4-cc07-406a-8c13-a32e7dff5b01 | k8s-cluster-bivfkluajpoy-network-i2pdfdvxyrfl-network_switch-kv7hicybn3zb                         | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:46:45Z | None         | d34b40ea-f7d9-4aad-8687-8c8923927b65 |
| 43797700-bdeb-48f5-b771-c1e5224bbac5 | k8s-cluster-bivfkluajpoy                                                                          | ddb7c08ba73a48eea040270d13a7b0cf | CREATE_COMPLETE | 2022-04-12T07:46:44Z | 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 |
+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+
| 406ecbcc-ea0f-4ca1-8ed4-2cc3d3d211c4 | k8s-cluster | my-key  |          1 |            1 | CREATE_COMPLETE | HEALTHY       |
+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+

# instances are running

root@dlp ~(keystone)#
openstack server list

+--------------------------------------+-----------------------------------+--------+-------------------------------------+---------------+----------+
| ID                                   | Name                              | Status | Networks                            | Image         | Flavor   |
+--------------------------------------+-----------------------------------+--------+-------------------------------------+---------------+----------+
| daceaeba-d6d7-40c1-b74d-7e9bdffac5f6 | k8s-cluster-bivfkluajpoy-node-0   | ACTIVE | private=10.0.0.226, 192.168.100.128 | Fedora-CoreOS | m1.large |
| 44ce2762-a6cd-4518-bf1d-dd9ad95202bb | k8s-cluster-bivfkluajpoy-master-0 | ACTIVE | private=10.0.0.229, 192.168.100.67  | Fedora-CoreOS | m1.large |
+--------------------------------------+-----------------------------------+--------+-------------------------------------+---------------+----------+
[3] To access to use Kubernetes Cluster, Set like follows.
# install [kubectl]

root@dlp ~(keystone)#
snap install kubectl --classic

kubectl 1.23.5 from Canonical✓ installed
root@dlp ~(keystone)#
openstack coe cluster list

+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+
| uuid                                 | name        | keypair | node_count | master_count | status          | health_status |
+--------------------------------------+-------------+---------+------------+--------------+-----------------+---------------+
| 406ecbcc-ea0f-4ca1-8ed4-2cc3d3d211c4 | 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-bivfkluajpoy-master-0   Ready    master   5m50s   v1.23.3
k8s-cluster-bivfkluajpoy-node-0     Ready    <none>   3m16s   v1.23.3

root@dlp ~(keystone)#
kubectl get pods -n kube-system

NAME                                         READY   STATUS    RESTARTS   AGE
coredns-56448757b9-76dlr                     1/1     Running   0          5m51s
coredns-56448757b9-vhqdq                     1/1     Running   0          5m51s
dashboard-metrics-scraper-67f57ff746-pq2x6   1/1     Running   0          5m48s
k8s-keystone-auth-t8zgg                      1/1     Running   0          5m47s
kube-dns-autoscaler-6d5b5dc777-69v8p         1/1     Running   0          5m50s
kube-flannel-ds-5k4ct                        1/1     Running   0          3m33s
kube-flannel-ds-cx47x                        1/1     Running   0          5m49s
kubernetes-dashboard-7b88d986b4-7hx6k        1/1     Running   0          5m48s
magnum-metrics-server-6c4c77844b-5bg6b       1/1     Running   0          5m42s
npd-c9vdz                                    1/1     Running   0          3m3s

# 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-fzdzs   1/1     Running   0          35s   10.100.1.5   k8s-cluster-bivfkluajpoy-node-0   <none>           <none>
test-nginx-976fbbd77-v9pnh   1/1     Running   0          35s   10.100.1.6   k8s-cluster-bivfkluajpoy-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.165.205   <none>        80:32042/TCP   5s

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             |
+----------------------------------+------------------+
| 119d976b7118436b86bb6a6eef561909 | heat_stack_owner |
| 3eca53d4474f4d81bf2c85c8ea238f7c | reader           |
| 7eea1df857244828afbf10ac46356b23 | CloudUser        |
| 99fe824a4d5b40f1abb6efa9f6820dff | heat_stack_user  |
| dbd8fff588c74deaa4e2192ba1d92933 | member           |
| f125eaa73aed4ea2ba2b7cba02acd42c | admin            |
+----------------------------------+------------------+

root@dlp ~(keystone)#
openstack project list

+----------------------------------+------------------------------------------------------------------+
| ID                               | Name                                                             |
+----------------------------------+------------------------------------------------------------------+
| 3ef434d0d82846ddb7a257365467697c | ddb7c08ba73a48eea040270d13a7b0cf-43797700-bdeb-48f5-b771-c1e5224 |
| c043fb355eff47e69642adfcd7a55620 | service                                                          |
| d3434f55aa5541cfab5f13916da0697d | hiroshima                                                        |
| ddb7c08ba73a48eea040270d13a7b0cf | admin                                                            |
+----------------------------------+------------------------------------------------------------------+

root@dlp ~(keystone)#
openstack user list

+----------------------------------+---------------------+
| ID                               | Name                |
+----------------------------------+---------------------+
| a8f07b80a7b34425a7778dee92319ef1 | admin               |
| 924b949b9fcd440abc7def686443cc21 | glance              |
| bcb1420b3c5145289f7f99e55a477705 | nova                |
| 2de5e07505a548829776022cd469ff64 | placement           |
| 5cd4b73f2cd74402b56be5c672dcfaa7 | neutron             |
| 95f196a1851c4b93b016871f7d5ded82 | serverworld         |
| 8eac38f96d014cd9b0c7cc824f3fc95e | cinder              |
| 0e5574b8cffa4cd1b35d6af22d61aa3c | heat                |
| 04a871e222474a0e87405012de25af52 | heat_domain_admin   |
| 15fa68d76ee34c1b9d6fb9dec44b73d2 | barbican            |
| 5c9a975728494d74b24056f7349cb847 | magnum              |
| dc7ee73e04a146e8ab806bc577d140a8 | magnum_domain_admin |
+----------------------------------+---------------------+

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

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

root@network:~#
vi /etc/neutron/policy.json
# create new
# overwrite some settings

{
  "create_port:fixed_ips:subnet_id": "",
  "create_port:allowed_address_pairs": "",
  "create_port:allowed_address_pairs:ip_address": "",
}

root@network:~#
systemctl restart neutron-server

# that's OK, common users can create clusters

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

+--------------------------------------+---------------+---------+------------+--------------+-----------------+---------------+
| uuid                                 | name          | keypair | node_count | master_count | status          | health_status |
+--------------------------------------+---------------+---------+------------+--------------+-----------------+---------------+
| ab81cc22-8a2e-4dca-9e36-8f2a784b1b77 | k8s-cluster-1 | mykey   |          1 |            1 | CREATE_COMPLETE | HEALTHY       |
+--------------------------------------+---------------+---------+------------+--------------+-----------------+---------------+
Matched Content