๋ชฉ์ฐจ
ย Backup & Restore
๋ฐ์ดํฐ ์์ค, ํด๋ฌ์คํฐ ์ฅ์ ๋ฑ์ ์ด์ ๋ก ๋ฐฑ์
๊ณผ ๋ณต๊ตฌ๊ฐ ํ์ํ๋ค. ๋ฐฑ์
์ ํตํด ๋น ๋ฅธ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ์๋น์ค์ ์ฐ์์ฑ์ ์ ์งํ ์ ์๋ค. ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ๋ฐฑ์
ํด์ผ ํ ์์๋ค์ ๋ค์๊ณผ ๊ฐ๋ค:
โข
Resource Configuration - ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์
๋ค์ definition file์ ํตํด ๋ฐฐํฌ๋๋ค
โข
ETCD Cluster - ETCD ํด๋ฌ์คํฐ๋ ํด๋ฌ์คํฐ์ ๊ด๋ จ๋ ๋ชจ๋ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ค
โข
Persistent Volumes - ์ ํ๋ฆฌ์ผ์ด์
์ด PV๋ก ๊ตฌ์ฑ๋๋ฉด ๋๋ค๋ฅธ ๋ฐฑ์
ํ๋ณด๊ฐ ๋๋ค
ย Resource Configuration
Declarative
Configuration์ ์ ์ฅํ๊ธฐ ์ํด์ ์ ์ธ์ ์ ๊ทผ(Declarative approach)์ ์ํ ์ ์ ํ์ผ์ ์์ฑํด์ผ ํ๋ค. Object definition file์ ๋์ค์ ์ฌ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ , ๋ค๋ฅธ ์ฌ๋๊ณผ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค. ์ด๋ฌํ ํ์ผ๋ค์ Github ๊ฐ์ ์์ค ์ฝ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ์ฅํ๋ ๊ฒ์ด ์ ์ ํ๋ค. ์ด ๋ฐฑ์
์๋ฃจ์
์ ํตํด ํด๋ฌ์คํฐ ์ ์ฒด๋ฅผ ์์ด๋, configuration file์ ์ ์ฉํด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ ๋ฐฐํฌํ ์ ์๋ค.
Query the kube-apiserver
๋๊ตฐ๊ฐ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ์ง ์๊ณ ๋ช
๋ น์ ์ ๊ทผ(Imperative)์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ๋ ์๋ค. ์ด๋ฌํ ์ํฉ ๋๋ฌธ์ Resource Configuration์ ๋ฐฑ์
ํ๋ ๋ ๋์ ๋ฐฉ๋ฒ์ Kube-apiserver๋ฅผ ์ฟผ๋ฆฌํ๋ ๊ฒ์ด๋ค.
kubectl์ ํตํด kube-apiserver๋ฅผ ์ฟผ๋ฆฌํ๊ฑฐ๋ apiserver์ ์ง์ ์ก์ธ์คํจ์ผ๋ก์จ ํด๋ฌ์คํฐ์ ์์ฑ๋ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ๋ฆฌ์์ค ๊ตฌ์ฑ์ ๋ณต์ฌํด ์ ์ฅํ ์ ์๋ค.
kubectl get all --all-namespaces -o yaml > all-deploy-services.yaml
Bash
๋ณต์ฌ
kubectl์ ํตํด ๋ชจ๋ pod, deploy, service๋ฅผ ๊ฐ์ ธ์ yaml ํ์ผ๋ก ์ ์ฅํ ์ ์๋ค. ํ์ง๋ง ์ด ์ธ์๋ ๊ณ ๋ คํด์ผ ํ ๋ฆฌ์์ค ๊ทธ๋ฃน์ด ๋ง์๋ฐ, ์ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด VELERO์ด๋ค. ARK๋ผ๊ณ ๋ถ๋ ธ์๋ VELERO๋ HeptIO์์ ์ ๊ณตํ๋ ํด๋ก, ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ํตํด ํด๋ฌ์คํฐ์ ๋ฐฑ์
์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
ย ETCD
ETCD Cluster๋ ํด๋ฌ์คํฐ ์์ฒด์ ๊ดํ ์ ๋ณด์ ๋
ธ๋ ๋ฐ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ์์ฑ๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ ์์์์ ๋ฆฌ์์ค๋ฅผ ๋ฐฑ์
ํ๋ ๊ฒ ๋์ ETCD ์๋ฒ ์์ฒด๋ฅผ ๋ฐฑ์
ํ๋ ๋ฐฉ๋ฒ์ ํํ ์ ์๋ค.
Data Directory
ETCD๋ ๋ง์คํฐ ๋
ธ๋์ ํธ์คํธ๋์ด ์์ผ๋ฉฐ, ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์ฅ์๋ฅผ --data-dir์ ๋ช
์ํด๋๋๋ค. ํด๋น ๋๋ ํ ๋ฆฌ๊ฐ ๋ฐฑ์
ํด๋ก ๋ฐฑ์
ํ ์ ์๋๋ก ๊ตฌ์ฑํ ์ ์๋ ๋๋ ํ ๋ฆฌ์ด๋ค.
Snapshot - backup
ETCD๋ ๋ด์ฅ(built-in) ์ค๋
์ท ์๋ฃจ์
์ ๊ฐ์ง๊ณ ์๋ค. etcdctl snapshot save๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋
์ท์ ์ฐ์ ์ ์๋ค. ์ค๋
์ท์ .db ์ด๋ฆ์ ๋ถ์ด๋ฉฐ ์ค๋
์ท ํ์ผ์ ํ์ฌ ์์นํ ๋๋ ํ ๋ฆฌ์ ์์ฑ๋๋ค. ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ๋ช
์ํ๋ฉด ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ์์ฑํ ์ ์๋ค. ๋ฐฑ์
์ ์ํ ํ์ธ์ etcd snapshot status ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ๋ค.
# snapshot ์ ์ฅ
ETCDCTL_API=3 etcdctl snapshot save snapshot.db
# ๋ฐฑ์
์ํ ํ์ธ
ETCDCTL_API=3 etcdctl snapshot status snapshot.db
Bash
๋ณต์ฌ
์ค๋
์ท์ ์ฐ์ ๋๋ ์ธ์ฆ์ ํ์ผ๊ณผ etcd ํด๋ฌ์คํฐ๋ก์ ์๋ํฌ์ธ๋, CA ์ธ์ฆ์, etcd ์๋ฒ ์ธ์ฆ์, ํค๋ฅผ ์ง์ ํด์ผ ํ๋ค.
ETCDCTL_API=3 etcdctl snapshot save snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/etcd/ca.crt \
--cert=/etc/etcd/etcd-server.crt \
--key=/etc/etcd/etcd-server.key
Bash
๋ณต์ฌ
Snapshot - restore
์ค๋
์ท์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ๋ณต์์ํค๊ธฐ ์ํด์ ๋จผ์ kube-apiserver ์๋น์ค๋ฅผ ์ค๋จ์์ผ์ผ ํ๋ค. ๋ณต์ ๊ณผ์ ์์๋ ETCD Cluster๋ฅผ ์ฌ์์ํด์ผ ํ๋๋ฐ kube-apiserver๊ฐ etcd์ ์์กดํ๊ธฐ ๋๋ฌธ์ด๋ค. kube-apiserver๋ฅผ ์ค์ง์์ผฐ๋ค๋ฉด ๋ฐฑ์
ํ์ผ์ ๊ฒฝ๋ก์ธ snapshot.db ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ์ฌ etcd snapshot restore ๋ช
๋ น์ ์คํํ๋ค. --data-dir ์ ํตํด ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ ์ ์๋ค. ๊ธฐ๋ณธ ๊ฐ์ /var/lib/etcd์ด๋ฉฐ, ์๋ก ์์ฑํ์ง ์์ผ๋ฉด ๋ฎ์ด ์์์ง๋ค.
์ดํ๋ก๋ ๋ฐ๋ชฌ ๋ฆฌ๋ก๋์ ์๋น์ค ์ฌ์์์ ํ ํ, kube-apiserver๋ฅผ ์คํ์ํค๋ฉด ํด๋ฌ์คํฐ๊ฐ ์๋ ์ํ๋ก ๋์์จ๋ค.
# kube-apiserver ์๋น์ค ์ค์ง
service kube-apiserver stop
# ์ค๋
์ท ๋ณต์
ETCDCTL_API=3 etcdctl snapshot restore snapshot.db \
--data-dir /var/lib/etcd-from-backup
# ๋ฐ๋ชฌ ๋ค์ ๋ก๋
systemctl daemon-reload
# etcd ์๋น์ค ์ฌ์์
service etcd restart
# kube-apiserver ์๋น์ค ์คํ
service kube-apiserver start
Bash
๋ณต์ฌ
ETCD๊ฐ ๋ฐฑ์
์์ ๋ณต์ํ ๋, ์๋ก์ด ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ์ด๊ธฐํํ๊ณ etcd์ ๋ฉค๋ฒ๋ค์ ์๋ก์ด ํด๋ฌ์คํฐ์ ์๋ก์ด ๋ฉค๋ฒ๋ก ์ค์ ํ๋ค. ์ด๋ ์๋ก์ด ๋ฉค๋ฒ๊ฐ ๊ธฐ์กด ํด๋ฌ์คํฐ์ ์ฐ์ฐํ ์กฐ์ธ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ โ์ค๋
์ท์ ํตํด ํด๋ฌ์คํฐ ๋ณต์์ ํ๋ค๋ฉด ๊ธฐ์กด ํด๋ฌ์คํฐ๊ฐ ์ฌ๋ผ์งํ
๋ฐ ์ ๊ธฐ์กด ํด๋ฌ์คํฐ์ ์กฐ์ธ๋ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์์๊นโ๋ผ๋ ์๋ฌธ์ด ๋ค์๋ค. GPT์ ์ํ ๋ต์ผ๋ก๋ ๊ธฐ์กด ํด๋ฌ์คํฐ๊ฐ ๋ณต์ ๊ณผ์ ์์ ๊ณ์ ์๋ํ ์ ์๊ฒ ๋๋ฌธ์ ์๋ก์ด ํด๋ฌ์คํฐ๋ก configuration์ ์ด๊ธฐํํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
ย Summary
Resource Configuration
manifest ํ์ผ์ ํตํด ๋ฐฐํฌํ ๊ฐ์ฒด๋ค์ Github ๋ฑ์ Source Code Repository์ ์ ์ฅํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ๋ช
๋ น์ ์ ๊ทผ์ ํตํด ์์ฑ๋ ๊ฐ์ฒด๋ค์ manifest ํ์ผ์ ํฌํจ๋์ง ์์ ์ ์์ผ๋ฏ๋ก, ์ด๋ฅผ ์ํ ์ถ๊ฐ์ ์ธ ๋ฐฑ์
๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
kube-apiver์ ์ง์ ์ฟผ๋ฆฌํ์ฌ ๋ฆฌ์์ค๋ฅผ ๋ฐฑ์
ํ๋ ๋ฐฉ๋ฒ์ ๋ช
๋ น์ ์ ๊ทผ์ ํตํด ์์ฑ๋ ๊ฐ์ฒด๋ค๊น์ง ์ ๋ถ ๋ฐฑ์
ํ ์ ์๋ค. ์ด๋ ETCD์ ์ ๊ทผํ์ง ๋ชปํ๋ ์ํฉ์์๋ ์ ์ฉํ๋ฉฐ, Managed Kubernetes ํ๊ฒฝ์์ ์์ฃผ ๋ฐ์ํ ์ ์๋ ์ํฉ์ผ๋ก, ์ด ๊ฒฝ์ฐ kube-apiserver๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ๋ฐฑ์
ํ๋ ๊ฒ์ด ์ ํฉํ ์ ์๋ค.
ETCD
ETCD๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๋ฉฐ, ์ค๋
์ท์ ํตํด ํด๋ฌ์คํฐ ์ ์ฒด ์ํ๋ฅผ ๋ฐฑ์
๋ฐ ๋ณต์ํ ์ ์๋ค. ๋ณต์์ ์งํํ๋ฉด ๊ธฐ์กด ํด๋ฌ์คํฐ๋ ์ฌ๋ผ์ง๊ณ ์ค๋
์ท์ ์ํ ์๋ก์ด ํด๋ฌ์คํฐ๊ฐ ์๋ก ์์ฑ๋๋ค.