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.
Build an RPM for containerd that can install and run on RHCOS, which is based on RHEL 8.5.
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} \
Use the coreos assembler.
Include the containerd RPM.
Include /etc/containerd/config.toml
Override within the payload:
- machine-os-content
- machine-config-operator
Using the custom build of OpenShift, install a new cluster.