Skip to content

Commit 18a2ac4

Browse files
authored
Gardener operator (#239)
1 parent 6095a3d commit 18a2ac4

File tree

34 files changed

+210
-491
lines changed

34 files changed

+210
-491
lines changed

Makefile

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ VRF=Vrf20
4040
else ifeq ($(MINI_LAB_FLAVOR),gardener)
4141
GARDENER_ENABLED=true
4242
# usually gardener restricts the maximum version for k8s:
43-
K8S_VERSION=1.30.8
43+
K8S_VERSION=1.32.5
4444
LAB_TOPOLOGY=mini-lab.sonic.yaml
4545
VRF=Vrf20
4646
else
@@ -375,15 +375,13 @@ dev-env:
375375

376376
.PHONY: fetch-virtual-kubeconfig
377377
fetch-virtual-kubeconfig:
378-
kubectl config unset users.virtual-garden
379-
kubectl config unset contexts.virtual-garden
380-
kubectl config unset clusters.virtual-garden
381-
kubectl get secret -n garden garden-kubeconfig-for-admin -o jsonpath='{.data.kubeconfig}' | base64 -d > .virtual-kubeconfig
382-
kubectl --kubeconfig=.virtual-kubeconfig config rename-context garden virtual-garden
383-
sed -i 's/name: garden/name: virtual-garden/g' .virtual-kubeconfig
384-
sed -i 's/name: admin/name: virtual-garden/g' .virtual-kubeconfig
385-
kubectl --kubeconfig=.virtual-kubeconfig config set contexts.virtual-garden.cluster virtual-garden
386-
kubectl --kubeconfig=.virtual-kubeconfig config set contexts.virtual-garden.user virtual-garden
387-
KUBECONFIG=$$KUBECONFIG:.virtual-kubeconfig kubectl config view --flatten > .merged-kubeconfig
388-
rm .virtual-kubeconfig
389-
mv .merged-kubeconfig .kubeconfig
378+
# TODO: it's hard to get the latest issued generic kubeconfig secret... just take the first result for now
379+
kubectl --kubeconfig=$(KUBECONFIG) get secret -n garden $(shell kubectl --kubeconfig=$(KUBECONFIG) get secret -n garden -l managed-by=secrets-manager,manager-identity=gardener-operator,name=generic-token-kubeconfig --no-headers | awk '{ print $$1 }') -o jsonpath='{.data.kubeconfig}' | base64 -d > .virtual-kubeconfig
380+
@kubectl --kubeconfig=.virtual-kubeconfig config set-cluster garden --server=https://api.gardener-kube-apiserver.172.17.0.1.nip.io:4443
381+
@kubectl --kubeconfig=.virtual-kubeconfig config set-credentials garden --token=$(shell kubectl --kubeconfig=$(KUBECONFIG) get secret -n garden shoot-access-virtual-garden -o jsonpath='{.data.token}' | base64 -d)
382+
@kubectl --kubeconfig=$(KUBECONFIG) config unset users.garden
383+
@kubectl --kubeconfig=$(KUBECONFIG) config unset contexts.garden
384+
@kubectl --kubeconfig=$(KUBECONFIG) config unset clusters.garden
385+
@KUBECONFIG=$(KUBECONFIG):.virtual-kubeconfig kubectl config view --flatten > .merged-kubeconfig
386+
@rm .virtual-kubeconfig
387+
@mv .merged-kubeconfig $(KUBECONFIG)

compose.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ services:
8989
environment:
9090
- REGISTRY_PROXY_REMOTEURL="https://registry-1.docker.io"
9191
- REGISTRY_PROXY_TTL=168h
92-
- REGISTRY_STORAGE_DELETE_ENABLED=true
92+
- REGISTRY_STORAGE_DELETE_ENABLED=true
9393
- OTEL_TRACES_EXPORTER=none
9494
proxy-gcr:
9595
image: registry:3
@@ -102,7 +102,7 @@ services:
102102
environment:
103103
- REGISTRY_PROXY_REMOTEURL="https://gcr.io"
104104
- REGISTRY_PROXY_TTL=168h
105-
- REGISTRY_STORAGE_DELETE_ENABLED=true
105+
- REGISTRY_STORAGE_DELETE_ENABLED=true
106106
- OTEL_TRACES_EXPORTER=none
107107
proxy-ghcr:
108108
image: registry:3
@@ -115,7 +115,7 @@ services:
115115
environment:
116116
- REGISTRY_PROXY_REMOTEURL="https://ghcr.io"
117117
- REGISTRY_PROXY_TTL=168h
118-
- REGISTRY_STORAGE_DELETE_ENABLED=true
118+
- REGISTRY_STORAGE_DELETE_ENABLED=true
119119
- OTEL_TRACES_EXPORTER=none
120120
proxy-k8s:
121121
image: registry:3
@@ -128,7 +128,7 @@ services:
128128
environment:
129129
- REGISTRY_PROXY_REMOTEURL="https://registry.k8s.io"
130130
- REGISTRY_PROXY_TTL=168h
131-
- REGISTRY_STORAGE_DELETE_ENABLED=true
131+
- REGISTRY_STORAGE_DELETE_ENABLED=true
132132
- OTEL_TRACES_EXPORTER=none
133133
proxy-quay:
134134
image: registry:3
@@ -141,7 +141,7 @@ services:
141141
environment:
142142
- REGISTRY_PROXY_REMOTEURL="https://quay.io"
143143
- REGISTRY_PROXY_TTL=168h
144-
- REGISTRY_STORAGE_DELETE_ENABLED=true
144+
- REGISTRY_STORAGE_DELETE_ENABLED=true
145145
- OTEL_TRACES_EXPORTER=none
146146
volumes:
147147
proxy-docker:

control-plane/kind.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ nodes:
2121
- containerPort: 50051
2222
hostPort: 50051
2323
listenAddress: 0.0.0.0
24+
# if you want to run gardener operator + metal-stack, you need more pods
25+
kubeadmConfigPatches:
26+
- |
27+
kind: InitConfiguration
28+
nodeRegistration:
29+
kubeletExtraArgs:
30+
max-pods: "256"
2431
containerdConfigPatches:
2532
- |-
2633
[plugins."io.containerd.grpc.v1.cri".registry]

deploy_gardener.yaml

Lines changed: 108 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -16,67 +16,125 @@
1616
nodeNetwork: 172.18.0.0/16
1717
podNetwork: 10.244.0.0/24
1818
serviceNetwork: 10.96.0.0/16
19+
tags: gardener
1920

20-
- name: Create garden namespace
21-
k8s:
22-
definition:
23-
apiVersion: v1
24-
kind: Namespace
25-
metadata:
26-
name: garden
27-
28-
# our current state in metal-roles/gardener does not support network policies from gardenlet <-> virtual garden
29-
# this should be possible to resolve when we use the Gardener Operator
30-
- name: Deploy allow all network policy
31-
k8s:
32-
definition: "{{ lookup('file', 'netpol-allow-all.yaml') }}"
33-
namespace: garden
34-
apply: yes
3521
roles:
3622
- name: ansible-common
3723
tags: always
3824
- name: minio
25+
tags: minio
3926
- name: powerdns
4027
tags: powerdns
41-
- name: metal-roles/control-plane/roles/gardener
28+
- name: metal-roles/control-plane/roles/gardener-operator
29+
tags: gardener
30+
- name: metal-roles/control-plane/roles/gardener-extensions
31+
tags: gardener
32+
- name: metal-roles/control-plane/roles/gardener-virtual-garden-access
33+
tags: gardener
34+
- name: metal-roles/control-plane/roles/gardener-cloud-profile
35+
tags: gardener
36+
- name: metal-roles/control-plane/roles/gardener-gardenlet
4237
tags: gardener
4338
vars:
4439
metal_control_plane_host_provider: metal
4540

4641
post_tasks:
47-
# gardener exposes the istio ingress gateway through service type load balancer
48-
# we can fake the exposal by patching the status field, which is also what's
49-
# done in the gardener local environment
50-
- name: Wait for istio ingress gateway service
51-
kubernetes.core.k8s_info:
52-
api_version: v1
53-
kind: Service
54-
name: istio-ingressgateway
55-
namespace: istio-ingress
56-
register: result
57-
until: result.resources
58-
retries: 30
59-
delay: 10
42+
- name: Get kubeconfig for virtual garden access
43+
virtual_garden_kubeconfig:
44+
garden_name: "{{ metal_control_plane_stage_name }}"
45+
tags: gardener
46+
47+
- name: Wait for Gardenlet to be reconciled
48+
kubernetes.core.k8s_info:
49+
api_version: seedmanagement.gardener.cloud/v1alpha1
50+
kind: Gardenlet
51+
name: "local"
52+
namespace: garden
53+
kubeconfig: "{{ virtual_garden_kubeconfig }}"
54+
wait: yes
55+
wait_condition:
56+
reason: Reconciled
57+
status: "True"
58+
type: GardenletReconciled
59+
wait_timeout: 900
60+
tags: gardener
61+
62+
- name: Wait for istio ingress gateway service
63+
kubernetes.core.k8s_info:
64+
api_version: v1
65+
kind: Service
66+
name: istio-ingressgateway
67+
namespace: istio-ingress
68+
register: result
69+
until: result.resources
70+
retries: 30
71+
delay: 10
72+
tags: gardener
73+
74+
- name: Patch istio ingress gateway service status
75+
patch_service_status_k8s:
76+
name: istio-ingressgateway
77+
namespace: istio-ingress
78+
body:
79+
status:
80+
loadBalancer:
81+
ingress:
82+
- ip: "172.17.0.1"
83+
tags: gardener
84+
85+
- name: Expose istio gateway through ingress-nginx (for local environments)
86+
k8s:
87+
definition:
88+
apiVersion: networking.k8s.io/v1
89+
kind: Ingress
90+
metadata:
91+
annotations:
92+
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
93+
name: apiserver-ingress
94+
namespace: istio-ingress
95+
spec:
96+
ingressClassName: nginx
97+
rules:
98+
- host: "{{ metal_control_plane_stage_name }}.{{ gardener_gardenlet_default_dns_domain }}"
99+
http:
100+
paths:
101+
- path: /
102+
pathType: Prefix
103+
backend:
104+
service:
105+
name: istio-ingressgateway
106+
port:
107+
number: 443
108+
tls:
109+
- hosts:
110+
- "{{ metal_control_plane_stage_name }}.{{ gardener_gardenlet_default_dns_domain }}"
111+
tags: gardener
60112

61-
- name: Patch ingress status of istio ingress gateway to allow seed to get ready
62-
patch_service_status_k8s:
63-
name: istio-ingressgateway
64-
namespace: istio-ingress
65-
body:
66-
status:
67-
loadBalancer:
68-
ingress:
69-
- ip: "172.17.0.1"
113+
- name: Wait until Garden is ready
114+
kubernetes.core.k8s_info:
115+
api_version: "operator.gardener.cloud/v1alpha1"
116+
kind: Garden
117+
name: "{{ metal_control_plane_stage_name }}"
118+
wait: yes
119+
wait_condition:
120+
status: "True"
121+
type: "{{ item }}"
122+
wait_timeout: 300
123+
loop:
124+
- VirtualComponentsHealthy
125+
- RuntimeComponentsHealthy
126+
tags: gardener
70127

71-
- name: Wait until seed is ready
72-
kubernetes.core.k8s_info:
73-
api_version: "core.gardener.cloud/v1beta1"
74-
kind: Seed
75-
name: "{{ metal_control_plane_stage_name }}"
76-
kubeconfig: "{{ gardener_kube_apiserver_kubeconfig_path }}"
77-
wait: yes
78-
wait_condition:
79-
reason: GardenletReady
80-
status: "True"
81-
type: GardenletReady
82-
wait_timeout: 300
128+
- name: Wait until seed is ready
129+
kubernetes.core.k8s_info:
130+
api_version: "core.gardener.cloud/v1beta1"
131+
kind: Seed
132+
name: "{{ metal_control_plane_stage_name }}"
133+
kubeconfig: "{{ virtual_garden_kubeconfig }}"
134+
wait: yes
135+
wait_condition:
136+
reason: GardenletReady
137+
status: "True"
138+
type: GardenletReady
139+
wait_timeout: 300
140+
tags: gardener

files/certs/gardener-admission-controller/client.json

Lines changed: 0 additions & 17 deletions
This file was deleted.

files/certs/gardener-admission-controller/server.json

Lines changed: 0 additions & 24 deletions
This file was deleted.

files/certs/gardener-apiserver/client.json

Lines changed: 0 additions & 17 deletions
This file was deleted.

files/certs/gardener-apiserver/server.json

Lines changed: 0 additions & 24 deletions
This file was deleted.

files/certs/gardener-controller-manager/client.json

Lines changed: 0 additions & 17 deletions
This file was deleted.

files/certs/gardener-controller-manager/server.json

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)