Skip to content

Commit bb8821b

Browse files
Refactor Gardener documentation for clarity and consistency
- Updated baseline testing section to focus on verifying cluster health and functionality. - Simplified instructions for setting kubeconfig and checking cluster health. - Enhanced clarity in deploying test workloads and validating networking. - Revised benchmarking guide to emphasize security posture evaluation using kube-bench. - Improved installation instructions for Gardener on Arm-based SUSE VM, including clearer steps for system updates and tool installations. - Streamlined instance creation guide for Google Axion C4A VM, ensuring comprehensive setup details and verification steps.
1 parent 481047b commit bb8821b

4 files changed

Lines changed: 268 additions & 260 deletions

File tree

content/learning-paths/servers-and-cloud-computing/gardener-gcp/baseline.md

Lines changed: 34 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,135 +1,55 @@
11
---
2-
title: Gardener Baseline Testing on Google Axion C4A Arm Virtual Machine
2+
title: Verify Gardener cluster health and functionality
33
weight: 5
44

55
### FIXED, DO NOT MODIFY
66
layout: 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
1518
export 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
2228
kubectl get nodes -o wide
2329
kubectl 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
12646
kubectl run test-nginx --image=nginx --restart=Never
12747
kubectl 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
14060
test-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
15470
kubectl expose pod test-nginx --port=80 --name=test-nginx-svc
15571
kubectl 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

Comments
 (0)