Introduction
Minikube runs a single-node Kubernetes cluster locally — perfect for development, testing, and learning. Automating Minikube installation with Ansible ensures consistent setup across developer machines, CI/CD runners, and lab environments.
Method 1: Ansible Galaxy Role
The quickest approach — use the community gantsign.minikube role:
ansible-galaxy install gantsign.minikube
Playbook
---
- name: Install Minikube
hosts: all
roles:
- role: gantsign.minikube
minikube_version: '1.32.0'
minikube_architecture: 'amd64'
Customize for ARM (Apple Silicon)
- name: Install Minikube on Apple Silicon
hosts: all
roles:
- role: gantsign.minikube
minikube_version: '1.32.0'
minikube_architecture: 'arm64'
minikube_download_dir: "{{ ansible_facts.env.HOME }}/Downloads"
Method 2: Manual Installation Playbook
Full control over the installation:
---
- name: Install Minikube and dependencies
hosts: dev_machines
become: true
vars:
minikube_version: "1.32.0"
kubectl_version: "1.29.0"
tasks:
- name: Install required packages
ansible.builtin.package:
name:
- curl
- conntrack
- socat
state: present
- name: Detect architecture
ansible.builtin.set_fact:
arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}"
- name: Download minikube binary
ansible.builtin.get_url:
url: "https://storage.googleapis.com/minikube/releases/v{{ minikube_version }}/minikube-linux-{{ arch }}"
dest: /usr/local/bin/minikube
mode: '0755'
- name: Download kubectl
ansible.builtin.get_url:
url: "https://dl.k8s.io/release/v{{ kubectl_version }}/bin/linux/{{ arch }}/kubectl"
dest: /usr/local/bin/kubectl
mode: '0755'
- name: Verify installation
ansible.builtin.command: minikube version
register: minikube_ver
changed_when: false
- name: Show version
ansible.builtin.debug:
msg: "{{ minikube_ver.stdout }}"
Install with Docker Driver
- name: Set up Minikube with Docker
hosts: dev_machines
become: true
tasks:
- name: Install Docker
ansible.builtin.package:
name: docker.io
state: present
- name: Add user to docker group
ansible.builtin.user:
name: "{{ ansible_user }}"
groups: docker
append: true
- name: Install minikube
ansible.builtin.get_url:
url: "https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64"
dest: /usr/local/bin/minikube
mode: '0755'
- name: Set default driver to Docker
ansible.builtin.command:
cmd: minikube config set driver docker
become: false
changed_when: true
Cluster Management Playbook
---
- name: Manage Minikube cluster
hosts: localhost
connection: local
become: false
vars:
cluster_cpus: 4
cluster_memory: 8192
cluster_disk: "40g"
kubernetes_version: "1.29.0"
tasks:
- name: Start Minikube cluster
ansible.builtin.command:
cmd: >-
minikube start
--cpus={{ cluster_cpus }}
--memory={{ cluster_memory }}
--disk-size={{ cluster_disk }}
--kubernetes-version=v{{ kubernetes_version }}
--driver=docker
--addons=ingress,metrics-server,dashboard
register: start_result
changed_when: "'Starting' in start_result.stdout"
- name: Verify cluster is running
ansible.builtin.command: kubectl cluster-info
register: cluster_info
changed_when: false
- name: Show cluster info
ansible.builtin.debug:
msg: "{{ cluster_info.stdout_lines }}"
Stop and Delete Cluster
- name: Stop Minikube
ansible.builtin.command: minikube stop
changed_when: true
- name: Delete Minikube cluster
ansible.builtin.command: minikube delete --all --purge
changed_when: true
Minikube Addons Management
- name: Enable useful addons
ansible.builtin.command:
cmd: "minikube addons enable {{ item }}"
loop:
- ingress
- metrics-server
- dashboard
- registry
- storage-provisioner
changed_when: true
become: false
- name: List enabled addons
ansible.builtin.command: minikube addons list --output=json
register: addons
changed_when: false
- name: Show enabled addons
ansible.builtin.debug:
msg: "{{ addons.stdout | from_json }}"
Deploy Application to Minikube
---
- name: Deploy app to Minikube
hosts: localhost
connection: local
become: false
tasks:
- name: Ensure Minikube is running
ansible.builtin.command: minikube status
register: mk_status
changed_when: false
ignore_errors: true
- name: Start Minikube if not running
ansible.builtin.command: minikube start
when: mk_status is failed
changed_when: true
- name: Create namespace
kubernetes.core.k8s:
state: present
definition:
apiVersion: v1
kind: Namespace
metadata:
name: myapp
- name: Deploy application
kubernetes.core.k8s:
state: present
definition:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
namespace: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx:latest
ports:
- containerPort: 80
- name: Expose service
kubernetes.core.k8s:
state: present
definition:
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: myapp
spec:
type: NodePort
selector:
app: myapp
ports:
- port: 80
targetPort: 80
- name: Get service URL
ansible.builtin.command: minikube service myapp -n myapp --url
register: service_url
changed_when: false
- name: Show application URL
ansible.builtin.debug:
msg: "Application available at: {{ service_url.stdout }}"
CI/CD Testing with Minikube
# .github/workflows/k8s-test.yml
name: Kubernetes Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Start Minikube
uses: medyagh/setup-minikube@latest
- name: Deploy and test
run: |
ansible-playbook deploy-to-minikube.yml
kubectl wait --for=condition=available deployment/myapp -n myapp --timeout=120s
Minikube vs Other Local K8s
| Tool | Multi-node | Resource Usage | Best For |
|---|---|---|---|
| Minikube | ✅ (experimental) | Medium | General dev/testing |
| kind | ✅ | Low | CI/CD pipelines |
| k3s | ✅ | Low | Edge/IoT |
| Docker Desktop | ❌ | High | Simple local dev |
| MicroK8s | ✅ | Low | Ubuntu/snap users |
Related Articles
- Ansible for Containers: Docker, Podman, Kubernetes
- Create Kubernetes Namespace
- Create Kubernetes Pod
- Install AWX Operator for Kubernetes
- Ansible Roles Explained
- Ansible Best Practices Guide
Conclusion
Minikube with Ansible gives you reproducible local Kubernetes environments. Use the Galaxy role for quick setup, or build a custom playbook for full control over versions, drivers, and addons. Combine with the kubernetes.core.k8s module to deploy applications directly from Ansible, and integrate into CI/CD for automated Kubernetes testing. For CI pipelines, consider kind as a lighter alternative — but for developer workstations, Minikube's dashboard and addon ecosystem remains hard to beat.
Further reading
To go deeper, managing Kubernetes with Ansible playbooks expands on these patterns in production.