...
There is no need to build the image for the helm manager unless changes are made to the Dockerfile in the current dir.
If no changes are needed, skip this section.
Instruction to build the image:
...
Code Block |
---|
language | bash |
---|
theme | Midnight |
---|
|
$ docker images | grep helm
o-ran-sc/nonrtric-helm-manager 1.0.0-SNAPSHOT 56e50ade8c37 3 minutes ago 1.0.0-SNAPSHOT 498MB
|
Note: Note, replace the image name in the docker-hm.sh and kube-hm.sh if this image shall be used.
...
Create helm chart for test
Create a helm for this test. Package the chart into an archive
Code Block |
---|
language | bash |
---|
theme | Midnight |
---|
|
$ helm create simple-app
Successfully packaged chart and saved it to: /nonrtric/helm-manager/simple-app-0.1.0.tgz
$ helm package simple-app |
Run in docker with local kubernetes
...
Create a private docker network, unless it already exists, for the containers to run in.
Code Block |
---|
language | bash |
---|
theme | Midnight |
---|
|
$ docker network create nonrtric-docker-net |
Start the chartmuseum container in a separate window. This will be used as a chart repository. Make note of the port, 8222, which will be available on local host. Charts uploaded to the chartmuseum container will be availed in the mounted dir 'charts' on your host.ls
Code Block |
---|
language | bash |
---|
theme | Midnight |
---|
|
$ ./docker-cm.sh |
Code Block |
---|
language | bash |
---|
title | docker-cm.sh |
---|
linenumbers | true |
---|
collapse | true |
---|
|
docker run \
--rm \
-it \
-p 8222:8080 \
--name chartmuseum \
--network nonrtric-docker-net \
-e DEBUG=1 \
-e STORAGE=local \
-e STORAGE_LOCAL_ROOTDIR=/charts \
-v $(pwd)/charts:/charts \
ghcr.io/helm/chartmuseum:v0.13.1 |
Add the chart, created in the section 'Create helm for test', to the repo
Code Block |
---|
language | bash |
---|
theme | Midnight |
---|
|
$ curl --data-binary "@simple-app-0.1.0.tgz" -X POST http://localhost:8222/api/charts
{"saved":true} |
Start the helm manager in a separate window. Make note of the port, 8112, which will be available on local host. This is the port to the Helm manager REST API.
Code Block |
---|
language | bash |
---|
theme | Midnight |
---|
|
$ ./docker-cm.sh |
Code Block |
---|
language | bash |
---|
title | docker-hm.sh |
---|
collapse | true |
---|
|
docker run \
--rm \
-it \
-p 8112:8083 \
--name helmmanagerservice \
--network nonrtric-docker-net \
-v $(pwd)/mnt/database:/var/helm-manager/database \
-v ~/.kube:/root/.kube \
-v ~/.helm:/root/.helm \
-v ~/.config/helm:/root/.config/helm \
-v ~/.cache/helm:/root/.cache/helm \
-v $(pwd)/config/KubernetesParticipantConfig.json:/opt/app/helm-manager/src/main/resources/config/KubernetesParticipantConfig.json \
-v $(pwd)/config/application.yaml:/opt/app/helm-manager/src/main/resources/config/application.yaml \
o-ran-sc/nonrtric-helm-manager:1.0.0-SNAPSHOT |
The chartmusem repo need to added to helm. This operation must be called with an url accessable accessible from the helm manager container.
Go into the helm manager container and add the reprepo.
Code Block |
---|
language | bash |
---|
theme | Midnight |
---|
|
$ docker exec -it helmmanagerservice sh
$# helm repo add cm http://chartmuseum:8080
"cm" has been added to your repositories
$ exit |
The helm manager is now running and configured with a chart repo.
Run the script test.sh to execute a the sequence for installing the application 'simpleapp' namespace 'ckhm':
- Namespace 'ckhm' is created in kubernetes if not existing
- Onboard chart
- Install chart
- Uninstall chart
- Remove (the onboarded) chart
...
Code Block |
---|
|
$ ./test.sh docker |
Code Block |
---|
|
Start test
================
Get apps - empty
================
curl -sw %{http_code} http://localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[]}
============
Onboard app
===========
curl -sw %{http_code} http://localhost:8112/helm/charts -X POST -F chart=@simple-app-0.1.0.tgz -F values=@simple-app-values.yaml -F info=<simple-app.json
Curl OK
Response: 200
Body:
=====================
Get apps - simple-app
=====================
curl -sw %{http_code} http://localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[{"releaseName":"simpleapp","chartName":"simple-app","version":"0.1.0","namespace":"ckhm","repository":"cm"}]}
===========
Install app
===========
curl -sw %{http_code} http://localhost:8112/helm/install -X POST -H Content-Type:application/json -d @simple-app-installation.json
Curl OK
Response: 201
Body:
=====================
Get apps - simple-app
=====================
curl -sw %{http_code} http://localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[{"releaseName":"simpleapp","chartName":"simple-app","version":"0.1.0","namespace":"ckhm","repository":"cm"}]}
=============================
helm ls to list installed app
=============================
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
hm-app hm-app-ns 1 2021-05-19 17:15:26.068017436 +0000 UTC deployed hm-app-0.1.0 1.16.0
kall1 default 2 2021-05-16 21:32:46.710349 +0200 CEST deployed app1-0.1.0 1.16.0
kall11 default 1 2021-05-16 21:40:57.073819 +0200 CEST deployed app1-0.1.0 1.16.0
kalle3 app3-ns 1 2021-05-17 01:22:29.514917 +0200 CEST deployed app3-0.1.0 1.16.0
kalle3 default 1 2021-05-17 01:17:03.671637 +0200 CEST deployed app3-0.1.0 1.16.0
simpleapp ckhm 1 2021-06-01 16:31:30.255849815 +0000 UTC deployed simple-app-0.1.0 1.16.0
==========================================
sleep 30 - give the app some time to start
==========================================
============================
List svc and pod of the app
============================
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
simpleapp-simple-app ClusterIP 10.102.209.44 <none> 80/TCP 31s
NAME READY STATUS RESTARTS AGE
simpleapp-simple-app-858c798f97-vm6hd 1/1 Running 0 31s
========================
Uninstall app simple-app
========================
curl -sw %{http_code} http://localhost:8112/helm/uninstall/simple-app/0.1.0 -X DELETE
Curl OK
Response: 204
Body:
sleep 10 - give the app some time to remove
=============================================
List svc and pod of the app - should be gone
=============================================
No resources found in ckhm namespace.
No resources found in ckhm namespace.
=====================
Get apps - simple-app
=====================
curl -sw %{http_code} http://localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[{"releaseName":"simpleapp","chartName":"simple-app","version":"0.1.0","namespace":"ckhm","repository":"cm"}]}
============
Delete chart
===========
curl -sw %{http_code} http://localhost:8112/helm/charts/simple-app/0.1.0 -X DELETE
Curl OK
Response: 204
Body:
================
Get apps - empty
================
curl -sw %{http_code} http://localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[]}
Test result All tests ok
End of test |
Run in kubernetes
This instruction is valid for running both in a local kubernetes and in a kubernetes ccluster
...