Installation¶
This guide walks through the installation, configuration, and first deployment of the yake-ansible platform. Check the requirements first.
Install the Dependencies¶
Create a Python virtual environment and install the required dependencies:
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
ansible-galaxy install -f -r requirements.yml
Configuration¶
Copy the example configuration and open it for editing:
cp group_vars/all.yml.example group_vars/all.yml
$EDITOR group_vars/all.yml
The following sections are required for a minimal working deployment.
OpenStack Credentials¶
These credentials are used for the garden cluster and the Gardener control plane. Application credentials are recommended over username and password.
gardener_operator_openstack_auth_url: "https://keystone.example.com:5000"
gardener_operator_openstack_project_name: "my-project"
gardener_operator_openstack_domain_name: "my-domain"
gardener_operator_openstack_region_name: "RegionOne"
gardener_operator_openstack_application_credential_id: "..."
gardener_operator_openstack_application_credential_name: "yake"
gardener_operator_openstack_application_credential_secret: "..."
If your OpenStack uses a custom CA certificate, set it as a multiline string:
gardener_operator_openstack_cacert: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Garden URL¶
The base domain for the Gardener installation. A wildcard DNS entry for this domain must point to the garden cluster's ingress load balancer IP.
gardener_operator_garden_url: "gardener.example.com"
DNS Provider¶
The DNS provider used by Gardener for shoot DNS records and internal domain management. OpenStack Designate is the default:
gardener_operator_dns_provider_type: "openstack-designate"
gardener_operator_dns_credentials: {} # reuses OpenStack credentials above
For other providers (AWS Route53, Azure DNS, Google Cloud DNS), set the type and provide the corresponding credentials. See configuration.md for examples.
Cloud Profile¶
A cloud profile defines the available machine types, images, regions, and storage classes for a particular OpenStack environment. At least one cloud profile is required.
gardener_operator_cloudprofiles:
- name: openstack-a
storageclasses:
- name: ssd
default: "true"
type: ssd
availability: nova
floating_pools:
- name: public
loadbalancer_providers:
- name: ovn
keystone_urls:
- region: region-a
url: "https://keystone.example.com:5000"
machine_images:
- name: gardenlinux
versions:
- version: 2150.15.0
image: "Garden Linux 2150.15"
regions:
- name: region-a
id: "6ed7d8aa-e770-4061-a8d7-461a83e41c31"
kubernetes_versions:
- version: 1.37.2
classification: supported
machinetypes:
- name: SCS-4V-8
cpu: "4"
gpu: "0"
memory: 8Gi
regions:
- name: region-a
zones:
- nova
Managed Seed¶
A managed seed is a Gardener shoot that is also registered as a Gardener seed. It provides capacity for hosting shoot cluster control planes.
gardener_operator_managed_seeds:
- name: seed-a
cloudprofile_name: openstack-a
networking_type: cilium
kubernetes_version: 1.37.2
floating_pool_name: "public"
loadbalancer_provider: ovn
openstack:
auth_url: "https://keystone.example.com:5000"
project_name: "my-project"
domain_name: "my-domain"
region_name: "region-a"
application_credential_id: "..."
application_credential_name: "yake-seed"
application_credential_secret: "..."
workers:
- name: worker-4v16
machinetype: SCS-4V-16
image_name: gardenlinux
image_version: 2150.15.0
minimum: 3
maximum: 15
volume_type: ssd
volume_size: 50Gi
zones:
- nova
settings:
excess_capacity_reservation: true
Garden Cluster¶
The garden cluster is created by Cluster API. Configure the OpenStack credentials and machine sizes for it:
clusterapi_cluster_openstack_auth_url: "https://keystone.example.com:5000"
clusterapi_cluster_openstack_application_credential_id: "..."
clusterapi_cluster_openstack_application_credential_secret: "..."
clusterapi_cluster_openstack_domain_name: "my-domain"
clusterapi_cluster_openstack_region_name: "RegionOne"
clusterapi_cluster_openstack_image_id: "your-image-uuid"
clusterapi_cluster_openstack_image_name: "expected-image-name" # recommended, verifies the image ID
Machine Images¶
Machine images must be uploaded to your OpenStack Glance before running the playbook. GardenLinux is the recommended OS. See scripts/README.md for tools that automate this step.
Running the Playbook¶
Once the configuration is complete, run the full setup:
ansible-playbook -i localhost, -c local site.yml
Sudo with a password
On hosts where sudo requires a password, add --ask-become-pass.
Individual steps can be run with tags: kubectl, helm, clusterctl, management-cluster, clusterapi, garden-cluster and gardener. See How it works for the full list.
The playbook takes approximately 15 to 30 minutes to complete, depending on OpenStack provisioning speed. You can follow the progress in the output of each play.
Validating the Deployment¶
After the playbook completes, verify each layer:
# Management cluster
export KUBECONFIG=/var/lib/yake/kubeconfig.clusterapi
./.local/yake-kubectl get nodes
# Garden cluster
export KUBECONFIG=/var/lib/yake/kubeconfig.garden
./.local/yake-kubectl get nodes
./.local/yake-kubectl get pods -n garden
# Virtual Garden
export KUBECONFIG=/var/lib/yake/kubeconfig.garden
kubectl get secret gardener -n garden -o jsonpath='{.data.kubeconfig}' \
| base64 -d > /var/lib/yake/gardener-operator/kubeconfig.vgarden
export KUBECONFIG=/var/lib/yake/gardener-operator/kubeconfig.vgarden
./.local/yake-kubectl get seeds
./.local/yake-kubectl get cloudprofiles
All seeds should show Ready status. Cloud profiles should list the machines, images, and regions you configured.