diff --git "a/\354\230\210\354\233\220/BASIC/1.1 ML_workflow.md" "b/\354\230\210\354\233\220/BASIC/1.1 ML_workflow.md" new file mode 100644 index 0000000..1e909fb --- /dev/null +++ "b/\354\230\210\354\233\220/BASIC/1.1 ML_workflow.md" @@ -0,0 +1,74 @@ +# ๐Ÿฆฆ ML ์›Œํฌํ”Œ๋กœ์šฐ๋ž€ +: ๋ฐ์ดํ„ฐ ๋ถ„์„/๊ฐ€๊ณต -> ๋ชจ๋ธ ํ•™์Šต -> ์ตœ์ ํ™” -> ๋ฐฐํฌ ์˜ ์ผ๋ จ์˜ ๊ณผ์ • + +ํฌ๊ฒŒ ๋ชจ๋ธ ์‹คํ—˜ ๋‹จ๊ณ„์™€ ๋ชจ๋ธ ์ƒ์‚ฐ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰จ +### ๋ชจ๋ธ ์‹คํ—˜ ๋‹จ๊ณ„ +1. identify problem and collect / analyse data +2. choose an ML algorithm and code model +3. experiment with data and model training +4. tune the model hyperparameters +5. iterate tuning, training + +- ๋ฐ์ดํ„ฐ ๋ถ„์„, ์ˆ˜์ง‘ +- ML ๋ชจ๋ธ, ํ”„๋ ˆ์ž„์›Œํฌ ์„ ํƒ +- ๋ชจ๋ธ ์ฝ”๋“œ ์ž‘์„ฑ +- ์‹คํ—˜, ํ•™์Šต +- ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ + +### ๋ชจ๋ธ ์ƒ์‚ฐ ๋‹จ๊ณ„ +1. transform data +2. train model +3. serve the model for online/batch prediction +4. monitor the model's performance + +- ํ•™์Šต์‹œ์Šคํ…œ์— ๋งž๊ฒŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์žฌ๊ฐ€๊ณต +- ์‹ค์ œ ๋ฐ์ดํ„ฐ๋กœ ๋ชจ๋ธ ํ•™์Šต +- ๋ชจ๋ธ ๋ฐฐํฌ +- ๋ชจ๋‹ˆํ„ฐ๋ง + +--- + +# ๐Ÿฆ„ MLOps Intro + +![image](https://user-images.githubusercontent.com/77239220/225042465-d00ea6a4-a778-46a7-a055-64c7a51b6146.png) + +์ถœ์ฒ˜: [https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf](https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf) + +์ „์ฒด ML ์‹œ์Šคํ…œ์„ ๋ณด๋ฉด, ๋ชจ๋ธ ์ž์ฒด ๋ฟ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋‚˜ ์ธํ”„๋ผ ๋“ฑ ๋ชจ๋“  ๋ถ€๋ถ„์ด ํฌํ•จ๋จ + +์ด ์ „์ฒด๋ฅผ ์œ ๊ธฐ์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด MLOps ๋„์ž…! + +--- + +๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ ์‚ฌํ•ญ ์ •์˜ โ†’ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์ „์ฒ˜๋ฆฌ โ†’ ๋ชจ๋ธ ๋นŒ๋“œ โ†’ ํ•™์Šต โ†’ ๋ฐฐํฌ.. ๋ฐ˜๋ณต + +### ์ˆ˜๋™ ํ”„๋กœ์„ธ์Šค + +- ๋ฐ์ดํ„ฐ ์ค€๋น„, ๋ชจ๋ธ ํ•™์Šต, ๊ฒ€์ฆ์ด ์ˆ˜๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง + +![image](https://user-images.githubusercontent.com/77239220/225042710-b6068b6e-8d0c-48cb-9810-1a14a097c0c4.png) +์ถœ์ฒ˜: [https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ko](https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ko) + +- ๋ฌธ์ œ์  + - [training-serving skew](https://developers.google.com/machine-learning/guides/rules-of-ml/#training-serving_skew) + - ์ตœ์‹  ๋ฐ์ดํ„ฐ๋กœ ๋ชจ๋ธ์„ ์žฌํ•™์Šตํ•˜๋Š” ๊ณผ์ •์ด ์ž์ฃผ ์ผ์–ด๋‚˜์ง€ ์•Š์Œ + +## ML ํŒŒ์ดํ”„๋ผ์ธ ์ž๋™ํ™”, CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ž๋™ํ™” + +![image](https://user-images.githubusercontent.com/77239220/225042925-a29b954c-3827-4e6a-84e2-f1b1dbbdbff0.png) +![image](https://user-images.githubusercontent.com/77239220/225042993-f2a2d401-e3a1-484c-990c-da95a1a027b1.png) +1. ๊ฐœ๋ฐœ ๋ฐ ์‹คํ—˜: ์ƒˆ ML ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์‹คํ—˜ ๋‹จ๊ณ„๊ฐ€ ์กฐ์ •๋˜๋Š” ์ƒˆ ๋ชจ๋ธ๋ง์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹œ๋„ +2. ํŒŒ์ดํ”„๋ผ์ธ CI: ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ **(๋ฐ์ดํ„ฐ, ์Šคํ‚ค๋งˆ ๋“ฑ ๋ชจ๋ธ ๊ด€๋ จ ์ •๋ณด๋“ค์„ ๊ณ ๋ คํ•ด์„œ)** +3. **ํŒŒ์ดํ”„๋ผ์ธ CD**: CI ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋Œ€์ƒ ํ™˜๊ฒฝ์— ๋ฐฐํฌ +4. **CT**: ํŒŒ์ดํ”„๋ผ์ธ์€ ์ผ์ • ๋˜๋Š” ํŠธ๋ฆฌ๊ฑฐ์— ๋Œ€ํ•œ ์‘๋‹ต์— ๋”ฐ๋ผ ํ”„๋กœ๋•์…˜ ๋‹จ๊ณ„์—์„œ ์ž๋™์œผ๋กœ ์‹คํ–‰ +5. **๋ชจ๋ธ CD**: ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์˜ˆ์ธก์˜ ์˜ˆ์ธก ์„œ๋น„์Šค๋กœ ์ œ๊ณต. +6. ๋ชจ๋‹ˆํ„ฐ๋ง: ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋ธ ์„ฑ๋Šฅ์˜ ํ†ต๊ณ„๋ฅผ ์ˆ˜์ง‘. ์ดํ›„ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์‹คํ—˜ ์ฃผ๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋จ + +## vs. DevOps + +| | DevOps | MLOps | +| --- | --- | --- | +| CI | ์ฝ”๋“œ, ๊ตฌ์„ฑ์š”์†Œ ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€์ฆ | + ๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ, ๋ชจ๋ธ ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€์ฆ | +| CD | ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง€ ์„œ๋น„์Šค ์ž๋™ ๋ฐฐํฌ | + ๋ชจ๋ธ ์„œ๋น„์Šค ์ž๋™ ๋ฐฐํฌํ•˜๋Š” ML ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ | +| CT | | ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ์žฌํ•™์Šต์‹œํ‚ค๊ณ  ์„œ๋น™ | + diff --git "a/\354\230\210\354\233\220/BASIC/1.2 kubeflow.md" "b/\354\230\210\354\233\220/BASIC/1.2 kubeflow.md" new file mode 100644 index 0000000..3e694e3 --- /dev/null +++ "b/\354\230\210\354\233\220/BASIC/1.2 kubeflow.md" @@ -0,0 +1,164 @@ +# ๐Ÿ– kubeflow? +: ๋ฆฌ์†Œ์Šค ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์œ„์—์„œ ์‹คํ–‰๋˜๋Š” ML toolkit + +**๋ชฉํ‘œ** : ML ์›Œํฌํ”Œ๋กœ์šฐ์— ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ **๊ฐ ์˜์—ญ์—์„œ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์˜คํ”ˆ์†Œ์Šค ์‹œ์Šคํ…œ๋“ค์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ** + +์ปดํฌ๋„ŒํŠธ๋“ค : ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ, ๋ฉ”์ธ ๋Œ€์‰ฌ๋ณด๋“œ, ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹, ํŒŒ์ดํ”„๋ผ์ธ, ์„œ๋น™, ํ•™์Šต, ๊ทธ ์™ธ.. + +# ๐Ÿ”ฅ How to Install + +kubeflow ์„ค์น˜ ์ตœ์†Œ ์‚ฌ์–‘: +- 4 CPU ์ด์ƒ +- 50 GB ์Šคํ† ๋ฆฌ์ง€ ์ด์ƒ +- 12 GB ๋ฉ”๋ชจ๋ฆฌ ์ด์ƒ + +๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•จ + +1. minikube / minikf (kubeflow ๋งŒ ์‚ฌ์šฉํ• ๊ฑฐ๋ผ๋ฉด ๋‹จ์ผ ๋…ธ๋“œ ํ™˜๊ฒฝ๋„ ๊ดœ์ฐฎ์Œ) + + ์ฐธ๊ณ : https://magoker.tistory.com/93, https://rfriend.tistory.com/676 +2. ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค (AWS EKS, NCP NKS, GCP GKE..) +3. VM ๋งˆ์Šคํ„ฐ & ์›Œ์ปค ๋„์šฐ๊ธฐ + +์‚ฌ์‹ค ๋ชจ๋‘ ์‹œ๋„ํ•ด๋ดค๋Š”๋ฐ ์ฑ… ์‹ค์Šต ์ค‘์— ๋ง‰ํžˆ๋Š”๊ฒŒ ์—†์œผ๋ฉด ๊ทธ๋ƒฅ minikf ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™๋‹ค. ~~๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด 3๋ฒˆ์œผ๋กœ ๊ทธ๋Œ€๋กœ ๊ฐ€๋Š”๊ฑธ๋กœ...~~ + +## ๋„์ปค ์„ธํŒ… +``` +$ sudo apt-get update +$ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common +$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" +$ sudo apt-get update +$ sudo apt-get install -y docker-ce=5:18.09.9~3-0~ubuntu-bionic docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic containerd.io vim + +$ sudo su +$ cat > /etc/docker/daemon.json < get_helm.sh +$ chmod 700 get_helm.sh +$ ./get_helm.sh +$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/ +$ helm install --generate-name --set nfs.server=ip์ฃผ์†Œ --set nfs.path=/mnt/storage/nfs_storage stable/nfs-client-provisioner + +$ kubectl patch storageclass nfs-client -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' +$ kubectl get storageclass +``` + +## ๋„์ปค private registry ๋ฐฐํฌ + +``` +$ kubectl apply -f https://raw.githubusercontent.com/mojokb/handson-kubeflow/master/registry/kubeflow-registry-deploy.yaml +$ kubectl apply -f https://raw.githubusercontent.com/mojokb/handson-kubeflow/master/registry/kubeflow-registry-svc.yaml + +$ sudo vi /etc/docker/daemon.json + +### ์ถ”๊ฐ€ +"insecure-registries": [ + "kubeflow-registry.default.svc.cluster.local:30000" +] + +$ sudo systemctl daemon-reload +$ sudo systemctl restart docker + +$ sudo vi /etc/hosts +# ๋งˆ์Šคํ„ฐ๋…ธ๋“œ ip kubeflow-registry.default.svc.cluster.local + +# ์›Œ์ปค์—์„œ ํ™•์ธ +$ curl kubeflow-registry.default.svc.cluster.local:30000/v2/_catalog +``` + +## k9s ์„ค์น˜ +``` +$ wget https://github.com/derailed/k9s/releases/download/v0.13.7/k9s_0.13.7_linux_i386.tar.gz +$ tar zxvf k9s_0.13.7_linux_i386.tar.gz +$ sudo mv k9s /usr/bin +$ k9s + +# ์ข…๋ฃŒ๋Š” :q +``` + +## kfctl ์„ค์น˜ +``` +$ wget https://github.com/kubeflow/kfctl/releases/download/v1.0.2/kfctl_v1.0.2-0-ga476281_linux.tar.gz +$ tar zxvf kfctl_v1.0.2-0-ga476281_linux.tar.gz +$ sudo mv kfctl /usr/bin +``` + +## kubeflow ์„ค์น˜ +``` +$ export KF_NAME=yw-kubeflow +$ export BASE_DIR=/home/${USER} +$ export KF_DIR=${BASE_DIR}/${KF_NAME} +$ export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml" +$ sudo mkdir -p ${KF_DIR} +$ sudo chmod 777 ${KF_DIR} +$ cd ${KF_DIR} +$ kfctl apply -V -f ${CONFIG_URI} + +# ์„ค์น˜ ํ™•์ธ +$ kubectl get pods -n kubeflow -o wide +``` \ No newline at end of file diff --git "a/\354\230\210\354\233\220/BASIC/1.3 kubernetes.md" "b/\354\230\210\354\233\220/BASIC/1.3 kubernetes.md" new file mode 100644 index 0000000..2a38c59 --- /dev/null +++ "b/\354\230\210\354\233\220/BASIC/1.3 kubernetes.md" @@ -0,0 +1,75 @@ +# ์ปจํ…Œ์ด๋„ˆ ๊ฐœ๋ฐœ ์‹œ๋Œ€ + +## ๐Ÿณ ๊ธฐ์กด์˜ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ  vs ๋„์ปค + +๊ธฐ์กด VM ๊ธฐ์ˆ ์€ ๋‹จ์ผ ๋ฌผ๋ฆฌ์„œ๋ฒ„ ์œ„์— ๊ฐ€์ƒ OS๋“ค์„ ์‹คํ–‰ํ•ด ์ปคํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒฉ๋ฆฌ - ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๊ณต๊ฐ„์—์„œ ๋…๋ฆฝ๋˜์–ด ์žˆ์–ด ๊ฐ€์ƒํ™˜๊ฒฝ๋ผ๋ฆฌ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ + +แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-03-16 แ„‹แ…ฉแ„’แ…ฎ 2 31 39 + +๊ทธ๋Ÿฌ๋‚˜.. ํ˜ธ์ŠคํŠธ OS ์œ„์— ๋˜ ๋‹ค๋ฅธ OS๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ๋น„์šฉ์— ๋Œ€ํ•œ ๋ถ€๋‹ด์ด ํผ. +-> ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์€ ์‹คํ–‰ ๋น„์šฉ์„ cgroup, namespace ๋“ฑ์˜ ์ปค๋„ ๊ธฐ๋Šฅ์œผ๋กœ ํ•ด๊ฒฐ (์šด์˜์ฒด์ œ๋Š” ๊ณต์œ ํ•˜๋˜ ๋ฆฌ์†Œ์Šค๋งŒ ๊ฒฉ๋ฆฌ) + +์ •๋ฆฌํ•ด๋ณด๋ฉด ๋„์ปค์™€์˜ ์ฐจ์ด์ ์€ ๊ฒŒ์ŠคํŠธOS์˜ ์œ ๋ฌด! VM๋Š” ํ•˜๋‚˜์”ฉ ๋Š˜์–ด๋‚  ๋•Œ๋งˆ๋‹ค OS๋ฅผ ์œ„ํ•œ ์ž์›์„ ํ• ๋‹นํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ฐ˜๋ฉด์— ๋„์ปค๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋งŒ ์žˆ์œผ๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. + + +# โš“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค +๊ฐœ๋… ์ •๋ฆฌ ing.. + +## ์•„ํ‚คํ…์ฒ˜ +์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ํฌ๊ฒŒ ๋งˆ์Šคํ„ฐ(Master)์™€ ๋…ธ๋“œ(Node) ๋‘ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ๋จ + +- ๋งˆ์Šคํ„ฐ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์„ค์ • ํ™˜๊ฒฝ ์ €์žฅ, ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ +- ๋…ธ๋“œ: ํŒŒ๋“œ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ์ฒ˜๋Ÿผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์›Œํฌ๋กœ๋“œ๋ฅผ ํ˜ธ์ŠคํŒ… + + +
+๋งˆ์Šคํ„ฐ ๊ตฌ์„ฑ +
+ +1. API ์„œ๋ฒ„ +์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋ชจ๋“  ๋ช…๋ น๊ณผ ํ†ต์‹ ์„ API๋ฅผ ํ†ตํ•ด์„œ ํ•จ. API ์„œ๋ฒ„๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ๋“ค์„ REST API๋กœ ์ œ๊ณตํ•˜๊ณ  ๊ทธ์— ๋Œ€ํ•œ ๋ช…๋ น์„ ์ฒ˜๋ฆฌ + +2. Etcd +DB ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋ฒ„. +etcd๋ผ๋Š” ๋ถ„์‚ฐํ˜• ํ‚ค/๋ฐธ๋ฅ˜ ์Šคํ† ์–ด ์˜คํ”ˆ์†Œ์Šค๋กœ k8s ํด๋Ÿฌ์Šคํ„ฐ์˜ ์˜ ์„ค์ •์ •๋ณด๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•จ. + +3. ์Šค์ผ€์ฅด๋Ÿฌ +ํŒŒ๋“œ,์„œ๋น„์Šค ๋“ฑ ๊ฐ ๋ฆฌ์†Œ์Šค๋“ค์„ ์ ์ ˆํ•œ ๋…ธ๋“œ์— ํ• ๋‹นํ•˜๋Š” ์—ญํ• ์„ ํ•จ + +4. ์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ ธ +์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๊ฐ ๋…ธ๋“œ์— ๋ฐฐํฌ/๊ด€๋ฆฌ + + ์ปจํŠธ๋กค๋Ÿฌ? : ํŒŒ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•จ. + - ๋ ˆํ”Œ๋ฆฌ์นด์…‹ (์ง€์ •๋œ ์ˆ˜์˜ ํŒŒ๋“œ๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰๋˜๋„๋ก ์œ ์ง€) + - ๋””ํ”Œ๋กœ์ด๋จผํŠธ (๊ฐ€์žฅ ๊ธฐ๋ณธ, stateless ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์‹œ ์‚ฌ์šฉ) + ์ฐธ๊ณ ๋กœ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด replica ์ˆ˜๋Œ€๋กœ ํŒŒ๋“œ ์ƒ์„ฑ๋˜๊ณ  ์ด๋ฅผ ๊ด€๋ฆฌํ•  ๋ ˆํ”Œ๋ฆฌ์นด์…‹๋„ ์ƒ์„ฑ๋จ + - ๋ฐ๋ชฌ์…‹ (๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋กœ ๋„์›Œ์•ผ ํ•  ์•ฑ์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ, ๋‹จ ํ•˜๋‚˜์˜ ํŒŒ๋“œ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ๊ฐ€ ์ฃฝ์œผ๋ฉด ์‚ฌ๋ผ์ง. ์˜ˆ์‹œ: ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ, ๋ชจ๋‹ˆํ„ฐ๋ง ํ”„๋กœ์„ธ์Šค) + - ์Šคํ…Œ์ดํŠธํ’€์…‹ (์ƒํƒœ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ํŒŒ๋“œ๋ฅผ ๊ด€๋ฆฌ) + - ์žก (ํŒŒ๋“œ๊ฐ€ ์š”์ฒญ๋œ ์ž‘์—…์„ ์‹คํ–‰ ํ›„ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ๊ด€๋ฆฌ. ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋Š” ์ž‘์—…๋“ค์— ์ ํ•ฉํ•จ! ์˜ˆ์‹œ: ๋„์ปค์ด๋ฏธ์ง€, ๋จธ์‹ ๋Ÿฌ๋‹ ํ•™์Šต) + ๋“ฑ์ด ์žˆ์Œ + +5. DNS +์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋ฆฌ์†Œ์Šค์˜ ์—”๋“œํฌ์ธํŠธ(Endpoint)๋ฅผ DNS๋กœ ๋งตํ•‘ํ•˜๊ณ  ๊ด€๋ฆฌํ•จ. Pod, ์„œ๋น„์Šค ๋“ฑ์€ ip๋ฅผ ๋ฐฐ์ •๋ฐ›๋Š”๋ฐ, ์ด ip๋Š” ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์ด ๋จ -> ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” ์ด๋ฅผ ๋‚ด๋ถ€ DNS์„œ๋ฒ„๋ฅผ ๋‘๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐ! ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ๊ธฐ๋ฉด, ๊ทธ ๋ฆฌ์†Œ์Šค์˜ ip์™€ DNS ์ด๋ฆ„์„ ๋“ฑ๋ก. + +
+
+ +
+๋…ธ๋“œ +
+ +1. Kubelet +๋…ธ๋“œ์— ๋ฐฐํฌ๋˜๋Š” ์—์ด์ „ํŠธ - ๋งˆ์Šคํ„ฐ *API์„œ๋ฒ„*์™€ ํ†ต์‹ ํ•ด์„œ ๋…ธ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋ช…๋ น์„ ๋ฐ›์•„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋ฐ˜๋Œ€๋กœ ๋…ธ๋“œ์˜ ์ƒํƒœ ๋“ฑ์„ ๋งˆ์Šคํ„ฐ๋กœ ์ „๋‹ฌ + +2. Kube-proxy +๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ ์ ˆํ•œ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ผ์šฐํŒ… ๋ฐ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ. ๋…ธ๋“œ๋กœ ๋“ค์–ด์˜ค๋Š”/๋‚˜๊ฐ€๋Š” ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ๊ณผ, ๋งˆ์Šคํ„ฐ์™€์˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ๊ด€๋ฆฌ. + +3. Container runtime +ํŒŒ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋ฐฐํฌ๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰. ๋„์ปค๊ฐ™์€.. + +4. cAdvisor +๊ฐ ๋…ธ๋“œ์—์„œ ๋™์ž‘ํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์—์ด์ „ํŠธ. ๋…ธ๋“œ ๋‚ด ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ์ƒํƒœ์™€ ์„ฑ๋Šฅ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ API ์„œ๋ฒ„๋กœ ์ „๋‹ฌ! + +
+
+