Ansible on Vanilla Kubernetes 1.30: StorageClass and PVC Provisioning Complete Guide
By Luca Berton · Published 2024-01-01 · Category: events
Automate storageclass and pvc provisioning on Vanilla Kubernetes 1.30 (kubeadm 1.30, GA 2024-04) with Ansible.
Vanilla Kubernetes 1.30 (kubeadm 1.30) reached general availability on 2024-04 and is supported 2025-06. Structured config, contextual logging GA. This guide shows how to automate storageclass and pvc provisioning on Vanilla Kubernetes 1.30 with Ansible end-to-end: prerequisites, an opinionated playbook using the kubernetes.core.k8s module, validation, and troubleshooting.
Every example is tested with ansible-core 2.18 LTS on a Linux control node and is idempotent — re-running the playbook converges to the same state with zero changed tasks.
Why StorageClass and PVC Provisioning on Vanilla Kubernetes 1.30
Vanilla Kubernetes 1.30 is configured through the Kubernetes API. Ansible's kubernetes.core.k8s module gives you the same declarative loop as on Linux servers — manifest in, cluster state out.
See also: Ansible on Vanilla Kubernetes 1.30: Cluster Bootstrap Complete Guide
Prerequisites
Control node:
• Python 3.11+ with kubernetes ≥ 30
• kubectl (or talosctl for Talos) on PATH
• ansible-core 2.18 + kubernetes.core 5.0
Cluster: Vanilla Kubernetes 1.30 (kubeadm 1.30) with a kubeconfig that has cluster-admin or the equivalent RBAC for your task.
StorageClass and PVC Provisioning playbook
Inventory
[kubernetes-1-30]
localhost ansible_connection=local
[kubernetes-1-30:vars]
ansible_python_interpreter=/usr/bin/python3
Playbook
---
- name: StorageClass + PVC on Vanilla Kubernetes 1.30
hosts: kubernetes-1-30
tasks:
- name: Create StorageClass
kubernetes.core.k8s:
state: present
definition:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: { name: fast-ssd }
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
- name: Create PVC
kubernetes.core.k8s:
state: present
definition:
apiVersion: v1
kind: PersistentVolumeClaim
metadata: { name: data, namespace: app }
spec:
accessModes: [ReadWriteOnce]
resources: { requests: { storage: 10Gi } }
storageClassName: fast-ssd
See also: Ansible on Vanilla Kubernetes 1.30: Ingress Controller Installation Complete Guide
Validation
ansible-playbook -i inventory/kubernetes-1-30.ini storageclass-pvc-provisioning.yml --check --diff
ansible-playbook -i inventory/kubernetes-1-30.ini storageclass-pvc-provisioning.yml
Confirm idempotency by running the playbook a second time — the play recap should report changed=0.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Unauthorized | kubeconfig expired | kubectl config view and refresh token |
| ImagePullBackOff | Registry credentials missing | Create a docker-registry Secret and reference via imagePullSecrets |
| PodSchedulingFailed | No nodes match selector | Inspect kubectl describe pod events for taints/affinity |
See also: Ansible on Microk8s: StorageClass and PVC Provisioning Complete Guide
FAQ
Q. Which ansible-core release should I use with Vanilla Kubernetes 1.30? Use ansible-core 2.18 LTS. It is the current long-term support line and matches the collection versions referenced in this guide.
Q. Is the kubernetes.core.k8s module idempotent?
Yes. Re-running the playbook converges to the same state and reports changed=0 on the second run.
Q. How do I roll back if storageclass and pvc provisioning breaks production? Maintain a previous-version inventory and re-run the prior playbook. For package changes use APT pinning or DNF rollback.
Q. Does this playbook work in --check mode?
Yes. All tasks shown support check mode and --diff so you can preview changes before committing them.
Related guides
• Windows Server 2025 hardening with Ansible • Windows automation over WinRM with Ansible • Ansible 13 collection compatibility • Ansible connection types: SSH, WinRM, Local, Docker, Network guideConclusion
Vanilla Kubernetes 1.30 (kubeadm 1.30) is a first-class Ansible target for storageclass and pvc provisioning. Standardize on ansible-core 2.18 LTS plus the kubernetes.core collection, keep your inventory under version control, and gate every change with --check in CI. The playbook above is idempotent, supports rollback, and scales from a single host to thousands without modification.
Category: events