135 lines
5.2 KiB
Markdown
135 lines
5.2 KiB
Markdown
<table style="border-collapse: collapse; border: none;">
|
|
<tr style="border-collapse: collapse; border: none;">
|
|
<td style="border-collapse: collapse; border: none;">
|
|
<a href="http://www.openairinterface.org/">
|
|
<img src="../doc/images/oai_final_logo.png" alt="" border=3 height=50 width=150>
|
|
</img>
|
|
</a>
|
|
</td>
|
|
<td style="border-collapse: collapse; border: none; vertical-align: center;">
|
|
<b><font size = "5">OpenShift Build and Usage Procedures</font></b>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
[[_TOC_]]
|
|
|
|
# 1. Introduction
|
|
|
|
## General
|
|
|
|
What follows is a tutorial on how to build images on an OpenShift cluster in a three-step process
|
|
(base image, build artifact image, target image). Note that all image
|
|
streams/build configs assume the OC project/namespace `oaicicd-ran`.
|
|
|
|
If you want to regenerate images from modified sources, you have to rebuild
|
|
the ran-build image. If you reinstalled dependencies, you have to restart from
|
|
ran-base.
|
|
|
|
You first need to login. Do:
|
|
```bash
|
|
oc login -u <username> -p <password> --server <url>
|
|
```
|
|
|
|
## RHEL8 Entitlements
|
|
|
|
To build the RAN images, we use the `codeready-builder-for-rhel-8-x86_64-rpms` repository with all the proper development libraries.
|
|
This repository is not directly accessible from the UBI RHEL8 image (`registry.access.redhat.com/ubi8/ubi:latest`).
|
|
Therefore, we need to copy certificates and subscription manager configuration files from a registered RHEL8 machine.
|
|
|
|
on a `RHEL8` physical machine (or a virtual machine) connected to the OpenShift Cluster, recover the entitlement and the RH subscription manager configs:
|
|
|
|
```bash
|
|
oc create configmap rhsm-conf --from-file /etc/rhsm/rhsm.conf
|
|
oc create configmap rhsm-ca --from-file /etc/rhsm/ca/redhat-uep.pem
|
|
|
|
oc create secret generic etc-pki-entitlement --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}.pem --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}-key.pem
|
|
```
|
|
|
|
These configmaps and secret will be shared by all the build configs in your OC
|
|
project. No need to do it each time. However, these files expire every month
|
|
or so. If you have done a build on your OC project and try again a few weeks
|
|
later, you may need to re-copy them. (The CI recopies them every time.)
|
|
|
|
```bash
|
|
oc delete secret etc-pki-entitlement
|
|
oc delete cm rhsm-conf
|
|
oc delete cm rhsm-ca
|
|
```
|
|
|
|
# 2. Build of `base` shared image
|
|
|
|
Create an image stream and build config that specify image properties and build parameters, then start the build:
|
|
|
|
```bash
|
|
oc create -f openshift/ran-base-is.yaml
|
|
oc create -f openshift/ran-base-bc.yaml
|
|
oc start-build ran-base --from-file=<oai-repo-directory> --follow
|
|
```
|
|
|
|
The `--from-file=<oai-repo-directory>` uploads the repository (from which the
|
|
build is done) as a binary blob. It is therefore possible to make merges or
|
|
other (local) modifications and build an image.
|
|
|
|
# 3. Build of `build` shared image
|
|
|
|
The same as for the `base` image.
|
|
|
|
```bash
|
|
oc create -f openshift/ran-build-is.yaml
|
|
oc create -f openshift/ran-build-bc.yaml
|
|
oc start-build ran-build --from-file=<oai-repo-directory> --follow
|
|
```
|
|
|
|
# 4. Build of a target image
|
|
|
|
The same as for the `base` image:
|
|
|
|
```bash
|
|
oc create -f openshift/oai-gnb-is.yaml
|
|
oc create -f openshift/oai-gnb-bc.yaml
|
|
oc start-build oai-gnb --from-file=<oai-repo-directory> --follow
|
|
```
|
|
|
|
# 5. Retrieval of Build Container Images and Build Artifacts
|
|
|
|
Build artifacts, such as build logs, can be retrieved by checking the logs of
|
|
the individual build steps. For example, for the `ran-build` step, you can do:
|
|
```bash
|
|
oc logs ran-build-1-build
|
|
```
|
|
where `ran-build-1-build` is the name of the `ran-build` build (type `oc get
|
|
pods` to get a list of all pods).
|
|
|
|
It is also possible to retrieve the build logs from a running pod. Currently,
|
|
this is only used for the `ran-base` step (the others using a python script to
|
|
scrape it from stdout):
|
|
```bash
|
|
oc create -f openshift/ran-base-log-retrieval.yaml
|
|
oc rsync ran-base-log-retrieval:/oai-ran/cmake_targets/log cmake_targets/log/ran-base
|
|
oc delete -f openshift/ran-base-log-retrieval.yaml
|
|
```
|
|
|
|
The images are uploaded into the OpenShift image registry. To download, login
|
|
using podman, then pull an image:
|
|
```bash
|
|
oc whoami -t | sudo podman login -u <username> --password-stdin <url> --tls-verify=false
|
|
sudo podman pull <url>/oaicicd-ran/<image>:<tag> --tls-verify=false
|
|
sudo podman logout <url>
|
|
```
|
|
The `<image>` could be `oai-gnb`, and the `<tag>` `ci-temp`.
|
|
|
|
# 6. Deployment using HELM Charts
|
|
|
|
Helm charts are located under `charts`. Assuming that the image is in the image
|
|
registry, the physims could be deployed as shown in the following steps:
|
|
|
|
```bash
|
|
grep -rl OAICICD_PROJECT ./charts/ | xargs sed -i -e "s#OAICICD_PROJECT#oaicicd-ran#" # select the correct project
|
|
sed -i -e "s#TAG#ci-temp#g" ./charts/physims/values.yaml # select the correct tag
|
|
helm install physim ./charts/physims/ # deploy
|
|
oc get pods # get the list of deployed containers
|
|
oc logs <pod> # inspect the logs of a pod
|
|
helm uninstall physim # undeploy
|
|
```
|