Q1
We have a working Kubernetes cluster with a set of web applications running. Let us first explore the setup.
How many deployments exist in the cluster in defaultย namespace?
ํ์ด ๊ณผ์
controlplane ~ โ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
blue 3/3 3 3 38s
red 2/2 2 2 38s
Bash
๋ณต์ฌ
์ ๋ต
2
Q2
What is the version of ETCD running on the cluster?
Check the ETCD Pod or Process
ํ์ด ๊ณผ์
1.
Pod detail๋ก ํ์ธ
controlplane ~ โ kubectl -n kube-system describe pod etcd-controlplane | grep Image
Image: registry.k8s.io/etcd:3.5.15-0
Image ID: registry.k8s.io/etcd@sha256:a6dc63e6e8cfa0307d7851762fa6b629afb18f28d8aa3fab5a6e91b4af60026a
Bash
๋ณต์ฌ
2.
log๋ก ํ์ธ
controlplane ~ โ kubectl -n kube-system logs etcd-controlplane | grep -i 'etcd-version'
{"level":"info","ts":"2025-01-07T15:05:55.915197Z","caller":"embed/etcd.go:310","msg":"starting an etcd server","etcd-version":"3.5.15","git-sha":"9a5533382","go-version":"go1.21.12","go-os":"linux","go-arch":"amd64","max-cpu-set":16,"max-cpu-available":16,"member-initialized":false,"name":"controlplane","data-dir":"/var/lib/etcd","wal-dir":"","wal-dir-dedicated":"","member-dir":"/var/lib/etcd/member","force-new-cluster":false,"heartbeat-interval":"100ms","election-timeout":"1s","initial-election-tick-advance":true,"snapshot-count":10000,"max-wals":5,"max-snapshots":5,"snapshot-catchup-entries":5000,"initial-advertise-peer-urls":["https://192.168.183.211:2380"],"listen-peer-urls":["https://192.168.183.211:2380"],"advertise-client-urls":["https://192.168.183.211:2379"],"listen-client-urls":["https://127.0.0.1:2379","https://192.168.183.211:2379"],"listen-metrics-urls":["http://127.0.0.1:2381"],"cors":["*"],"host-whitelist":["*"],"initial-cluster":"controlplane=https://192.168.183.211:2380","initial-cluster-state":"new","initial-cluster-token":"etcd-cluster","quota-backend-bytes":2147483648,"max-request-bytes":1572864,"max-concurrent-streams":4294967295,"pre-vote":true,"initial-corrupt-check":true,"corrupt-check-time-interval":"0s","compact-check-time-enabled":false,"compact-check-time-interval":"1m0s","auto-compaction-mode":"periodic","auto-compaction-retention":"0s","auto-compaction-interval":"0s","discovery-url":"","discovery-proxy":"","downgrade-check-interval":"5s"}
Bash
๋ณต์ฌ
์ ๋ต
3.5.15
Q3
At what address can you reach the ETCD cluster from the controlplane node?
Check the ETCD Service configuration in the ETCD POD
ํ์ด ๊ณผ์
1.
Pod detail๋ก ํ์ธ
controlplane ~ โ kubectl -n kube-system describe pod etcd-controlplane | grep listen-client
--listen-client-urls=https://127.0.0.1:2379,https://192.168.231.167:2379
Bash
๋ณต์ฌ
2.
manifest ํ์ผ๋ก ํ์ธ
controlplane ~ โ cat /etc/kubernetes/manifests/etcd.yaml | grep listen-client
- --listen-client-urls=https://127.0.0.1:2379,https://192.168.183.211:2379
Bash
๋ณต์ฌ
์ ๋ต
https://127.0.0.1:2379
Q4
Where is the ETCD server certificate file located?
Note this path down as you will need to use it later
ํ์ด ๊ณผ์
1.
Pod detail๋ก ํ์ธ
controlplane ~ โ kubectl -n kube-system describe pod etcd-controlplane | grep cert
--cert-file=/etc/kubernetes/pki/etcd/server.crt
--client-cert-auth=true
--peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
--peer-client-cert-auth=true
/etc/kubernetes/pki/etcd from etcd-certs (rw)
etcd-certs:
Bash
๋ณต์ฌ
2.
manifest ํ์ผ๋ก ํ์ธ
controlplane ~ โ cat /etc/kubernetes/manifests/etcd.yaml | grep cert
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-client-cert-auth=true
name: etcd-certs
name: etcd-certs
Bash
๋ณต์ฌ
์ ๋ต
/etc/kubernetes/pki/etcd/server.crt
Q5
Where is the ETCD CA Certificate file located?
Note this path down as you will need to use it later.
ํ์ด ๊ณผ์
1.
Pod detail๋ก ํ์ธ
controlplane ~ โ cat /etc/kubernetes/manifests/etcd.yaml | grep ca
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
priorityClassName: system-node-critical
Bash
๋ณต์ฌ
2.
manifest ํ์ผ๋ก ํ์ธ
controlplane ~ โ cat /etc/kubernetes/manifests/etcd.yaml | grep ca
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
priorityClassName: system-node-critical
Bash
๋ณต์ฌ
์ ๋ต
/etc/kubernetes/pki/etcd/ca.crt
Q6
The master node in our cluster is planned for a regular maintenance reboot tonight. While we do not anticipate anything to go wrong, we are required to take the necessary backups. Take a snapshot of theย ETCDย database using the built-inย snapshotย functionality.
Store the backup file at locationย /opt/snapshot-pre-boot.db
ํ์ด
# kubectl describe -n kube-system pod etcd-controlplane ๋๋
# cat /etc/kubernetes/manifests/etcd.yaml ๋ฅผ ํตํด ์ค์ ๊ฐ ํ์ธํ๋ฉฐ ๊ฐ ๋์
ETCDCTL_API=3 etcdctl snapshot save /opt/snapshot-pre-boot.db \
--endpoints=127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--key=/etc/kubernetes/pki/etcd/server.key
Bash
๋ณต์ฌ
Q8
Wake up! We have a conference call! After the reboot the master nodes came back online, but none of our applications are accessible. Check the status of the applications on the cluster. What's wrong?
ํ์ด ๊ณผ์
controlplane ~ โ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 36s
Bash
๋ณต์ฌ
์ ๋ต
All of the above (Pod, Deployment, Service ์๋ฌด๊ฒ๋ ์กด์ฌํ์ง ์์)
Q9
Luckily we took a backup. Restore the original state of the cluster using the backup file.
ํ์ด
1.
์ค๋
์ท์ ํตํด ๋ณต๊ตฌ ์งํ
ETCDCTL_API=3 etcdctl snapshot restore /opt/snapshot-pre-boot.db --data-dir=/var/lib/etcd-from-backup
Bash
๋ณต์ฌ
2.
๋ณต์ ์ data-dir์ ์๋ก ์ง์ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๋ง์ถฐ etcd.yaml ํ์ผ ๋ณผ๋ฅจ ์ค์
static pod์ด๊ธฐ ๋๋ฌธ์ yaml ํ์ผ๋ง ๋ณ๊ฒฝํ๋ฉด ์ ์ฉ๋จ
vi /etc/kubernetes/manifests/etcd.yaml
volumes:
- hostPath:
path: /var/lib/etcd-from-backup # ์๋ก์ด data-dir์ ๋ง๊ฒ ๊ฒฝ๋ก ๋ณ๊ฒฝ
type: DirectoryOrCreate
name: etcd-data
Bash
๋ณต์ฌ
3.
ํ์ธ
ํ์ธ๊น์ง ์ฝ๊ฐ์ ์๊ฐ ์์๋๋ฉฐ, etcd-controlplane pod๊ฐ ์๋ก ์์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ํ kube-apiserver, kube-controller-manager, kube-scheduler๋ ์ฌ์์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
controlplane ~ โ kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-77d6fd4654-2bxrw 1/1 Running 0 13m
coredns-77d6fd4654-d79rs 1/1 Running 0 13m
etcd-controlplane 1/1 Running 0 23s
kube-apiserver-controlplane 1/1 Running 1 (4m17s ago) 13m
kube-controller-manager-controlplane 1/1 Running 1 (6m19s ago) 13m
kube-proxy-dqb5r 1/1 Running 0 13m
kube-scheduler-controlplane 1/1 Running 1 (6m14s ago) 13m
Bash
๋ณต์ฌ
์ฌ๋ผ์ก๋ ์ํฌ๋ก๋ ๋ณต๊ตฌ ์ํ ํ์ธ
controlplane ~ โ kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-77d6fd4654-2bxrw 1/1 Running 0 13m
coredns-77d6fd4654-d79rs 1/1 Running 0 13m
etcd-controlplane 1/1 Running 0 23s
kube-apiserver-controlplane 1/1 Running 1 (4m17s ago) 13m
kube-controller-manager-controlplane 1/1 Running 1 (6m19s ago) 13m
kube-proxy-dqb5r 1/1 Running 0 13m
kube-scheduler-controlplane 1/1 Running 1 (6m14s ago) 13m
Bash
๋ณต์ฌ