Skip to content

Instantly share code, notes, and snippets.

@mhrivnak
Created March 17, 2022 03:20
Show Gist options
  • Save mhrivnak/110ca870abadcc9389fe6965b6a2de29 to your computer and use it in GitHub Desktop.
Save mhrivnak/110ca870abadcc9389fe6965b6a2de29 to your computer and use it in GitHub Desktop.

containerd in OpenShift

This rough document captures steps that can be taken as an experiment to hack containerd into an OpenShift cluster. This should not be used for anything important.

Limitations:

  • The resulting cluster is not upgradeable.
  • None of OpenShift's disconnected features will work, because they are cri-o specific.

containerd RPM

Build an RPM for containerd that can install and run on RHCOS, which is based on RHEL 8.5.

kubelet.service

Re-build machine-config-operator, making the following changes.

Apply a patch for control plane nodes.

diff --git a/templates/master/01-master-kubelet/_base/units/kubelet.service.yaml b/templates/master/01-master-kubelet/_base/units/kubelet.service.yaml
index 3d52dff415..39cc4797af 100644
--- a/templates/master/01-master-kubelet/_base/units/kubelet.service.yaml
+++ b/templates/master/01-master-kubelet/_base/units/kubelet.service.yaml
@@ -4,8 +4,8 @@ contents: |
   [Unit]
   Description=Kubernetes Kubelet
   Wants=rpc-statd.service network-online.target
-  Requires=crio.service kubelet-auto-node-size.service
-  After=network-online.target crio.service kubelet-auto-node-size.service
+  Requires=containerd.service kubelet-auto-node-size.service
+  After=network-online.target containerd.service kubelet-auto-node-size.service
   After=ostree-finalize-staged.service
 
   [Service]
@@ -27,8 +27,8 @@ contents: |
         --bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
         --kubeconfig=/var/lib/kubelet/kubeconfig \
         --container-runtime=remote \
-        --container-runtime-endpoint=/var/run/crio/crio.sock \
-        --runtime-cgroups=/system.slice/crio.service \
+        --container-runtime-endpoint=/var/run/containerd/containerd.sock \
+        --runtime-cgroups=/system.slice/containerd.service \
         --node-labels=node-role.kubernetes.io/master,node.openshift.io/os_id=${ID} \
 {{- if eq .IPFamilies "DualStack"}}
         --node-ip=${KUBELET_NODE_IPS} \

And the same for workers.

diff --git a/templates/worker/01-worker-kubelet/_base/units/kubelet.service.yaml b/templates/worker/01-worker-kubelet/_base/units/kubelet.service.yaml
index 787337f1fc..1afd9447ca 100644
--- a/templates/worker/01-worker-kubelet/_base/units/kubelet.service.yaml
+++ b/templates/worker/01-worker-kubelet/_base/units/kubelet.service.yaml
@@ -4,8 +4,8 @@ contents: |
   [Unit]
   Description=Kubernetes Kubelet
   Wants=rpc-statd.service network-online.target
-  Requires=crio.service kubelet-auto-node-size.service
-  After=network-online.target crio.service kubelet-auto-node-size.service
+  Requires=containerd.service kubelet-auto-node-size.service
+  After=network-online.target containerd.service kubelet-auto-node-size.service
   After=ostree-finalize-staged.service
 
   [Service]
@@ -27,8 +27,8 @@ contents: |
         --bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
         --kubeconfig=/var/lib/kubelet/kubeconfig \
         --container-runtime=remote \
-        --container-runtime-endpoint=/var/run/crio/crio.sock \
-        --runtime-cgroups=/system.slice/crio.service \
+        --container-runtime-endpoint=/var/run/containerd/containerd.sock \
+        --runtime-cgroups=/system.slice/containerd.service \
         --node-labels=node-role.kubernetes.io/worker,node.openshift.io/os_id=${ID} \
 {{- if eq .IPFamilies "DualStack"}}
         --node-ip=${KUBELET_NODE_IPS} \

build a custom RHEL CoreOS ISO

Use the coreos assembler.

Include the containerd RPM.

Include /etc/containerd/config.toml

build a custom OpenShift release

Override within the payload:

  • machine-os-content
  • machine-config-operator

install a cluster

Using the custom build of OpenShift, install a new cluster.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment