Ce contenu n'est pas disponible dans la langue sélectionnée.
Chapter 6. Deploying OpenShift sandboxed containers on IBM Z and IBM LinuxONE
You can deploy OpenShift sandboxed containers on IBM Z® and IBM® LinuxONE,
You deploy OpenShift sandboxed containers by performing the following steps:
- Install the OpenShift sandboxed containers Operator on the OpenShift Container Platform cluster.
- Optional: Configure the libvirt volume.
- Optional: Create a custom peer pod VM image.
- Create the peer pods secret.
- Create the peer pods config map.
- Create the pod VM image config map.
- Create the KVM host secret.
- Optional: Select a custom peer pod VM image.
- Optional: Customize the Kata agent policy.
-
Create the
KataConfig
custom resource. - Optional: Modify the number of virtual machines running on each worker node.
- Configure your workload for OpenShift sandboxed containers.
OpenShift sandboxed containers on IBM Z® and IBM® LinuxONE is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.
For more information about the support scope of Red Hat Technology Preview features, see Technology Preview Features Support Scope.
6.1. Prerequisites Copier lienLien copié sur presse-papiers!
- You have installed Red Hat OpenShift Container Platform 4.16 or later.
- Your OpenShift Container Platform cluster has three control plane nodes and at least two worker nodes.
- The cluster nodes and peer pods are in the same IBM Z® KVM host logical partition.
- The cluster nodes and peer pods are connected to the same subnet.
6.2. Installing the OpenShift sandboxed containers Operator Copier lienLien copié sur presse-papiers!
You install the OpenShift sandboxed containers Operator by using the command line interface (CLI).
Prerequisites
-
You have access to the cluster as a user with the
cluster-admin
role.
Procedure
Create an
osc-namespace.yaml
manifest file:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the namespace by running the following command:
oc apply -f osc-namespace.yaml
$ oc apply -f osc-namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create an
osc-operatorgroup.yaml
manifest file:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the operator group by running the following command:
oc apply -f osc-operatorgroup.yaml
$ oc apply -f osc-operatorgroup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create an
osc-subscription.yaml
manifest file:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the subscription by running the following command:
oc apply -f osc-subscription.yaml
$ oc apply -f osc-subscription.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Verify that the Operator is correctly installed by running the following command:
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow This command can take several minutes to complete.
Watch the process by running the following command:
watch oc get csv -n openshift-sandboxed-containers-operator
$ watch oc get csv -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.10.1 1.9.0 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.10.1 1.9.0 Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3. Configuring the libvirt volume Copier lienLien copié sur presse-papiers!
The OpenShift sandboxed containers Operator configures the libvirt volume and pool on your KVM host automatically during installation. If required, you can manually configure or create additional libvirt volumes and pools.
Prerequisites
- You have installed the OpenShift sandboxed containers Operator on your OpenShift Container Platform cluster by using the OpenShift Container Platform web console or the command line.
- You have administrator privileges for your KVM host.
-
You have installed
podman
on your KVM host. -
You have installed
virt-customize
on your KVM host. -
You have a
/var/lib/libvirt/images/
directory for your images.
Procedure
- Log in to the KVM host.
Set the name of the libvirt pool by running the following command:
export LIBVIRT_POOL=<libvirt_pool>
$ export LIBVIRT_POOL=<libvirt_pool>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow You need the
LIBVIRT_POOL
value to create the secret for the libvirt provider.Set the name of the libvirt volume by running the following command:
export LIBVIRT_VOL_NAME=<libvirt_volume>
$ export LIBVIRT_VOL_NAME=<libvirt_volume>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow You need the
LIBVIRT_VOL_NAME
value to create the secret for the libvirt provider.Set the path of the default storage pool location, by running the following command:
export LIBVIRT_POOL_DIRECTORY="/var/lib/libvirt/images/"
$ export LIBVIRT_POOL_DIRECTORY="/var/lib/libvirt/images/"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a libvirt pool by running the following command:
virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
$ virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Start the libvirt pool by running the following command:
virsh pool-start $LIBVIRT_POOL
$ virsh pool-start $LIBVIRT_POOL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a libvirt volume for the pool by running the following command:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. Creating a custom peer pod VM image Copier lienLien copié sur presse-papiers!
You can create a custom peer pod virtual machine (VM) image instead of using the default Operator-built image.
You build an Open Container Initiative (OCI) container with the peer pod QCOW2 image. Later, you add the container registry URL and the image path to the peer pod VM image config map.
Procedure
Create a
Dockerfile.podvm-oci
file:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Build a container with the pod VM QCOW2 image by running the following command:
docker build -t podvm-libvirt \ --build-arg PODVM_IMAGE_SRC=<podvm_image_source> \ --build-arg PODVM_IMAGE_PATH=<podvm_image_path> \ -f Dockerfile.podvm-oci .
$ docker build -t podvm-libvirt \ --build-arg PODVM_IMAGE_SRC=<podvm_image_source> \
1 --build-arg PODVM_IMAGE_PATH=<podvm_image_path> \
2 -f Dockerfile.podvm-oci .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.5. Creating the peer pods secret Copier lienLien copié sur presse-papiers!
You must create a peer pods secret. The secret stores credentials for creating the pod virtual machine (VM) image and peer pod instances.
Prerequisites
LIBVIRT_URI
. This value is the default gateway IP address of the libvirt network. Check your libvirt network setup to obtain this value.NoteIf libvirt uses the default bridge virtual network, you can obtain the
LIBVIRT_URI
by running the following commands:virtint=$(bridge_line=$(virsh net-info default | grep Bridge); echo "${bridge_line//Bridge:/}" | tr -d [:blank:]) LIBVIRT_URI=$( ip -4 addr show $virtint | grep -oP '(?<=inet\s)\d+(\.\d+){3}') LIBVIRT_GATEWAY_URI="qemu+ssh://root@${LIBVIRT_URI}/system?no_verify=1"
$ virtint=$(bridge_line=$(virsh net-info default | grep Bridge); echo "${bridge_line//Bridge:/}" | tr -d [:blank:]) $ LIBVIRT_URI=$( ip -4 addr show $virtint | grep -oP '(?<=inet\s)\d+(\.\d+){3}') $ LIBVIRT_GATEWAY_URI="qemu+ssh://root@${LIBVIRT_URI}/system?no_verify=1"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
REDHAT_OFFLINE_TOKEN
. You have generated this token to download the RHEL image at Red Hat API Tokens.
Procedure
Create a
peer-pods-secret.yaml
manifest file according to the following example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the secret by running the following command:
oc create -f peer-pods-secret.yaml
$ oc create -f peer-pods-secret.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6. Creating the peer pods config map Copier lienLien copié sur presse-papiers!
You must create the peer pods config map.
Procedure
Create a
peer-pods-cm.yaml
manifest file according to the following example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow LIBVIRT_POOL
- If you have manually configured the libvirt pool, use the same name as in your KVM host configuration.
LIBVIRT_VOL_NAME
- If you have manually configured the libvirt volume, use the same name as in your KVM host configuration.
LIBVIRT_DIR_NAME
-
Specify the libvirt directory for storing virtual machine disk images, such as
.qcow2
, or.raw
files. To ensure libvirt has read and write access permissions, use a subdirectory of the libvirt storage directory. The default is/var/lib/libvirt/images/
. LIBVIRT_NET
- Specify a libvirt network if you do not want to use the default network.
PEERPODS_LIMIT_PER_NODE
-
You can increase this value to run more peer pods on a node. The default value is
10
. ROOT_VOLUME_SIZE
- You can increase this value for pods with larger container images. Specify the root volume size in gigabytes for the pod VM. The default and minimum size is 6 GB.
Create the config map by running the following command:
oc create -f peer-pods-cm.yaml
$ oc create -f peer-pods-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.7. Creating the peer pod VM image config map Copier lienLien copié sur presse-papiers!
You must create a config map for the peer pod virtual machine (VM) image.
Prerequisites
- You must create an activation key by using the Red Hat Hybrid Cloud Console.
- Optional: If you want to use a Cloud API Adaptor custom image, you must have the name, URL, and the branch or tag of the image.
Procedure
Create a
libvirt-podvm-image-cm.yaml
manifest according to the following example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Specify
yes
if you want to use the custom Cloud API Adaptor source to build the pod VM image. - 2
- Optional: Specify the URL of the Cloud API Adaptor custom image.
- 3
- Optional: Specify the branch or tag of the Cloud API Adaptor custom image.
- 4
- Specify your RHEL activation key.
- 5
- Optional: If you created a custom peer pod VM image, specify the container registry URL, the image tag, and the image path (default:
/image/podvm.qcow2
). Otherwise, set the value to""
. - 6
- The default value,
true
, enables IBM Secure Execution for the default Operator-built image. If you use a custom peer pod VM image, set it tofalse
. - 7
- Specify the RHEL image operating system version. IBM Z® Secure Execution supports RHEL 9.5 and later versions.
- 8
- Specify
false
if you do not want to verify Secure Execution with the digicert CA certificate. The default value istrue
.
Create the config map by running the following command:
oc apply -f libvirt-podvm-image-cm.yaml
$ oc apply -f libvirt-podvm-image-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The libvirt pod VM image config map is created for your libvirt provider.
6.8. Creating the KVM host secret Copier lienLien copié sur presse-papiers!
You must create the secret for your KVM host.
Procedure
Generate an SSH key pair by running the following command:
ssh-keygen -f ./id_rsa -N ""
$ ssh-keygen -f ./id_rsa -N ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy the public SSH key to your KVM host:
ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
$ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Specify the IP address of your KVM host or the LPAR where the peer pod VM is running. For example,
192.168.122.1
.
Create the
Secret
object by running the following command:oc create secret generic ssh-key-secret \ -n openshift-sandboxed-containers-operator \ --from-file=id_rsa.pub=./id_rsa.pub \ --from-file=id_rsa=./id_rsa
$ oc create secret generic ssh-key-secret \ -n openshift-sandboxed-containers-operator \ --from-file=id_rsa.pub=./id_rsa.pub \ --from-file=id_rsa=./id_rsa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Delete the SSH keys you created:
shred --remove id_rsa.pub id_rsa
$ shred --remove id_rsa.pub id_rsa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.9. Selecting a custom peer pod VM image Copier lienLien copié sur presse-papiers!
You can select a custom peer pod virtual machine (VM) image, tailored to your workload requirements by adding an annotation to the pod manifest. The custom image overrides the default image specified in the peer pods config map.
You create a new libvirt volume in your libvirt pool and upload the custom peer pod VM image to the new volume. Then, you update the pod manifest to use the custom peer pod VM image.
Procedure
Set the
LIBVIRT_POOL
variable by running the following command:export LIBVIRT_POOL=<libvirt_pool>
$ export LIBVIRT_POOL=<libvirt_pool>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Set the
LIBVIRT_VOL_NAME
variable to a new libvirt volume by running the following command:export LIBVIRT_VOL_NAME=<new_libvirt_volume>
$ export LIBVIRT_VOL_NAME=<new_libvirt_volume>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a libvirt volume for the pool by running the following command:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Upload the custom peer pod VM image to the new libvirt volume:
virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME <custom_podvm_image.qcow2> \ --pool $LIBVIRT_POOL --sparse
$ virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME <custom_podvm_image.qcow2> \ --pool $LIBVIRT_POOL --sparse
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a
my-pod-manifest.yaml
file according to the following example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the pod by running the following command:
oc create -f my-pod-manifest.yaml
$ oc create -f my-pod-manifest.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.10. Customizing the Kata Agent policy Copier lienLien copié sur presse-papiers!
You can customize the Kata Agent policy to override the default policy, which is permissive, for a peer pod. The Kata Agent policy is a security mechanism that controls API requests for peer pods.
You must override the default policy in a production environment.
As a minimum requirement, you must disable ExecProcessRequest
to prevent a cluster administrator from accessing sensitive data by running the oc exec
command on a peer pod.
You can use the default policy in development and test environments where security is not a concern, for example, in an environment where the control plane can be trusted.
A custom policy replaces the default policy entirely. To modify specific APIs, include the full policy and adjust the relevant rules.
Procedure
Create a custom
policy.rego
file by modifying the default policy:Copy to Clipboard Copied! Toggle word wrap Toggle overflow The default policy allows all API calls. Adjust the
true
orfalse
values to customize the policy further based on your needs.Convert the
policy.rego
file to a Base64-encoded string by running the following command:base64 -w0 policy.rego
$ base64 -w0 policy.rego
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Record the output.
Add the Base64-encoded policy string to the
my-pod.yaml
manifest:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the pod by running the following command:
oc create -f my-pod.yaml
$ oc create -f my-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.11. Creating the KataConfig custom resource Copier lienLien copié sur presse-papiers!
You must create the KataConfig
custom resource (CR) to install kata-remote
as a runtime class on your worker nodes.
OpenShift sandboxed containers installs kata-remote
as a secondary, optional runtime on the cluster and not as the primary runtime.
Creating the KataConfig
CR automatically reboots the worker nodes. The reboot can take from 10 to more than 60 minutes. The following factors can increase the reboot time:
- A large OpenShift Container Platform deployment with a greater number of worker nodes.
- Activation of the BIOS and Diagnostics utility.
- Deployment on a hard disk drive rather than an SSD.
- Deployment on physical nodes such as bare metal, rather than on virtual nodes.
- A slow CPU and network.
Procedure
Create an
example-kataconfig.yaml
manifest file according to the following example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Optional: If you have applied node labels to install
kata-remote
on specific nodes, specify the key and value, for example,osc: 'true'
.
Create the
KataConfig
CR by running the following command:oc apply -f example-kataconfig.yaml
$ oc apply -f example-kataconfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The new
KataConfig
CR is created and installskata-remote
as a runtime class on the worker nodes.Wait for the
kata-remote
installation to complete and the worker nodes to reboot before verifying the installation.Monitor the installation progress by running the following command:
watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow When the status of all workers under
kataNodes
isinstalled
and the conditionInProgress
isFalse
without specifying a reason, thekata-remote
is installed on the cluster.Verify that you have built the peer pod image and uploaded it to the libvirt volume by running the following command:
oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
$ oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Monitor the
kata-oc
machine config pool progress to ensure that it is in theUPDATED
state, whenUPDATEDMACHINECOUNT
equalsMACHINECOUNT
, by running the following command:watch oc get mcp/kata-oc
$ watch oc get mcp/kata-oc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Verify the daemon set by running the following command:
oc get -n openshift-sandboxed-containers-operator ds/osc-caa-ds
$ oc get -n openshift-sandboxed-containers-operator ds/osc-caa-ds
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Verify the runtime classes by running the following command:
oc get runtimeclass
$ oc get runtimeclass
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
NAME HANDLER AGE kata-remote kata-remote 152m
NAME HANDLER AGE kata-remote kata-remote 152m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.12. Modifying the number of peer pod VMs per node Copier lienLien copié sur presse-papiers!
You can modify the limit of peer pod virtual machines (VMs) per node by editing the peerpodConfig
custom resource (CR).
Procedure
Check the current limit by running the following command:
oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'
$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Specify a new value for the
limit
key by running the following command:oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'
$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.13. Configuring your workload for OpenShift sandboxed containers Copier lienLien copié sur presse-papiers!
You configure your workload for OpenShift sandboxed containers by setting kata-remote
as the runtime class for the following pod-templated objects:
-
Pod
objects -
ReplicaSet
objects -
ReplicationController
objects -
StatefulSet
objects -
Deployment
objects -
DeploymentConfig
objects
Do not deploy workloads in an Operator namespace. Create a dedicated namespace for these resources.
Prerequisites
-
You have created the
KataConfig
custom resource (CR).
Procedure
Add
spec.runtimeClassName: kata-remote
to the manifest of each pod-templated workload object as in the following example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Apply the changes to the workload object by running the following command:
oc apply -f <object.yaml>
$ oc apply -f <object.yaml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform creates the workload object and begins scheduling it.
Verification
-
Inspect the
spec.runtimeClassName
field of a pod-templated object. If the value iskata-remote
, then the workload is running on OpenShift sandboxed containers.
!:ibm-osc: