Ansible role to install and configure InterLink components for Slurm and Kubernetes.
The role supports two execution modes:
interlink_type_of_node: slurm: installs InterLink API + Slurm plugin, generates mTLS certificates, and exports client artifacts.interlink_type_of_node: kubernetes: deploys the InterLink Virtual Kubelet via Helm using artifacts generated in Slurm mode.
- Installs required packages (
ca-certificates,curl,jq,openssl). - Creates InterLink directories under
interlink_base_dir. - Downloads InterLink binaries and installs them under
interlink_base_dir/bin. - Generates CA/server/client mTLS certificates with
community.crypto. - Templates InterLink and Slurm plugin configuration files.
- Templates and manages systemd units:
interlink-api.serviceinterlink-slurm-plugin.service
- Validates local mTLS endpoint (
/pinglink). - Exports Kubernetes client cert artifacts to:
{{ interlink_artifact_dir }}/ca.crt{{ interlink_artifact_dir }}/tls.crt{{ interlink_artifact_dir }}/tls.key
- Verifies mTLS artifacts exist on the Ansible controller.
- Copies artifacts to target host (
interlink_remote_cert_dir). - Ensures namespace exists.
- Creates or updates TLS secret for Virtual Kubelet.
- Templates Helm values and installs/upgrades InterLink chart from GHCR OCI.
- Waits for rollout.
- Finds and approves pending kubelet-serving CSRs for the InterLink service account.
- Waits for Virtual Kubelet node Ready.
- Optionally runs smoke test pod (
interlink_run_smoke_test: true).
- Ansible >=
2.12 - Collection:
community.crypto
- External tools expected on target hosts:
- Slurm mode:
curl,openssl,jq(installed by role), systemd available. - Kubernetes mode:
kubectl,helm,jqavailable in PATH.
- Slurm mode:
- Access to Kubernetes admin kubeconfig (
kubeconfig_path, default/etc/kubernetes/admin.conf).
Defaults are defined in defaults/main.yml.
interlink_type_of_node(default:kubernetes):kubernetesorslurm.type_of_node: backward-compatible alias.interlink_namespace(default:interlink)interlink_node_name(default:interlink-slurm-vk)interlink_run_smoke_test(default:false)
interlink_base_dir(default:/opt/interlink)interlink_data_dir(default:{{ interlink_base_dir }}/data)interlink_work_dir(default:{{ interlink_base_dir }}/work)interlink_home_dir(default:{{ interlink_base_dir }}/home)interlink_artifact_dir(default:{{ playbook_dir }}/artifacts/{{ interlink_node_name }})interlink_remote_cert_dir(default:/tmp/{{ interlink_node_name }}-certs)kubeconfig_path(default:/etc/kubernetes/admin.conf)
interlink_version(default:0.6.1-patch1)interlink_slurm_plugin_version(default:0.6.1)interlink_chart_version(default:0.6.1)virtual_kubelet_image(default:ghcr.io/interlink-hq/interlink/virtual-kubelet-inttw:0.6.1-patch1)
virtual_node_cpu(default:1)virtual_node_memory_gib(default:1)virtual_node_pods(default:10)virtual_kubelet_cpu_request(default:100m)virtual_kubelet_cpu_limit(default:500m)virtual_kubelet_memory_request(default:128Mi)virtual_kubelet_memory_limit(default:512Mi)
slurm_partition(default:debug)slurm_default_cpu(default:1)slurm_default_memory(default:1G)slurm_job_time(default:00:10:00)
Run the role in two phases:
- Execute with
interlink_type_of_node: slurmon your Slurm-side host. - Execute with
interlink_type_of_node: kuberneteson your Kubernetes-side host.
The Kubernetes phase consumes artifacts exported by the Slurm phase from interlink_artifact_dir.
- name: Deploy InterLink on Slurm host
hosts: slurm_frontend
become: true
roles:
- role: grycap.interlink
vars:
interlink_type_of_node: slurm
interlink_node_name: interlink-slurm-vk- name: Deploy InterLink Virtual Kubelet on Kubernetes host
hosts: k8s_frontend
become: true
roles:
- role: grycap.interlink
vars:
interlink_type_of_node: kubernetes
interlink_node_name: interlink-slurm-vk
interlink_namespace: interlink
interlink_run_smoke_test: truemeta/main.yml declares a conditional dependency:
usegalaxy_eu.apptainerwhen running in Slurm mode.
- Error about missing mTLS artifacts in Kubernetes mode:
- Run Slurm mode first, then verify files exist in
interlink_artifact_dir.
- Run Slurm mode first, then verify files exist in
- CSR approval does not happen:
- Verify
jqis installed and the service account name matchessystem:serviceaccount:<namespace>:<interlink_node_name>.
- Verify
- Helm install/upgrade fails:
- Verify
helmsupports OCI and can accessghcr.io.
- Verify
Apache-2.0