11---
2- title : Gardener Baseline Testing on Google Axion C4A Arm Virtual Machine
2+ title : Verify Gardener cluster health and functionality
33weight : 5
44
55# ## FIXED, DO NOT MODIFY
66layout : learningpathall
77---
88
9- ## Gardener Baseline Testing on GCP SUSE VMs
10- This section checks whether your Gardener Local setup is working correctly on an Arm-based GCP Axion (C4A) VM before running real workloads.
9+ ## Verify your Gardener cluster is working
1110
12- ### Set Kubeconfig
13- This tells Kubernetes commands (** kubectl) which cluster to talk to** . Without this, kubectl won’t know where your Gardener cluster is.
14- ``` console
11+ This section confirms that your Gardener Local setup is functioning correctly on an Arm-based Google Cloud C4A VM before running production workloads. You'll check cluster health, deploy test workloads, and validate networking.
12+
13+ ### Set the kubeconfig environment variable
14+
15+ Configure kubectl to communicate with your Gardener cluster by setting the ` KUBECONFIG ` variable:
16+
17+ ``` console
1518export KUBECONFIG=$PWD/example/gardener-local/kind/local/kubeconfig
1619```
1720
18- ### Check Cluster Health
19- Before testing any workload, verify that the Gardener-local Kubernetes cluster is healthy. This ensures the control plane and node are functional.
21+ This tells kubectl where to find your cluster's authentication credentials.
2022
21- ``` console
23+ ### Check cluster health
24+
25+ Verify that your Gardener Local Kubernetes cluster is healthy by checking node and pod status:
26+
27+ ``` console
2228kubectl get nodes -o wide
2329kubectl get pods -A
2430```
25- You should see an output similar to:
31+
32+ The output is similar to:
2633
2734``` output
28- NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
29- gardener-local-control-plane Ready control-plane 148m v1.32.5 172.18.0.2 <none> Debian GNU/Linux 12 (bookworm) 5.14.21-150500.55.124-default containerd://2.1.1
30- extension-networking-calico-8z7jw gardener-extension-networking-calico-94bcb44bf-kmmpj 1/1 Running 0 102m
31- extension-networking-calico-8z7jw gardener-extension-networking-calico-94bcb44bf-whgtn 1/1 Running 0 135m
32- extension-provider-local-m7d79 gardener-extension-provider-local-fc75c4494-47szg 1/1 Running 0 137m
33- extension-provider-local-m7d79 gardener-extension-provider-local-fc75c4494-hkksz 1/1 Running 0 137m
34- garden dependency-watchdog-prober-d47b5899f-ml6x9 1/1 Running 0 61m
35- garden dependency-watchdog-prober-d47b5899f-xmzh2 1/1 Running 0 60m
36- garden dependency-watchdog-weeder-66f8bffd8b-lgx7f 1/1 Running 0 60m
37- garden dependency-watchdog-weeder-66f8bffd8b-vd9md 1/1 Running 0 61m
38- garden etcd-0 1/1 Running 0 141m
39- garden etcd-druid-65d56db866-bstcm 1/1 Running 0 139m
40- garden etcd-druid-65d56db866-zkfjb 1/1 Running 0 139m
41- garden fluent-bit-8259c-s5wnv 1/1 Running 0 139m
42- garden fluent-operator-5b9ff5bfb7-6ffvc 1/1 Running 0 137m
43- garden fluent-operator-5b9ff5bfb7-cw67l 1/1 Running 0 137m
44- garden gardener-admission-controller-899c585bf-2mp9g 1/1 Running 2 (141m ago) 141m
45- garden gardener-admission-controller-899c585bf-xp2f4 1/1 Running 2 (141m ago) 141m
46- garden gardener-apiserver-54fcdfcd97-5zkgr 1/1 Running 0 141m
47- garden gardener-controller-manager-77bf4b686f-zxgsh 1/1 Running 3 (140m ago) 141m
48- garden gardener-extension-admission-local-57d674d98f-6qbcv 1/1 Running 0 136m
49- garden gardener-extension-admission-local-57d674d98f-zlgpd 1/1 Running 0 135m
50- garden gardener-resource-manager-cfd685fc5-n9mp7 1/1 Running 0 133m
51- garden gardener-resource-manager-cfd685fc5-spbn7 1/1 Running 0 134m
52- garden gardener-scheduler-6599d654c9-vw2q5 1/1 Running 0 141m
53- garden gardenlet-59cb4b6956-hsmdp 1/1 Running 0 96m
54- garden kube-state-metrics-seed-f89d48b49-94l46 1/1 Running 0 121m
55- garden kube-state-metrics-seed-f89d48b49-q95kr 1/1 Running 0 130m
56- garden nginx-ingress-controller-5bb9b58c44-ck2q7 1/1 Running 0 139m
57- garden nginx-ingress-controller-5bb9b58c44-r8wwd 1/1 Running 0 139m
58- garden nginx-ingress-k8s-backend-5547dddffd-fqsfm 1/1 Running 0 139m
59- garden perses-operator-9f9694dcd-wvl5z 1/1 Running 0 139m
60- garden plutono-776964667b-225r7 2/2 Running 0 139m
61- garden prometheus-aggregate-0 2/2 Running 0 87m
62- garden prometheus-cache-0 2/2 Running 0 22m
63- garden prometheus-operator-8447dc86f9-6mb25 1/1 Running 0 139m
64- garden prometheus-seed-0 2/2 Running 0 87m
65- garden vali-0 2/2 Running 0 139m
66- garden vpa-admission-controller-76b4c99684-lkf27 1/1 Running 0 30m
67- garden vpa-admission-controller-76b4c99684-tkg7n 1/1 Running 0 81m
68- garden vpa-recommender-5b668455db-fctrs 1/1 Running 0 139m
69- garden vpa-recommender-5b668455db-sdpv6 1/1 Running 0 139m
70- garden vpa-updater-7dd7dccc6d-dgg7r 1/1 Running 0 131m
71- garden vpa-updater-7dd7dccc6d-whlqx 1/1 Running 0 133m
72- gardener-extension-provider-local-coredns coredns-69d964db7f-mrmq9 1/1 Running 0 139m
73- istio-ingress istio-ingressgateway-5b48596bf9-4pzsw 1/1 Running 0 139m
74- istio-ingress istio-ingressgateway-5b48596bf9-ff4zp 1/1 Running 0 139m
75- istio-system istiod-769565bbdb-2hnzz 1/1 Running 0 76m
76- istio-system istiod-769565bbdb-wlbts 1/1 Running 0 77m
77- kube-system calico-kube-controllers-bfc8cf74c-pj9hh 1/1 Running 0 148m
78- kube-system calico-node-88sdt 1/1 Running 0 148m
79- kube-system coredns-54bf7d48d5-j6zbg 1/1 Running 0 148m
80- kube-system coredns-54bf7d48d5-zrqqc 1/1 Running 0 148m
81- kube-system etcd-gardener-local-control-plane 1/1 Running 0 148m
82- kube-system kube-apiserver-gardener-local-control-plane 1/1 Running 0 148m
83- kube-system kube-controller-manager-gardener-local-control-plane 1/1 Running 0 148m
84- kube-system kube-proxy-fxxzc 1/1 Running 0 148m
85- kube-system kube-scheduler-gardener-local-control-plane 1/1 Running 0 148m
86- kube-system metrics-server-78b7d676c8-cjwrs 1/1 Running 0 148m
87- local-path-storage local-path-provisioner-7dc846544d-m825q 1/1 Running 0 148m
88- registry registry-c85bbb98c-lqtcj 1/1 Running 0 148m
89- registry registry-europe-docker-pkg-dev-7956694cfb-hbg69 1/1 Running 0 148m
90- registry registry-gcr-6d4b454594-b9plv 1/1 Running 0 148m
91- registry registry-k8s-5bf5795799-t44xd 1/1 Running 0 148m
92- registry registry-quay-84dbcd78b4-dw2pn 1/1 Running 0 148m
93- shoot--local--local blackbox-exporter-58c4f64c97-l96ct 1/1 Running 0 104m
94- shoot--local--local blackbox-exporter-58c4f64c97-nlhjj 1/1 Running 0 105m
95- shoot--local--local cluster-autoscaler-b894888d6-qwrpp 1/1 Running 0 116m
96- shoot--local--local etcd-events-0 2/2 Running 0 136m
97- shoot--local--local etcd-main-0 2/2 Running 0 136m
98- shoot--local--local event-logger-777b7b7c7c-77h9n 1/1 Running 0 133m
99- shoot--local--local gardener-resource-manager-764b5d4f97-bdd8n 1/1 Running 0 118m
100- shoot--local--local gardener-resource-manager-764b5d4f97-z48b5 1/1 Running 0 129m
101- shoot--local--local kube-apiserver-6545887cc9-26h5w 1/1 Running 0 124m
102- shoot--local--local kube-apiserver-6545887cc9-gf92k 1/1 Running 0 98m
103- shoot--local--local kube-controller-manager-555b598dbf-45n8v 1/1 Running 0 122m
104- shoot--local--local kube-scheduler-695d49b6c5-xr7hp 1/1 Running 0 125m
105- shoot--local--local kube-state-metrics-76cc7bb4f9-xq4g2 1/1 Running 0 130m
106- shoot--local--local machine-controller-manager-775dc6d574-mntqt 2/2 Running 0 111m
107- shoot--local--local machine-shoot--local--local-local-68499-nhvjl 1/1 Running 0 131m
108- shoot--local--local plutono-869d676bb9-jjwcx 2/2 Running 0 133m
109- shoot--local--local prometheus-shoot-0 2/2 Running 0 95m
110- shoot--local--local vali-0 4/4 Running 0 133m
111- shoot--local--local vpa-admission-controller-bcc4c968c-8ndg8 1/1 Running 0 133m
112- shoot--local--local vpa-admission-controller-bcc4c968c-r6lnt 1/1 Running 0 72m
113- shoot--local--local vpa-recommender-b49f4dd7c-mk9sx 1/1 Running 0 107m
114- shoot--local--local vpa-updater-6cc999b5bc-jcrbg 1/1 Running 0 123m
115- shoot--local--local vpn-seed-server-7497c89db-b5p5c 2/2 Running 0 15m
116- ```
117-
118- ### Deploy a Test Nginx Pod
119- This step deploys a simple web server (nginx) to confirm that workloads can run.
120- - Creates one nginx pod
121- - Confirms Kubernetes can pull images and start containers
122-
123- When the pod status becomes Running, workload deployment works.
35+ NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE
36+ gardener-local-control-plane Ready control-plane 148m v1.32.5 172.18.0.2 <none> Debian GNU/Linux 12 (bookworm)
37+ ```
12438
125- ``` console
39+ A ` Ready ` status indicates the control plane is healthy. You should also see numerous pods running across the ` garden ` , ` kube-system ` , ` istio-system ` , and ` shoot--local--local ` namespaces, confirming that all Gardener components are operational.
40+
41+ ### Deploy a test nginx pod
42+
43+ Deploy a simple nginx pod to verify that workload deployment works correctly:
44+
45+ ``` console
12646kubectl run test-nginx --image=nginx --restart=Never
12747kubectl get pod test-nginx -w
12848```
12949- ` kubectl run test-nginx ` → Creates a single nginx pod.
13050- ` kubectl get pod test-nginx -w ` → Watches pod status in real time.
13151
132- You should see an output similar to:
52+ The output is similar to:
13353
13454``` output
13555>pod/test-nginx created
@@ -140,24 +60,20 @@ test-nginx 0/1 ContainerCreating 0 1s
14060test-nginx 1/1 Running 0 4s
14161```
14262
143- Now, press "ctrl-c" in the ssh shell to kill the currently running monitor.
63+ When the pod reaches ` Running ` status, workload deployment is functioning. Press ** Ctrl + C ** to stop watching the pod.
14464
145- ### Expose the Pod (ClusterIP Service)
146- Pods cannot be accessed directly by other pods reliably.
147- So we create a Kubernetes Service.
148- - The service gives nginx a stable internal IP
149- - It allows other pods to reach nginx using a name
65+ ### Create a service for the pod
15066
151- This confirms Kubernetes service networking is working.
67+ Kubernetes services provide stable network endpoints for pods. Create a ClusterIP service to expose your nginx pod:
15268
153- ``` console
69+ ``` console
15470kubectl expose pod test-nginx --port=80 --name=test-nginx-svc
15571kubectl get svc test-nginx-svc
15672```
15773- ` kubectl expose pod ` → Creates a ClusterIP service on port 80.
15874- ` kubectl get svc ` → Shows the service details.
15975
160- You should see an output similar to:
76+ The output is similar to:
16177
16278``` output
16379>service/test-nginx-svc exposed
@@ -227,8 +143,7 @@ This confirms pod-to-service networking.
227143- Creates a curl container with an interactive shell.
228144- Uses curl to send an HTTP request to the nginx service.
229145
230- ### Test DNS Resolution
231- Ensures CoreDNS is functioning and services resolve properly. Run ` nslookup ` inside the curl pod to check DNS service discovery.
146+ ### Verify DNS resolution
232147
233148- ` nslookup test-nginx-svc ` checks if DNS can resolve the service name
234149- ` CoreDNS ` is responsible for this
0 commit comments