Q3
How manyย clustersย are defined in the kubeconfig on theย student-node?
You can make use of theย kubectl configย command.
ํ์ด ๊ณผ์
kubectl config view ๋ช
๋ น์ ํตํด ํ์ฌ node์์ ๊ด๋ฆฌ๋๋ ํด๋ฌ์คํฐ๋ฅผ ํ์ธํ ์ ์๋ค
student-node ~ โ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://cluster1-controlplane:6443
name: cluster1
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.1.3.9:6443
name: cluster2
contexts:
- context:
cluster: cluster1
user: cluster1
name: cluster1
- context:
cluster: cluster2
user: cluster2
name: cluster2
current-context: cluster1
kind: Config
preferences: {}
users:
- name: cluster1
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTED
- name: cluster2
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTED
Bash
๋ณต์ฌ
์ ๋ต
2
Q4
How many nodes (both controlplane and worker) are part ofย cluster1?
ํ์ด ๊ณผ์
student-node ~ โ kubectl config use-context cluster1
Switched to context "cluster1".
student-node ~ โ kubectl get nodes
NAME STATUS ROLES AGE VERSION
cluster1-controlplane Ready control-plane 78m v1.29.0
cluster1-node01 Ready <none> 78m v1.29.0
Bash
๋ณต์ฌ
์ ๋ต
2
Q5
What is the name of the controlplane node inย cluster2?
ํ์ด ๊ณผ์
student-node ~ โ kubectl config use-context cluster2
Switched to context "cluster2".
student-node ~ โ kubectl get nodes
NAME STATUS ROLES AGE VERSION
cluster2-controlplane Ready control-plane 80m v1.29.0
cluster2-node01 Ready <none> 79m v1.29.0
Bash
๋ณต์ฌ
์ ๋ต
cluster2-controlplane
Q7
How isย ETCDย configured forย cluster1?
Remember, you can access the clusters fromย student-nodeย using theย kubectlย tool. You can alsoย sshย to the cluster nodes from theย student-node.
ํ์ด ๊ณผ์
ํด๋ฌ์คํฐ ๋ด๋ถ์์ pod๋ก ์คํ๋๋ ETCD๋ Stacked ETCD์ด๋ค. ํด๋น ํด๋ฌ์คํฐ์์๋ static pod๋ก etcd๊ฐ ์คํ๋๊ณ ์์ผ๋ฏ๋ก Stacked ์ด๋ค.
๋ฐฉ๋ฒ 1) Pod ํ์ธ
student-node ~ โ kubectl config use-context cluster1
Switched to context "cluster1".
student-node ~ โ kubectl get po -n kube-system | grep etcd
etcd-cluster1-controlplane 1/1 Running 0 82m
Bash
๋ณต์ฌ
๋ฐฉ๋ฒ 2) manifest ํ์ผ ํ์ธ
student-node ~ โ ssh cluster1-controlplane
cluster1-controlplane ~ โ ls /etc/kubernetes/manifests/ | grep etcd
etcd.yaml
Bash
๋ณต์ฌ
์ ๋ต
Stacked ETCD
Q8
How isย ETCDย configured forย cluster2?
Remember, you can access the clusters fromย student-nodeย using theย kubectlย tool. You can alsoย sshย to the cluster nodes from theย student-node.
ํ์ด ๊ณผ์
๋ฐฉ๋ฒ 1) Pod ํ์ธ
student-node ~ โ kubectl config use-context cluster2
Switched to context "cluster2".
student-node ~ โ kubectl get po -n kube-system | grep etcd
Bash
๋ณต์ฌ
๋ฐฉ๋ฒ 2) manifest ํ์ผ ํ์ธ
student-node ~ โ ssh cluster2-controlplane
cluster2-controlplane ~ โ ls /etc/kubernetes/manifests/ | grep etcd
Bash
๋ณต์ฌ
etcd๊ฐ ํด๋ฌ์คํฐ ๋ด๋ถ์ ์์นํ๊ณ ์์ง ์์ผ๋ฏ๋ก Stacked ETCD๋ ์๋๋ค. ๊ทธ๋ ๋ค๋ฉด โETCD๊ฐ ์๋๊ฐโ์ ๋ํด ํ์ธํด์ผ ํ๋ค. ETCD์ ๋ํ ํ๋ก์ธ์ค๊ฐ ์๋์ง์ ๋ํ ํ์ธ์ด ํ์ํ๋ค. kube-apiserver์์ external etcd๋ฅผ ํ์ธํ ์ ์์๋ค.
cluster2-controlplane ~ โ ps -ef | grep etcd
root 2881 2474 0 Jan07 ? 00:03:57 kube-apiserver --advertise-address=192.1.3.9 --allow-privileged=true --authorization-mode=Node,RBAC --client-ca-file=/etc/kubernetes/pki/ca.crt --enable-admission-plugins=NodeRestriction --enable-bootstrap-token-auth=true --etcd-cafile=/etc/kubernetes/pki/etcd/ca.pem --etcd-certfile=/etc/kubernetes/pki/etcd/etcd.pem --etcd-keyfile=/etc/kubernetes/pki/etcd/etcd-key.pem --etcd-servers=https://192.1.3.17:2379 --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/etc/kubernetes/pki/sa.pub --service-account-signing-key-file=/etc/kubernetes/pki/sa.key --service-cluster-ip-range=10.96.0.0/12 --tls-cert-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
root 11661 11576 0 01:18 pts/0 00:00:00 grep etcd
Bash
๋ณต์ฌ
์ ๋ต
External ETCD
Q9
What is the IP address of theย External ETCDย datastore used inย cluster2?
ํ์ด ๊ณผ์
์์์ ํ์ธํ etcd์ ๋ํ kube-apiserver ํ๋ก์ธ์ค์์ etcd-server์ ๋ํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค. ํ๋ก์ธ์ค๋ก ํ์ธํ๋ ๋ฐฉ๋ฒ ์ด์ธ์ ๋ฐฉ๋ฒ์ผ๋ก๋ kube-apiserver pod์ ์ธ๋ถ์ฌํญ์ ํ์ธํ๋ฉด ๋๋ค. describe ๋ช
๋ น์ด๋ก ํ์ธํ๊ฑฐ๋ manifest๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
๋ฐฉ๋ฒ 1) Pod detail๋ก ํ์ธ
student-node ~ โ kubectl config use-context cluster2
Switched to context "cluster2".
student-node ~ โ kubectl describe -n kube-system po kube-apiserver-cluster2-controlplane | grep etcd-server
--etcd-servers=https://192.1.3.17:2379
Bash
๋ณต์ฌ
๋ฐฉ๋ฒ2) manifest ํ์ธ
student-node ~ โ ssh cluster2-controlplane
cluster2-controlplane ~ โ cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep etcd-server
- --etcd-servers=https://192.1.3.17:2379
Bash
๋ณต์ฌ
์ ๋ต
192.1.3.17 (๊ทธ๋๊ทธ๋ ๋ค๋ฆ)
Q10
What is the default data directory used the for ETCD datastore used in cluster1?
Remember, this cluster uses a Stacked ETCD topology.
ํ์ด ๊ณผ์
๋ฐฉ๋ฒ 1) Pod detail๋ก ํ์ธ
student-node ~ โ kubectl config use-context cluster2
Switched to context "cluster2".
student-node ~ โ kubectl describe -n kube-system po kube-apiserver-cluster2-controlplane | grep etcd-server
--etcd-servers=https://192.1.3.17:2379
Bash
๋ณต์ฌ
๋ฐฉ๋ฒ2) manifest ํ์ธ
student-node ~ โ ssh cluster1-controlplane
cluster1-controlplane ~ โ cat /etc/kubernetes/manifests/etcd.yaml | grep data-dir
- --data-dir=/var/lib/etcd
Bash
๋ณต์ฌ
์ ๋ต
/var/lib/etcd
Q12
What is the default data directory used the for ETCD datastore used in cluster2?
Remember, this cluster uses a External ETCD topology.
ํ์ด ๊ณผ์
์ธ๋ถ ETCD๋ pod๋ manifest๊ฐ ํด๋ฌ์คํฐ ๋ด๋ถ์ ์๊ธฐ ๋๋ฌธ์ ์์์ ์งํํ ๋ฐฉ๋ฒ๋ค๋ก๋ ํ์ธํ ์ ์๋ค. Q11์์ ์ ๊ณต๋๋๋ก etcd-server๋ก ssh ์ ์์ ํตํด ํ์ธํด์ผ ํ๋ค.
student-node ~ โ ssh etcd-server
etcd-server ~ โ ps -ef | grep etcd | grep --color=auto data-dir
etcd 824 1 0 Jan07 ? 00:01:50 /usr/local/bin/etcd --name etcd-server --data-dir=/var/lib/etcd-data --cert-file=/etc/etcd/pki/etcd.pem --key-file=/etc/etcd/pki/etcd-key.pem --peer-cert-file=/etc/etcd/pki/etcd.pem --peer-key-file=/etc/etcd/pki/etcd-key.pem --trusted-ca-file=/etc/etcd/pki/ca.pem --peer-trusted-ca-file=/etc/etcd/pki/ca.pem --peer-client-cert-auth --client-cert-auth --initial-advertise-peer-urls https://192.1.3.17:2380 --listen-peer-urls https://192.1.3.17:2380 --advertise-client-urls https://192.1.3.17:2379 --listen-client-urls https://192.1.3.17:2379,https://127.0.0.1:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster etcd-server=https://192.1.3.17:2380 --initial-cluster-state new
Bash
๋ณต์ฌ
์ ๋ต
/var/lib/etcd-data
Q13
How many nodes are part of theย ETCDย cluster thatย etcd-serverย is a part of?
ํ์ด ๊ณผ์
etcdctl member list ๋ช
๋ น์ผ๋ก cluster node๋ค์ ํ์ธํ ์ ์๋ค. ํด๋ฌ์คํฐ ์ ๋ณด๋ฅผ ์ํด ์ธ์ฆ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ snapshot์ ํ ๋์ ๊ฐ์ด ๊ฐ๊ฐ์ ํ๋๊ทธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ์
ํ๋ค. ์ด๋ ์์์ ํ์ธํ๋ etcd ํ๋ก์ธ์ค ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ํ์ธ ๊ฐ๋ฅํ๋ค.
etcd-server ~ โ ETCDCTL_API=3 etcdctl member list \
--endpoints=127.0.0.1:2379 \
--cert=/etc/etcd/pki/etcd.pem \
--cacert=/etc/etcd/pki/ca.pem \
--key=/etc/etcd/pki/etcd-key.pem
77a603763678b2f4, started, etcd-server, https://192.1.3.17:2380, https://192.1.3.17:2379, false
Bash
๋ณต์ฌ
์ ๋ต
1
Q14
Take a backup ofย etcdย onย cluster1ย and save it on theย student-nodeย at the pathย /opt/cluster1.db
ํ์ด
1.
snapshot ์์ฑ
student-node ~ โ ssh cluster1-controlplane
cluster1-controlplane ~ โ ETCDCTL_API=3 etcdctl snapshot save /opt/cluster1.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
Snapshot saved at /opt/cluster1.db
Bash
๋ณต์ฌ
2.
student-node๋ก ํ์ผ ๋ณต์ฌ
student-node ~ โ scp cluster1-controlplane:/opt/cluster1.db /opt/cluster1.db
cluster1.db 100% 2200KB 134.4MB/s 00:00
student-node ~ โ ls /opt
cluster1.db
Bash
๋ณต์ฌ
Q15
Anย ETCDย backup forย cluster2ย is stored atย /opt/cluster2.db. Use this snapshot file to carryout a restore onย cluster2ย to a new pathย /var/lib/etcd-data-new.
Once the restore is complete, ensure that the controlplane components onย cluster2ย are running.
The snapshot was taken when there were objects created in theย criticalย namespace onย cluster2. These objects should be available post restore.
ํ์ด
1.
etcd-server๋ก cluster2.db ์ค๋
์ท ๋ณต์ฌ
student-node ~ โ scp /opt/cluster2.db etcd-server:/root
cluster2.db 100% 2320KB 209.3MB/s 00:00
Bash
๋ณต์ฌ
2.
์ค๋
์ท์ ํตํด ๋ณต์
etcd-server ~ โ ETCDCTL_API=3 etcdctl snapshot restore /root/cluster2.db \
--data-dir=/var/lib/etcd-data-new
{"level":"info","ts":1736301547.4107833,"caller":"snapshot/v3_snapshot.go:296","msg":"restoring snapshot","path":"/root/cluster2.db","wal-dir":"/var/lib/etcd-data-new/member/wal","data-dir":"/var/lib/etcd-data-new","snap-dir":"/var/lib/etcd-data-new/member/snap"}
{"level":"info","ts":1736301547.429816,"caller":"mvcc/kvstore.go:388","msg":"restored last compact revision","meta-bucket-name":"meta","meta-bucket-name-key":"finishedCompactRev","restored-compact-revision":10635}
{"level":"info","ts":1736301547.4367092,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"cdf818194e3a8c32","local-member-id":"0","added-peer-id":"8e9e05c52164694d","added-peer-peer-urls":["http://localhost:2380"]}
{"level":"info","ts":1736301547.4433842,"caller":"snapshot/v3_snapshot.go:309","msg":"restored snapshot","path":"/root/cluster2.db","wal-dir":"/var/lib/etcd-data-new/member/wal","data-dir":"/var/lib/etcd-data-new","snap-dir":"/var/lib/etcd-data-new/member/snap"}
Bash
๋ณต์ฌ
3.
data-dir ๊ฒฝ๋ก ์
๋ฐ์ดํธ
ํด๋น ETCD๋ External ETCD๋ก, pod ํํ๊ฐ ์๋ ์๋น์ค๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ systemd์์ ํ์ธํด์ผ ํ๋ค. ๋ฐ๋ผ์ /etc/systemd/system/etcd.service ํ์ผ์ ์์ ํ๋ฉด ๋๋๋ฐ ํด๋น ๊ฒฝ๋ก๋ฅผ ํ์ธํ๋ ๊ฒ์ systemctl status etcd ๋ฅผ ํตํด etcd์ ์๋น์ค ํ์ผ ๊ฒฝ๋ก๋ฅผ ํ์ธํ ์ ์๋ค.
vi /etc/systemd/system/etcd.service
[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target
[Service]
User=etcd
Type=notify
ExecStart=/usr/local/bin/etcd \
--name etcd-server \
--data-dir=/var/lib/etcd-data-new \ # ํด๋น ๊ฒฝ๋ก ์
๋ฐ์ดํธ
...
Bash
๋ณต์ฌ
4.
๊ถํ ์
๋ฐ์ดํธ
etcd-server ~ โ chown -R etcd:etcd /var/lib/etcd-data-new
Bash
๋ณต์ฌ
5.
etcd service ์ฌ์์
systemctl daemon-reload
systemctl restart etcd
Bash
๋ณต์ฌ
6.
ํ์ธ
apiserver, scheduler, controller-manager๊ฐ Restore ๊ณผ์ ์ ํตํด ์ฌ์์๋์์์ ํ์ธํ ์ ์๋ค.
student-node ~ โ kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-69f9c977-4kjqc 1/1 Running 0 46m
coredns-69f9c977-wvn8z 1/1 Running 0 46m
kube-apiserver-cluster2-controlplane 1/1 Running 7 (4m8s ago) 46m
kube-controller-manager-cluster2-controlplane 1/1 Running 1 (10m ago) 46m
kube-proxy-ghcdq 1/1 Running 0 45m
kube-proxy-tpjh6 1/1 Running 0 46m
kube-scheduler-cluster2-controlplane 1/1 Running 1 (10m ago) 46m
weave-net-75x5z 2/2 Running 1 (46m ago) 46m
weave-net-t6bn2 2/2 Running 0 45m
Bash
๋ณต์ฌ
TroubleShooting
๊ถํ์ ์
๋ฐ์ดํธํ์ง ์๊ณ ์งํํ์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด etcd ์๋น์ค๊ฐ ์ฌ์์ ๋์ง ์์ผ๋ฉฐ, ๋์ํ๊ณ ์์ง ์์์ ๋ณผ ์ ์๋ค.
etcd-server ~ โ systemctl restart etcd
Job for etcd.service failed because the control process exited with error code.
See "systemctl status etcd.service" and "journalctl -xe" for details.
etcd-server ~ โ systemctl status etcd
โ etcd.service - etcd key-value store
Loaded: loaded (/etc/systemd/system/etcd.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Wed 2025-01-08 02:13:13 UTC; 83
9ms ago
Docs: https://github.com/etcd-io/etcd
Process: 2083 ExecStart=/usr/local/bin/etcd --name etcd-server --data-dir=/var/lib/etcd-data
-new --cert-file=/etc/etcd/pki/etcd.pem --key-file=/etc/etcd/pki/etcd-key.pem --peer-cert-file
=/etc/etcd/pki/etcd.pem --peer-key-file=/etc/etcd/pki/etcd-key.pem --trusted-ca-file=/etc/etcd
/pki/ca.pem --peer-trusted-ca-file=/etc/etcd/pki/ca.pem --peer-client-cert-auth --client-cert-
auth --initial-advertise-peer-urls https://192.2.20.6:2380 --listen-peer-urls https://192.2.20
.6:2380 --advertise-client-urls https://192.2.20.6:2379 --listen-client-urls https://192.2.20.
6:2379,https://127.0.0.1:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster etcd-se
rver=https://192.2.20.6:2380 --initial-cluster-state new (code=exited, status=1/FAILUR
E)
Main PID: 2083 (code=exited, status=1/FAILURE)
Bash
๋ณต์ฌ
๋ฌธ์ ํด๊ฒฐ์ ์ํดjournalctl์ ํตํด ์๋ฌ ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด์์ ๋, ETCD์ ์ง์ ๋ ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐพ์ง ๋ชปํ๊ฑฐ๋ ํด๋น ๋๋ ํ ๋ฆฌ์ ์ ๊ทผํ ์ ์์ด etcd ์๋น์ค๊ฐ ์คํจ๋จ์ ํ์ธํ ์ ์์๋ค.
Jan 08 02:15:09 etcd-server etcd[2326]: error listing data dir: /var/l
ib/etcd-data-new
Jan 08 02:15:09 etcd-server systemd[1]: Failed to start etcd key-value
store.
Bash
๋ณต์ฌ
๋ฐ๋ผ์ etcd-data-new์ ๊ถํ์ ํ์ธํ์๊ณ , ์์ ๊ถํ์ root โ etcd ๋ณ๊ฒฝ์ ํตํด ์คํ์ ์๋ฃํ๋ค.
etcd-server ~ โ ls -l /var/lib | grep etcd-data
drwx------ 1 etcd etcd 4096 Jan 8 01:36 etcd-data
drwx------ 3 root root 4096 Jan 8 02:06 etcd-data-new
etcd-server ~ โ chown -R etcd:etcd /var/lib/etcd-data-new
etcd-server ~ โ systemctl daemon-reload
etcd-server ~ โ systemctl restart etcd
Bash
๋ณต์ฌ