Questo contenuto non è disponibile nella lingua selezionata.
Chapter 5. Deploying OpenShift sandboxed containers on Google Cloud
You can deploy OpenShift sandboxed containers on Google Cloud,
Red Hat OpenShift sandboxed containers on Google Cloud 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.
You deploy OpenShift sandboxed containers by performing the following steps:
- Install the OpenShift sandboxed containers Operator on the OpenShift Container Platform cluster.
- Enable ports to allow internal communication with peer pods.
- Create the peer pods config map.
- Create the pod VM image config map.
- Optional: Customize the Kata agent policy.
-
Create the
KataConfigcustom resource. - Optional: Modify the number of virtual machines running on each worker node.
- Configure your workload for OpenShift sandboxed containers.
5.1. Prerequisites Copia collegamentoCollegamento copiato negli appunti!
- You have installed the latest version of Red Hat OpenShift Container Platform.
- Your OpenShift Container Platform cluster has at least one worker node.
- You have enabled ports 15150 and 9000 for communication in the subnet used for worker nodes and the pod virtual machine (VM). The ports enable communication between the Kata shim running on the worker node and the Kata agent running on the pod VM.
5.2. Installing the OpenShift sandboxed containers Operator Copia collegamentoCollegamento copiato negli appunti!
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-adminrole.
Procedure
Create an
osc-namespace.yamlmanifest file:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Create the namespace by running the following command:
oc create -f osc-namespace.yaml
$ oc create -f osc-namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Create an
osc-operatorgroup.yamlmanifest file:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the operator group by running the following command:
oc create -f osc-operatorgroup.yaml
$ oc create -f osc-operatorgroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Create an
osc-subscription.yamlmanifest file:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the subscription by running the following command:
oc create -f osc-subscription.yaml
$ oc create -f osc-subscription.yamlCopy 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-operatorCopy 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-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.10.3 1.9.0 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.10.3 1.9.0 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. Enabling port 15150 for Google Cloud Copia collegamentoCollegamento copiato negli appunti!
You must enable port 15150 to allow internal communication with peer pods running on Compute Engine.
Prerequisites
- You have installed the Google Cloud command line interface (CLI) tool.
-
You have access to the OpenShift Container Platform cluster as a user with the
roles/container.adminrole.
Procedure
Set the project ID variable by running the following command:
export GCP_PROJECT_ID="<project_id>"
$ export GCP_PROJECT_ID="<project_id>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Log in to Google Cloud by running the following command:
gcloud auth login
$ gcloud auth loginCopy to Clipboard Copied! Toggle word wrap Toggle overflow Set the Google Cloud project ID by running the following command:
gcloud config set project ${GCP_PROJECT_ID}$ gcloud config set project ${GCP_PROJECT_ID}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Open port 15150 by running the following command:
gcloud compute firewall-rules create allow-port-15150-restricted \ --project=${GCP_PROJECT_ID} \ --network=default \ --allow=tcp:15150 \ --source-ranges=<external_ip_cidr-1>[,<external_ip_cidr-2>,...]$ gcloud compute firewall-rules create allow-port-15150-restricted \ --project=${GCP_PROJECT_ID} \ --network=default \ --allow=tcp:15150 \ --source-ranges=<external_ip_cidr-1>[,<external_ip_cidr-2>,...]1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Specify one or more IP addresses or ranges in CIDR format, separated by commas. For example,
203.0.113.5/32,198.51.100.0/24.
Verification
Verify that port 15150 is open by running the following command:
gcloud compute firewall-rule list
$ gcloud compute firewall-rule listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. Creating the peer pods config map Copia collegamentoCollegamento copiato negli appunti!
You must create the peer pods config map.
Procedure
Log in to your Compute Engine instance to set the following environmental variables:
Get the project ID by running the following command:
GCP_PROJECT_ID=$(gcloud config get-value project)
$ GCP_PROJECT_ID=$(gcloud config get-value project)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Get the zone by running the following command:
GCP_ZONE=$(gcloud config get-value compute/zone)
$ GCP_ZONE=$(gcloud config get-value compute/zone)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Retrieve a list of network names by running the following command:
gcloud compute networks list --format="value(name)"
$ gcloud compute networks list --format="value(name)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Specify the network by running the following command:
GCP_NETWORK=<network_name>
$ GCP_NETWORK=<network_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Only auto-mode networks are supported. Custom networks are not supported at this time.
Create a
peer-pods-cm.yamlmanifest file according to the following example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow GCP_MACHINE_TYPE- Defines the default machine type that is used if the machine type is not defined in the workload object.
TAGS-
You can configure custom tags as
key:valuepairs for pod VM instances to track peer pod costs or to identify peer pods in different clusters. 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.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. Creating the peer pod VM image Copia collegamentoCollegamento copiato negli appunti!
You must create a QCOW2 peer pod virtual machine (VM) image.
Prerequisites
-
You have installed
podman. - You have access to a container registry.
Procedure
Clone the OpenShift sandboxed containers repository by running the following command:
git clone https://github.com/openshift/sandboxed-containers-operator.git
$ git clone https://github.com/openshift/sandboxed-containers-operator.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow Navigate to
sandboxed-containers-operator/config/peerpods/podvm/bootcby running the following command:cd sandboxed-containers-operator/config/peerpods/podvm/bootc
$ cd sandboxed-containers-operator/config/peerpods/podvm/bootcCopy to Clipboard Copied! Toggle word wrap Toggle overflow Log in to
registry.redhat.ioby running the following command:podman login registry.redhat.io
$ podman login registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow You must log in to
registry.redhat.io, because thepodman buildprocess must access theContainerfile.rhelcontainer image hosted on the registry.Set the image path for your container registry by running the following command:
IMG="<container_registry_url>/<username>/podvm-bootc:latest"
$ IMG="<container_registry_url>/<username>/podvm-bootc:latest"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Build the pod VM
bootcimage by running the following command:podman build -t ${IMG} -f Containerfile.rhel .$ podman build -t ${IMG} -f Containerfile.rhel .Copy to Clipboard Copied! Toggle word wrap Toggle overflow Log in to your container registry by running the following command:
podman login <container_registry_url>
$ podman login <container_registry_url>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Push the image to your container registry by running the following command:
podman push ${IMG}$ podman push ${IMG}Copy to Clipboard Copied! Toggle word wrap Toggle overflow For testing and development, you can make the image public.
Verify the
podvm-bootcimage by running the following command:podman images
$ podman imagesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
REPOSITORY TAG IMAGE ID CREATED SIZE example.com/example_user/podvm-bootc latest 88ddab975a07 2 seconds ago 1.82 GB
REPOSITORY TAG IMAGE ID CREATED SIZE example.com/example_user/podvm-bootc latest 88ddab975a07 2 seconds ago 1.82 GBCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6. Creating the peer pod VM image config map Copia collegamentoCollegamento copiato negli appunti!
Create the config map for the pod virtual machine (VM) image.
Procedure
Create a
podvm-image-cm.yamlmanifest with the following content:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create the config map by running the following command:
oc create -f podvm-image-cm.yaml
$ oc create -f podvm-image-cm.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7. Customizing the Kata Agent policy Copia collegamentoCollegamento copiato negli appunti!
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.regofile by modifying the default policy:Copy to Clipboard Copied! Toggle word wrap Toggle overflow The default policy allows all API calls. Adjust the
trueorfalsevalues to customize the policy further based on your needs.Convert the
policy.regofile to a Base64-encoded string by running the following command:base64 -w0 policy.rego
$ base64 -w0 policy.regoCopy to Clipboard Copied! Toggle word wrap Toggle overflow Record the output.
Add the Base64-encoded policy string to the
my-pod.yamlmanifest: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.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8. Creating the KataConfig custom resource Copia collegamentoCollegamento copiato negli appunti!
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.yamlmanifest 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-remoteon specific nodes, specify the key and value, for example,osc: 'true'.
Create the
KataConfigCR by running the following command:oc create -f example-kataconfig.yaml
$ oc create -f example-kataconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow The new
KataConfigCR is created and installskata-remoteas a runtime class on the worker nodes.Wait for the
kata-remoteinstallation 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
kataNodesisinstalledand the conditionInProgressisFalsewithout specifying a reason, thekata-remoteis installed on the cluster.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-dsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Verify the runtime classes by running the following command:
oc get runtimeclass
$ oc get runtimeclassCopy 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 152mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9. Modifying the number of peer pod VMs per node Copia collegamentoCollegamento copiato negli appunti!
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
limitkey 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
5.10. Verifying the pod VM image Copia collegamentoCollegamento copiato negli appunti!
After kata-remote is installed on your cluster, the OpenShift sandboxed containers Operator creates a pod VM image, which is used to create peer pods. This process can take a long time because the image is created on the cloud instance. You can verify that the pod VM image was created successfully by checking the config map that you created for the cloud provider.
Procedure
Obtain the config map you created for the peer pods:
oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
$ oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Check the
statusstanza of the YAML file.If the
PODVM_IMAGE_NAMEparameter is populated, the pod VM image was created successfully.
Troubleshooting
Retrieve the events log by running the following command:
oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
$ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow Retrieve the job log by running the following command:
oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
$ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
If you cannot resolve the issue, submit a Red Hat Support case and attach the output of both logs.
5.11. Configuring your workload for OpenShift sandboxed containers Copia collegamentoCollegamento copiato negli appunti!
You configure your workload for OpenShift sandboxed containers by setting kata-remote as the runtime class for the following pod-templated objects:
-
Podobjects -
ReplicaSetobjects -
ReplicationControllerobjects -
StatefulSetobjects -
Deploymentobjects -
DeploymentConfigobjects
Do not deploy workloads in an Operator namespace. Create a dedicated namespace for these resources.
Prerequisites
-
You have created the
KataConfigcustom resource (CR).
Procedure
Add
spec.runtimeClassName: kata-remoteto 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.runtimeClassNamefield of a pod-templated object. If the value iskata-remote, then the workload is running on OpenShift sandboxed containers.