2022. 9. 7. 22:12ใSystem ์์ ์ค/DevOps
์ด ๋ด์ฉ์ ์ธํ๋ฐ - Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ ๋ด์ฉ ์
๋๋ค.
ํด๋น ๋ด์ฉ์ Code ๋ด์ฉ์ ์ด ๊ณณ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ ๋ชฉ์ฐจ
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - ์๋ํ ๋๊ตฌ์ ์ฌ์ฉ
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Jenkins + Infrastructure as Code ์์ ์ฐ๋
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Jenkins + Ansible + Kubernetes ์์ ์ฐ๋
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Advenced Jenkins ์ฌ์ฉ โ - Pipeline
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Advenced Jenkins ์ฌ์ฉ โก - SonarQube
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Advenced Jenkins ์ฌ์ฉ โข - Multi Nodes
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - ์์ฉ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๋ฐฐํฌํ๊ธฐ
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - ๋ถ๋ก
๐ Jenkins, Ansible, Kubernetes ์ฐ๋
๐ฝ ๊ฐ์
๐ฆ ์๊ฐ
์ ํต์ ์ธ ๋ฐฉ๋ฒ ์ฆ, ์จํ๋ ๋ฏธ์ค ๊ธฐ๋ฐ์์ ๋ฐฐํฌ๋ฅผ ํ๋ค๋ ๊ฒ์ ๋ฌผ๋ฆฌ์ Hardware์ OS(์ด์์ฒด์ )๋ฅผ ์ฌ๋ฆฌ๊ณ , ๊ทธ ์์ Application์ ์ฌ๋ ค ์ฌ์ฉํ๋ ๋ฐฉ์์ด์์ด์.
ํ๋์ Application์ด ์์์ ๋ง์ด ์ฐจ์งํ๊ฒ ๋๋ฉด ๋ค๋ฅธ Application์ ์์์ ์ฐ์ง ๋ชปํด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๋ฌธ์ ๊ฐ ์์์ด์.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ๋ฌ๋์ ๋ฌผ๋ฆฌ ๋จธ์ ์ ๋๊ณ , Application์ ๊ฐ๊ฐ ๋ฐฐํฌํ๋ ๋ฐฉ์์ ์ฐ๊ธฐ๋ ํ์๋๋ฐ, ๋น์ฉ์ ๋ฌธ์ ์ ์์์ ํ์ฅ ๋ฌธ์ ๊ฐ ์์์ด์.
๋๋ฒ์งธ๋ ๊ฐ์ํ ์๋ฃจ์
์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ด์.
๋ํ์ ์ผ๋ก VM Ware์ฌ์ exsi๋, Windows์ Hyper-V ๋ฑ์ด ์์ด์.
๊ฐ์ํ์ ๊ฒฝ์ฐ ๋ฌผ๋ฆฌ ๋จธ์ ์์ ๊ฐ์ํ OS๋ฅผ ์ฌ๋ฆฌ๊ณ , ๊ทธ ์์ Hypervisor๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ๋๋๋ฐ, ์ด ๊ธฐ์ ์ ํตํด ๊ฐ๊ฐ์ VM(๊ฐ์ ๋จธ์ )์ ๊ฐ๋ณ OS๋ฅผ ์ฌ๋ฆฌ๊ณ , Application์ ์ด์ฉํ ์ ์์ด์.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ ๋ฌผ๋ฆฌ ๋จธ์ ๋ด์ ์ฌ๋ฌ ๊ฐ์ ๋จธ์ ์ ๊ฐ๊ฐ์ ๋
๋ฆฝ ์์์ ๊ฐ์ ์ ์๊ฒ ๋จ์ผ๋ก ๊ฐ๊ฐ์ Application๋ค์ด ์ฌ์ฉํ๋ ์์์ ํต์ ํ ์ ์๊ณ , ์ํธ ๋ณด์๋ ์ ์งํ ์ ์๊ฒ ๋์์ด์.
ํ์ง๋ง, ๊ฐ์ํ์ ๊ฒฝ์ฐ ๋ฌผ๋ฆฌ ์๋ฒ๋ด์ ์ฌ๋ฌ ๊ฐ์ ๋จธ์ ์ด ์ฌ๋ผ๊ฐ๊ฒ ๋๋ฉด ์์์ ์ค๊ฒ ๋๊ณ , ๋ถํ๊ฐ ์ปค์ง๋ ๋ฌธ์ ๊ฐ ์์ด์.
์ธ๋ฒ์งธ๋ก Container ๊ฐ์ํ ๋ฐฉ๋ฒ์ด ์์ด์.
์ด ๋ฐฉ๋ฒ์ VM๊ณผ ์ ์ฌํ ๋ฐฉ๋ฒ์ธ๋ฐ, ๊ฐ ๊ฐ์ ๋จธ์ ์ ๋ํด ๊ฒฉ๋ฆฌํ๋ ๋ถ๋ถ์ ์ข ๋ ์ํํด์ Application ๊ฐ ์ด์์ฒด์ ๋ฅผ ์๋ก ๊ณต์ ํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด์์.
๋ํ Container ๊ฐ์ํ๋ VM๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๊ฐ ๊ฐ์๋จธ์ ์ OS๊ฐ ์ถ๊ฐ๋ก ์ค์น๋๋ ๋ฐฉ์์ด ์๋๊ธฐ ๋๋ฌธ์ ์ข ๋ ๊ฐ๋ณ๊ฒ ์ด์์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์์ด์.
๋ํ Host Server์ ์์์ ์ฌ์ฉํ ์ ์๊ธฐ๋ ํด์.
CNCF(Cloud Native Interactive Landscape)
Kubernetes(K8s)๋ ์คํ ์์ค ๊ธฐ๋ฐ์ Containerํ ๋ Application(Work load & Service)์ ์๋ ๋ฐฐํฌ, ์ค์ผ์ผ๋ง ๋ฑ์ ์ ๊ณตํ๋ ๊ด๋ฆฌ Platform์ด์์.
K8s์ Docker๋ ์์ฐํ ๋ค๋ฅธ ์๋ฃจ์
์ด์์.
K8s์ Docker๋ ์ํธ ๋์ฒดํ ์ ์์ด์.
K8s๋ Container ๊ฐ์ํ ๊ธฐ์ ์ ์ด์ฉํ Service, Packaging๋ Serivce์ ์๋ ๋ฐฐํฌ, Scaling ์์
์ ๋์์ฃผ๋ ๋๊ตฌ์์.
K8s์ ์ฅ/ ๋จ์
์ฅ ์ |
๋จ ์ |
Containerํ ๋ Application ๊ตฌ๋
|
Source Code ๋ฐฐํฌ ๋ถ๊ฐ, Build ๋ถ๊ฐ |
Service Discovery & Load balancing |
Application Level Service ์ง์ ์์ |
Storage orchestration |
Logging, Monitoring Solution ์ง์ ์์ |
์๋ํ๋ Roll Out, Roll Back |
ํฌ๊ด์ Machine Setting,
|
์๋ํ๋ Bin Packing |
|
์๋ํ๋ Self-Healing (๋ณต๊ตฌ)
|
|
Secret & composition Management (๊ตฌ์ฑ ๊ด๋ฆฌ) |
K8s Cluster๋?
K8s๋ Master Node(๊ฐ๊ฐ์ Work Node ๊ด๋ฆฌ)์ ์ค์ Container ์์ฒด ์ด์, ์ค์ผ์ฅด๋ง์ ๋ด๋นํ๋ ๊ฒ์ด Work Node์ด๊ณ , ์ด ๋๊ฐ์ง๋ฅผ ํฉ์ณ์ ๋ถ๋ฅด๋ ๊ฒ์ด K8s Cluster์์.
Master Node ์์๋ ์ค์ ์ ๋ณด(etcd), ์ฌ์ฉ์ ์ค์ผ์ฅด ๊ด๋ฆฌ(sched), api ๋ฑ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊ตฌ์ฑ์ด ๋์ด ์์ด์.
Work Node ์์๋ ์ค์ ๋ก ์ด์ํ๊ณ ์ ํ๋ Container๋ค์ ๊ด๋ฆฌํ๊ธฐ ์ํ pod๋ผ๋ ๊ฐ๋
, ์ด pod๋ฅผ ์ด์ํ๊ธฐ ์ํ kubelet์ด๋ผ๋ ๊ฐ๋
์ด ํฌํจ๋์ด ์์ด์.
๊ฐ๋ฐ์๋, ๊ด๋ฆฌ์๊ฐ ๊ฐ๊ฐ์ ์ ๊ทผ Tool(UI๋ฅผ ๊ฐ์ง Web Service Tool ํน์ CLI Tool)๋ก K8s Master Node API์ ๋ช
๋ น์ด๋ฅผ ์ ๋ฌํ๋ฉด API๋ ์๊ธฐ๊ฐ ๊ฐ์ฉํ ์ ์๋ Work Node๋ค์๊ฒ ๊ฐ๋ฐ์๋, ๊ด๋ฆฌ์๊ฐ ๋ณด๋ธ ๋ช
๋ น์ด๋ฅผ ์ ๋ฌํ๊ฒ ๋์.
API๊ฐ ์ ๋ฌํ ๋ช
๋ น์ด๋ Cube(K8s) Proxy๊ฐ ๋ฐ๋ ์ญํ ์ ํ๋๋ฐ, Cube(K8s) Proxy๋ Cluster์ ๊ฐ Work Node์์ ์คํ๋๊ณ ์๋ Network Proxy์์.
์ฆ, K8s์์ Service์ ๊ฐ๋
์ผ๋ก ๋ณด๋ฉด ์ข์ ๊ฑฐ ๊ฐ์์.
์ด ์น๊ตฌ๋ Network์ ์ ์ง, ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๊ณ ์์ด์.
Master Node์์ ๊ฐ๊ฐ ๊ฐ์ฉํ ์ ์๋ Work Node์ ์ด๋ค ๋ช
๋ น์ด๋ฅผ ์ ๋ฌํ๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ Container๋ฅผ Pod ํํ๋ก ๋ฌถ์ด์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ํํ์์.
K8s๋ ์ฌ์ฉํ ์ ์๋ ์ต์ํ์ ๋จ์์ธ Pod๋ผ๋ ํํ๋ก ๋ฌถ์ด ๋ฐฐํฌ๋ฅผ ํ๊ฒ ๋๊ณ , ์ด Pod์์๋ ์ฌ๋ฌ Container๊ฐ ์กด์ฌํ ์ ์์ด์.
๊ฐ๊ฐ์ Work Node๋ Container๋ฅผ ์ด์ํ๊ธฐ ์ํ Container Engine์ ๊ฐ์ง๊ณ ์์ด์ผ ํด์.
Work Node๋ฅผ ๋จ์ผ Node๋ก ๊ตฌ์ฑํ ์๋ ์์ง๋ง, ์์ ์ ์ธ Service๋ฅผ ์ํด Multi Node๋ฅผ ๊ฐ์ง๊ณ , K8s Cluster๋ฅผ ๊ตฌ์ฑํ๋๊ฒ ์ข์์.
Pod์์ ํฌํจ๋์ด ์๋ ์ฆ, Work Node์์ ํฌํจ๋์ด ์๋ Service๋ฅผ ํ๋ํด์ ์ดํด๋ณผ๊ฒ์.
์ผ๋จ, Service์ Pod ๊ฐ๋
์ด ์กด์ฌํ๋๋ฐ, ์ด ๋ ์น๊ตฌ๋ K8s๊ฐ ์ฌ์ฉํ ์ ์๋ Object ๋๋ ์์(Resource)๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฐ๋
์ด๊ณ , Service๋ ๊ฐ๊ฐ์ Pod ๊ฐ์ Data๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก Network ๊ด๋ จ ์์
์ ์ฒ๋ฆฌํ๋ ์น๊ตฌ์์.
Pod๋ Container๋ค์ด Packaging ๋์ด ์๋ ์ต์ํ์ ๋จ์์ด๊ณ , Application๋ค์ด ๋ฌถ์ฌ ์๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ ๊ฑฐ ๊ฐ์์.
๐ฝ ์ค์นํ๊ธฐ
๐ฆ Kubernetes ์ค์น
Kubernetes ์ค์น ๋ฐฉ๋ฒ์ ๋ํด์๋ ์ด ๊ณณ์ ์ ๋ฆฌ๋ฅผ ํด ๋์์ด์.
์ฃผ๋ํ๋์ CentOS7์ ๊ฐ์ํ ์๋ฃจ์
์ ์ฌ๋ฆฌ๊ณ , ๊ทธ ๊ณณ์ 3๊ฐ์ Guest OS (CentOS 7)์ ์ฌ๋ ค Study ํ๊ฒฝ์ ๋ง๋ค์ด ์ฃผ์์ต๋๋ค.
๐ฆ Minikube ์ค์น
Minikube๋ Test ํน์ ๊ฐ๋ฐ์ฉ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ฒผ์ด ๋ชฉ์ ์ Kubernetes์์.
Minikube๋ฅผ ํตํด Kubernetes Cluster๋ฅผ ๋ณต์กํ๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์๋๋ผ, Docker Desktop ๋ฑ์ ์ด์ฉํด์ Sigle Cluster๋ก ๊ตฌ์ถ๋ ์ํ์ Kubernetes๋ฅผ ์ฌ์ฉํ ์ ์๋ ์น๊ตฌ์์.
Docker Desktop ์ค์ ์์ ์์ ๊ฐ์ด Enable Kubernetes๋ฅผ ํ์ฑํ ํด ์ค ๋ค Apply & Restart๋ฅผ ๋๋ฌ์ฃผ๋ฉด ์ค์น๊ฐ ์งํ๋ฉ๋๋ค.
์์ ๋ฐฉ๋ฒ์ Mac, Windows์์ ์ด์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด๊ณ , ํน์๋ CentOS์ ๊ฐ์ Linux ํ๊ฒฝ์์ ์ค์น๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด ์ด ๊ณณ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
Docker Desktop์์ Kubernetes ์ค์ ์ด ์๋ฃ๋ ๋ค ์์ ๋ช
๋ น์ด๋ฅผ ํตํด ์ฃผ๋ํ๋ Mac Book์ ์ด๋ค Node๊ฐ ์๋์ง ํ์ธ์ ํด ๋ณด์์ด์.
์์ ๊ฐ์ด Minikube๋ฅผ ์ด์ฉํ๋ฉด Single Cluster ๋ฐฉ์์ด๋ผ๊ณ ํ์์๋๋ฐ, ์ด๋ Master์ Worcker Node๋ฅผ ํ ๊ณณ์์ ์ด์ฉํ๋ค๋ ์๋ฏธ์์.
์ค์ ์ด์ ํ๊ฒฝ์์๋ ์์ ๊ฐ์ด ํ์ง ์์๊ฑฐ์์.
kubectl get pods
kubectl get deployments
kubectl get services
์ต์ด pods์ ๋ํ ๋ช
๋ น์ด๋ ํ์ฌ ๊ธฐ๋์ค์ธ pod ๋ชฉ๋ก์ ํ์ธํ๋ ๋ช
๋ น์ด์์.
์ฃผ๋ํ๋์ ํ์ฌ ๊ธฐ๋์ค์ธ Pod๋, deployment Object๊ฐ ์๋ ๊ฒ์ผ๋ก ํ์ธ์ด ๋์์ด์.
๐ฝ Kubernetes
๐ฆ ๊ธฐ๋ณธ ๋ช ๋ น์ด
์์ ๊ฐ์ด sample-nginx๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ์ฌ์ฉํ Image๋ฅผ nginx Image๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ํ ๋ค port๋ฅผ ์ค์ ํด ์ฃผ์์ด์.
์ด๋ ๊ฒ ํ๋ฉด pod(Kubernetes ์ต์ ๋จ์)๊ฐ ๋ง๋ค์ด์ง๋ ๊ฒ์ ์ ์ ์์ด์.
Kubernetes์ pod๊ฐ ํ๋ ๊ธฐ๋์ค์ธ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์์ READY์ ์ซ์๊ฐ ์๋ฏธํ๋ ๊ฒ์ ํด๋น Pod์์ Container ๊ฐ์ ์ฆ, ์ ์ ๊ธฐ๋์ค์ธ Container๊ฐ ๋ช ๊ฐ์ธ์ง๋ฅผ ๋ํ๋ด๋ ๊ฒ์ด์์.
์ผ๋ฐ์ ์ผ๋ก ํ ๊ฐ์ Pod์์๋ ํ๋์ Container๋ฅผ ๋ฃ์ด์.
์์ ๋ช
๋ น์ด๋ฅผ ํตํด pod์ ๋ํ ์์ธ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ด์.
ํด๋น pod๋ ํ์ฌ docker-desktop์ด๋ผ๋ Wocker Node์ ์ค์น๊ฐ ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๋ํ, Evnets์๋ ์ ์ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ด์.
๋ง์ฝ ๋ง๋ pod๋ฅผ ์ญ์ ํ๊ณ ์ถ์ ๋๋ ์๋ ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด ์ฃผ์๋ฉด ๋ฉ๋๋ค.
kubectl delete pod/{pod ์ด๋ฆ}
์์ ๊ฐ์ด pod๊ฐ ์ ๊ฑฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
Deployment๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ Pod๋ฅผ ๋ฆฌํ๋ฆฌ์นด ์ธํธ๋ผ๊ณ ํ์ฌ ์ฌ๋ฌ ๊ฐ์ ํํ๋ก ์ค์ผ์ผ ํด์ ๋ง๋ค๊ฑฐ๋, ์ค์ผ์ฅด๋ง, ํ์คํ ๋ฆฌ ์์
์ ํ ๋ ์ฌ์ฉํ ์ ์๋ ์ค์น ๊ฐ๋
์ด์์.
์์ ๊ฐ์ด deployment๋ฅผ ๋ง๋ค์ด ๋ณด์์ด์.
Deployment๋ pod๋ฅผ ๋ฐฐํฌํ๋ ๊ฐ๋
์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ ๊ฒ์ด์์.
Pod์ ์์ ๊ฐ๋
์ผ๋ก ๋ฐฐํฌ ๋จ์๋ฅผ Deployment ๊ฐ์ธ์ ๋ฐฐํฌํ๊ฒ ๋๋ฉด ์ค์ผ์ผ๋ง ์์
, ์ค์ผ์ฅด ์์
๋ฑ์ ํ ๋, ํจ์ฌ ํธํ๊ฒ ์์
ํ ์ ์๋ค๋ ์ด์ ์ด ์๋ต๋๋ค.
์์ ๊ฐ์ด Deployment๊ฐ ์ ๋๋ก ์์ฑ์ด ๋ ๊ฑธ ํ์ธํ ์ ์์ด์.
pod ๋ชฉ๋ก์ ์กฐํํด ๋ณด๋ฉด ์์ ๊ฐ์ด ์ฃผ๋ํ๋์ด ์ค์ ํ ์ด๋ฆ ๋ค์ Random ๊ฐ์ด ์ถ๊ฐ๊ฐ ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด ๋ง์ธ ์ฆ, ์ฃผ๋ํ๋์ด ๋ง๋ Deployment๋ pod๊ฐ ํ๋ ๋ฌถ์ฌ ์ ์์ ์ผ๋ก ์คํ๋๊ณ ์์์ ํ์ธํ ์ ์๋ ๊ฒ์ด์์.
์ด๋ฒ์๋ ํด๋น Pod๋ฅผ ๋ค์ ์ญ์ ํด ๋ณผ๊ฒ์.
๋ถ๋ช
ํ pod๋ฅผ ์ญ์ ํ์ง๋ง, ๋ค์ Pod ๋ชฉ๋ก์ ์กฐํํ์ ๋, Pod๊ฐ ๊ธฐ๋ ์ค ์ธ๊ฒ์ ํ์ธํ ์ ์์ด์.
ํ์ฌ ๊ธฐ๋์ค์ธ Pod๋ ์์์ ์ฃผ๋ํ๋์ด ์ญ์ ํ Pod๊ฐ ์๋ ๊ฒ์ ํ์คํด์.
์ด๊ฒ์ Deploymnet๋ก pod๋ฅผ ๋ฌถ์ด ์คํํ ๊ฒฝ์ฐ Deploymnet๋ ์ต์ ์ ์ง Pod ๊ฐ์๋ฅผ ๊ณ์ ์ ์งํ๋ ค๊ณ ํ๋ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ด์์.
๋ฐ๋ผ์ Pod์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด Deployment๋ฅผ ๋ง๋ค ๋, ์ ์ํ๋ ๊ฐ์๋งํผ์ ๋ฌด์กฐ๊ฑด Pod๋ฅผ ์ ์งํด์ค๋ต๋๋ค.
์ด๋ฒ์๋ Deployment์ ๋ํ Scale ์์
์ ํด ๋ณผ๊ฒ์.
์์ ๋ช
๋ น์ด๋ Deployment์์ ์ ์งํ๊ณ ์ ํ๋ Pod ๊ฐ์๋ฅผ ํ๋ ๋ ๋๋ ค์ฃผ๋ ๊ฒ์ด์์.
๋ค์ Pod ๋ชฉ๋ก์ ํ์ธํด๋ณด๋ Pod๊ฐ ํ๋ ๋ ์๊ธด๊ฒ์ ํ์ธํ ์ ์์ด์.
๐ก ์ฐธ๊ณ ์ฌํญ
Pod๋ Container๋ผ๊ณ ๋งํ ์ ์์ด์.
์๋ํ๋ฉด Pod์๋ Container๊ฐ ํ๋๊ฐ ๋ค์ด๊ฐ ์๋ ์๊ณ , ์ฌ๋ฌ ๊ฐ๊ฐ ๋ค์ด๊ฐ ์๋ ์๊ธฐ ๋๋ฌธ์ด์์.
์ด๋ฒ์ Deployment ๋ชฉ๋ก์ ํ์ธํด ๋ณด์์ด์.
READY์ 1/1์ด ์๋ 2/2๋ผ๊ณ ํ์๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด๋ 2๊ฐ์ Pod๋ฅผ ์ ์งํ ๊ฒ์ด๊ณ , 2๊ฐ์ Pod๊ฐ ์ ์ ์๋์ค์ด๋ผ๋ ์๋ฏธ์์.
Scaling ์์
์ ์ซ์๋ฅผ ๋๋ฆด ์๋ ์์ง๋ง, ์ค์ผ์๋ ์์ด์.
์์ ๊ฐ์ด Pod ๊ฐ์๊ฐ ํ๋ ์ค์ด๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์์ ๊ฐ์ด Deployment๋ฅผ ์ญ์ ํด ์ค ์๋ ์์ด์.
๐ฆ Script ๋ง๋ค์ด ๊ฐ์ง๊ณ ๋๊ธฐ
์ด๋ฒ์๋ ์์์ ๊ณต๋ถํ๋ ๋ด์ฉ์ Script๋ก ํ ๋ฐฉ์ ๋ง๋ค์ด์ ๊ฐ์ง๊ณ ๋
ธ๋ ๋ฐฉ๋ฒ์ ์์๋ณผ๊ฒ์.
GUI ํํ์ธ Text Editor๋ฅผ ํตํด ์์ฑํด๋ ๋์ง๋ง ์ฃผ๋ํ๋์ vim์ ํตํด CLI ํํ๋ก ์์ฑ์ ํด๋ณด๋ คํด์.
์์ yaml Script๋ ํฌ๊ฒ 4๊ฐ์ง Part๋ก ๊ตฌ๋ถ์ด ๋์ด ์๋ ๊ฒ์ด์์.
1. apiVersion
โ ์ด๋ค Object ์ฆ, Pod๋, Deployment๋ฅผ ๋ง๋ค ๊ฒ์ธ์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ฒ ์ผ๋, ์ผ๋ฐ์ ์ผ๋ก Pod, Deployment,
Service์ ๊ฒฝ์ฐ apps/v1์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ง์ด ์ฌ์ฉ.
2. kind
โ ๋ง๋ค๊ณ ์ ํ๋ Kubernetes Object ์ด๋ฆ ๋ช
์.
3. metadata
โ ์์ฑํ๋ Script์ ์ด๋ฆ, Labeling ์์
- Labeling์ ํด ์ค๋ค๋ฉด ์์ ๋กญ๊ฒ Key์ Value ํํ๋ก ์ง์ ์ ํ๊ณ , ๋ค๋ฅธ ์์์์ ํ์ฌ ๋ง๋ค๊ณ ์๋ ์์์ ์ ํํ์ฌ
์ฌ์ฉํ๊ฑฐ๋, ์ด๋ค ๊ฐ์ ๋ฐ์ํ ๋ ๋ฑ ์ฌ์ฉํ๊ธฐ ์ํด ์ง์ .
4. spec
โ kind ์ฆ, Kubernetes Object ๋ง๋ค ์์ฑ๋ฒ์ด ๋ฌ๋ผ์ง.
- Pod์ ๊ฒฝ์ฐ ์ด๋ค Container๋ฅผ ์ธ ๊ฒ์ธ์ง์ ๋ํด ์ ์.
- Deployment์ ๊ฒฝ์ฐ Deployment์ ํ์ํ Option ์ ์.
โ replicas:2 ๋ผ๊ณ ํ๋ฉด ์์ฑํ๊ณ ์ ํ๋ Deployment๋ ์ ์งํ๊ณ ์ ํ๋ Pod์ ๊ฐ์๋ฅผ 2๊ฐ๋ก ์ค์ .
โ selector(๋์ ์ ์) : ํ์ฌ ์์
ํ๊ณ ์ ํ๋ ๋์์ ๋ํด ์ด๋ค Lable์ ๋ช
์ํ ๊ฒ์ธ์ง ์ ์.
โ template: ์ค์ Deployment๋ฅผ ํตํด ๋ง๋ค๊ณ ์ ํ๋ Pod ๋ด์ฉ ์ ์.
- spec: containers: -name: ์ค์นํ๊ณ ์ ํ๋ Container์ด๋ฆ ์ ์ ๋ฐ ์ฌ์ฉํ๊ณ ์ ํ๋ Imate ์ ์.
- spec: containers: ports: Container๊ฐ ์ฌ์ฉํ Port ์ง์ .
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
์์ ๋ช
๋ น์ด๋ฅผ ํตํด Script๋ฅผ ๊ธฐ๋ ์์ผ ๋ณด์์ด์.
์ฐธ๊ณ ๋ก -f Options์ File์ด๋ผ๋ Option์ด๊ณ , Script File ๋ช
์ ๋ค์ ์ ๊ฒ ๋ค๋ ์๋ฏธ์์.
ํ์ฌ ์ฃผ๋ํ๋์ Mac Book์์ ๊ธฐ๋์ค์ธ Kubernetes์ Object ๋ชฉ๋ก๋ค์ ์ถ๋ ฅํด ๋ณด์์ด์.
๐ก ์ฐธ๊ณ ์ฌํญ
Pod ์ ๋ณด๋ฅผ ์ข ๋ ์์ธํ๊ฒ ํ์ธํ๊ณ ์ถ๋ค๋ฉด ์์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉ.
Pod์ ์ ์ํ๊ณ ์ ํ ๋๋ Docker์์ exec -it ๋ช
๋ น์ด๋ฅผ ํตํด ์ ๊ทผํ๋ฏ์ด ๋น์ทํ ๋ช
๋ น์ด๋ก Pod์ ์ ์ํ ์ ์์ด์.
๐ก ์ฐธ๊ณ ์ฌํญ
exec -it Option
i : Interactive
t : tty
Keyboard ์์ ์ ๋ ฅํ ๊ฐ์ Terminal์ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ Option
์ ์๋ Pod์ OS๋ Debian ๊ณ์ด์ Linux ์ธ ๊ฒ์ ํ์ธํ ์ ์์ด์.
apt๋ฅผ ํตํด ๋ช๊ฐ์ง Tool์ ๋ด๋ ค๋ฐ๊ธฐ ์ํด ์ต์ ํ๋ฅผ ํด์ฃผ์์ด์.
apt๋ฅผ ํตํด curl๊ณผ wget์ ๋ด๋ ค๋ฐ๊ธฐ ํด ์ฃผ์์ด์.
ํด๋น Pod์ IP๋ฅผ ํ์ธํ๊ณ , Nginx๊ฐ ์ ์ ์๋์ค์ธ์ง๋ฅผ curl Tool์ ํตํด ํ์ธํด ๋ณด์์ด์.
ํ์ฌ ์ฃผ๋ํ๋์ Mac Book์ผ๋ก ์์ Pod์ http๋ก ์ ์์ ํ๊ฒ ๋๋ฉด ์ฐ๊ฒฐ์ด ๋์ง ์์๊ฑฐ์์.
์ ์์ ํด๋ณด๊ธฐ ์ํด ์์ ๊ฐ์ด Port Forwarding ์์
ํด์ฃผ๊ณ , Port๋ฅผ 80์ผ๋ก ์ด์ด์ฃผ์์ด์.
service ๋ชฉ๋ก์ ํ์ธํด ๋ณด๋ nginx-deployment๊ฐ ์ธ๋ถ์์๋ 30127๋ก ๋ด๋ถ์์๋ 80์ผ๋ก Port Forwarding๋ ๊ฒ์ ํ์ธ ํ ์ ์์ด์.
์์ ๊ฐ์ด Mac Book ๋ธ๋ผ์ฐ์ ๋ก ์ ์ํ ์ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
Deploymenet๋ฅผ ์ผ๋จ, ์ญ์ ํด ์ฃผ์์ด์.
๋ํ ํด๋น Service๋ ์ญ์ ํด ์ฃผ์์ด์.
apiVersion: apps/v1
kind: Deployment
metadata:
name: cicd-deployment
spec:
selector:
matchLabels:
app: cicd-devops-project
replicas: 2
template:
metadata:
labels:
app: cicd-devops-project
spec:
containers:
- name: cicd-devops-project
image: edowon0623/cicd-project-ansible
imagePullPolicy: Always
ports:
- containerPort: 8080
์ผ๋จ! ์์ ๊ฐ์ด ๋ ๋ค๋ฅธ yml File์ ๋ง๋ค์ด ์ฃผ์์ด์.
apiVersion: v1
kind: Service
metadata:
name: cicd-service
labels:
app: cicd-devops-project
spec:
selector:
app: cicd-devops-project
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 32000
๊ทธ๋ฐ ๋ค ์์ ๊ฐ์ด service Object๋ฅผ ๋ง๋ค์ด ์ฃผ์๋๋ฐ, Deployment๋ก ๋ง๋ Ansible์ ์ธ๋ถ์์ ์ด์ฉํ๊ฒ ํ๊ธฐ ์ํจ์ด์์.
์์ Script ์ค ์ค์ํ ๋ถ๋ถ์ ๋ด๋ถ 8080 Port๋ฅผ ์ธ๋ถ 8080์ผ๋ก Port Forwarding ํ๋ ๋ถ๋ถ์ด์์.
์ค์ Node์ ์ ์ํ ๋๋ 32000 Port๋ฅผ ์ด์ฉํ๊ฒ ๋ค๊ณ ์ถ๊ฐ ํด ์ฃผ์์ต๋๋ค.
์ ๋๊ฐ์ง Script๋ฅผ ์๋์์ผ ๋ณด๋๋ก ํ ๊ฒ์.
์์ ๊ฐ์ด deployment๋ฅผ ๋จผ์ ์์ฑํด ์ฃผ์์ด์.
๋ง์ฝ READY๊ฐ 0/2 ๋ฑ๊ณผ ๊ฐ์ด ๋น์ ์์ ํ์๊ฐ ๋๋ค๋ฉด Image๋ฅผ ๋ด๋ ค๋ฐ๊ณ , Pod๋ฅผ ๋ง๋๋๋ผ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ด์์.
Pod ๋ค์ด ์ ์๊ฒจ๋ ๊ฑธ ํ์ธํ ์ ์์ด์.
๋ง์ฝ ์์ ๊ฐ์ด Error๊ฐ ๋ฐ์ํ๋ค๋ฉด yml ๋ค์ฌ์ฐ๊ธฐ๋, ์คํ๊ฐ ์๋์ง ํ์ธํ ํ์๊ฐ ์๋ ๊ฒ์ด์์.
์์ ๊ฐ์ด Service Object๊ฐ ๋ง๋ค์ด์ง๋ Script๋ฅผ ๊ธฐ๋ํด ์ฃผ์์ด์.
Service Object ๋ชฉ๋ก์ ํ์ธํด ๋ณด์๋๋ ์์ ๊ฐ์ด cicd-service๊ฐ NodePort Type์ผ๋ก Port Forwarding๊น์ง ์๋ฒฝํ๊ฒ ๋ ๊ฒ์ ํ์ธ ํ ์ ์์ด์.
์์ ๊ฐ์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ด ์ ์ Docker์ Jenkins ์ฐ๋์ ๊ณต๋ถํ๋ฉด์ ๋ง๋ค์ด๋์๋ Docker Image๊ฐ ์ ์์ ์ผ๋ก ์ ๋ฐ์์ ์ก๊ณ , Container๋ก ์ ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๐ฝ Kubernetes์ Ansible
๐ฆ ์ฐ๋
์ด๋ฒ ์์
์ ์ด ์ ์ CentOS7์ ๊ฐ์ํ CentOS7์ Kubernetes Master๋ฅผ ์ฌ๋ฆฐ ๊ณณ์์ ์์
์ ํด๋ณด๋ ค๊ณ ํด์.
CentOS7์ Kubernetes๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ์ด ๊ณณ์ ์ ์ฑ์ค๋ฝ๊ฒ ์ค๋นํด ๋์์ด์.
์ด๋ฒ์๋ ์ด ์ ์๊ฐ์ ๊ณต๋ถ ํ๋ Ansible์ ์ด์ฉํด์ Kubernetes์ ์ ์ํ ๋ค Playbook์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถํด ๋ณด๋ ค๊ณ ํด์.
Jenkins๋ฅผ ํตํด Ansible์ ssh๋ฅผ ์ด์ฉํ์ฌ Ansible์ Playbook์ด ๋์ํ๋ ๋ช
๋ น์ด๋ฅผ ์ ๋ฌํ๊ณ , ํด๋น Playbook์ ์ด์ฉํ์ฌ Kubernetes Cluster์ ๋ช
๋ น์ด๋ฅผ ์ ๋ฌํด ๋ณด๋ ค๊ณ ํด์.
ํน์ Jenkins์์ ๋ฐ๋ก Kubernetes ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด์ Cluster์ ๋ช
๋ น์ด๋ฅผ ์ ๋ฌํ ์๋ ์์ด์.
๋จผ์ ์ฃผ๋ํ๋์ Ansible Server์์ k8s-master Server๋ก ssh ์ ์ Test๋ฅผ ์งํํด ๋ณด์์ด์.
์ฐธ๊ณ ๋ก ํ์ฌ Ansible์ ์ฃผ๋ํ๋์ Synology NAS Docker๋ก ๊ตฌ์ฑ๋์ด ์๊ณ , Kubernetes Master Server๋ Laptop์ CentOS7์ ์ฌ๋ฆฌ๊ณ , ๊ทธ ์์ ๊ฐ์ ๋จธ์ ์ผ๋ก CentOS7์ ๋ค์ ์ฌ๋ ค์ ๊ตฌ์ฑ์ ํด ๋จ๊ธฐ ๋๋ฌธ์ VPN์ ํตํด ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ๊ตฌ์ฑ์ ํ๊ณ ์งํํ๊ณ ์์ด์.
Ansible Server์ Root Directory์์ K8s๋ผ๋ Directory๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
k8s Directory์ hosts๋ผ๋ File์ ๋ง๋ค์ด์ฃผ๊ณ , ์์ ๊ฐ์ด K8s-master ์ ๋ณด๋ฅผ ์ ์ํด ์ฃผ์์ด์.
์ด๋ฒ์๋ Ansible Server์์ k8s๋ก ํธ๋ฆฌํ๊ฒ ์ ์ํ๊ธฐ ์ํด SSH ๊ณต๊ฐํค๋ฅผ ๋ง๋ค์ด์ ์ ๋ฌํด ์ฃผ์์ด์.-
Ansible hosts๋ก ๋ฑ๋กํ Kubernetes Group์ Kuberntest Master Node์ Ping Test๋ฅผ ์งํํด ๋ณด์์ด์.
- name: Create pods using deployment
hosts: kubernetes
# become: true
# user: ubuntu
tasks:
- name: create a deployment
command: kubectl apply -f cicd-devops-deployment.yml
๋จผ์ Ansible Server์์ Kubernetes ๋์์ ์ ์ํ Playbook Script๋ฅผ ์์ ๊ฐ์ด ๋ง๋ค์ด์ฃผ์์ด์.
์์์ ๋ง๋ hosts File์ ์ ์๋ kubernetes Group์ ๋ฑ๋ก๋ Server์๊ฒ cicd-devops-deployment ๋ผ๋ yaml Script๋ฅผ ๊ธฐ๋ํ๋๋ก ๋ง๋ Script์์.
apiVersion: apps/v1
kind: Deployment
metadata:
name: cicd-deployment
spec:
selector:
matchLabels:
app: cicd-devops-project
replicas: 2
template:
metadata:
labels:
app: cicd-devops-project
spec:
containers:
- name: cicd-devops-project
image: junyharang/cicd-project-ansible
imagePullPolicy: Always
ports:
- containerPort: 8080
์ด๋ฒ์๋ Kubernetes Master Server์ Deployment๋ฅผ ์์ฑํ๋ yml Script๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
์์ ๊ฐ์ด playbook Script๋ฅผ ๊ธฐ๋์์ผ ์ฃผ๋ ์ ์์ ์ผ๋ก ์์
์ด ๋์๋ค๊ณ ๋์์ด์.
Kubernetes Master Server์์ Pod์ Deployment ๋ชฉ๋ก์ ์กฐํํด ๋ณด๋ ์์ ๊ฐ์ด pod 2๊ฐ๊ฐ ๋ง๋ค์ด์ง ๊ฑธ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ Kubernetes Service Object๋ฅผ ๋ง๋ค playbook Script๋ฅผ ์์ ๊ฐ์ด ๋ง๋ค์ด ์ฃผ์์ด์.
Kubernetes Server์์ ์์ ๊ฐ์ด Service Object์ ๋ํ Script๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
์์ Script๋ฅผ ๊ธฐ๋ํ๊ธฐ ์ Kubernetes Master Server์์ Service ๋ชฉ๋ก์ ์กฐํํด ๋ณด์์ด์.
Ansible Server์์ Service Object ๊ด๋ จ Script๋ฅผ ๊ธฐ๋์์ผ ์ฃผ์์ด์.
Kubernetes Master Server์์ Service ๋ชฉ๋ก์ ๋ค์ ์กฐํํด ๋ณด๋ ์์ ๊ฐ์ด cicd-service๋ผ๋ ๊ฒ์ด ์๊ธด ๊ฒ์ ํ์ธํ ์ ์์ด์.
์์ ๊ฐ์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด์๋ ์ ์๋๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๐ฝ Kubernetes์ Jenkins
๐ฆ ์ฐ๋
์ฃผ๋ํ๋์ Kubernetes์ Ansible ์ฐ๋์์ ์ด ์ ์ CentOS 7์ ๊ฐ์ํ๋ก CentOS7์ ์ฌ๋ฆฌ๊ณ , ๊ทธ ๊ณณ์ ๋ง๋ค์๋ Kubernetes Master๋ฅผ ์ด์ฉํ์๋๋ฐ, ์ด๋ฒ์๋ ์ฃผ๋ํ๋์ Mac Book์์ Docker Desktop์ ํตํด MiniKube๋ฅผ ์ด์ฉํ ๋ฐฉ์์ผ๋ก ์์
์ ํด๋ณด๋๋ก ํ ๊ฒ์.
์ด๋ฒ์๋ Ansible์ ์ด์ฉํ์ง ์๊ณ , Jenkins์์ ๋ฐ๋ก Kubernetes ์ ์ด๊ฐ ๊ฐ๋ฅํ์ง ๊ณต๋ถํด๋ณด๋ ค๊ณ ํด์.
์์
์ ์์ํ๊ธฐ ์ ์์์ ์งํํด์ ๋ง๋ค์ด์ง ๋ด์ฉ์ ๋ชจ๋ ์ญ์ ๋ฅผ ํด ์ฃผ์์ด์.
์์ ๊ฐ์ด Jenkins ์์คํ
์ค์ ์์ SSH Server๋ฅผ ํ๋ ๋ ์ถ๊ฐํด ์ค๊ฒ์.
์ด ๊ณณ์์ Kubernetes Master์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ์
ํด ์ค ๊ฒ์ด์์.
์ฃผ๋ํ๋์ Mac Book์ Minikube๋ฅผ ๊ตฌ์ฑํ์๊ณ , ์ด๊ฒ์ ํตํด Test๋ฅผ ํ ๊ฒ์ด์์.
๊ทธ๋์ username์ ์ฃผ๋ํ๋์ด Mac Book Login ์์ ์ฌ์ฉํ๋ ๊ณ์ ์ ์
๋ ฅํด ์ฃผ์๊ณ , Mac Book์ IP๋ฅผ Hostname์ ์
๋ ฅํด ์ฃผ์์ด์.
Remote Directory๋ ํ์ฌ ์ฃผ๋ํ๋์ด Mac Book์์ ๊ด๋ จ ์์
์ ์ฒ๋ฆฌํ๋ Directory๋ก ์ง์ ํด์ฃผ์์ด์.
์ฌ๊ธฐ๊น์ง ์์ฑ ๋์์ผ๋ฉด '๊ณ ๊ธ'์ ๋๋ฌ์ค๋๋ค.
์์ use password ... Check Box๋ฅผ ํ์ฑํ ํ ๋ค Password์ ์ฃผ๋ํ๋ Mac Book ๊ณ์ ์ธ junyss์ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํด ์ฃผ์์ด์.
Port๋ Minikube๊ฐ ์ค์น๋ PC์ ssh Port ๋ฒํธ ํน์ Kubernetes Master ssh Port ๋ฒํธ๋ฅผ ์
๋ ฅํด ์ฃผ๊ณ , Test Configuration Button์ ๋๋ฌ Success๊ฐ ๋จ๋์ง ํ์ธํด ์ค๋๋ค.
Apply๋ฅผ ๋๋ฅด๊ณ , Save๋ฅผ ๋๋ฌ ํด๋น ์ฐฝ์ ๋น ์ ธ๋์์ด์.
์ด๋ฒ์ Item์ ํ๋ ๋ง๋ค์ด ๋ณผ๊ฒ์.
Item ์ด๋ฆ์ ์ค์ ํ๊ณ , ์ด ์ ์ ์์
ํ์๋ Ansible ์ค์ ์ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด ์์ ๊ฐ์ด ํ ๋ค 'OK'๋ฅผ ๋๋ฌ์ฃผ์์ด์.
๋น๋ ํ ์กฐ์น์์ SSH Publishers์ SSH Server๋ฅผ ์์์ ์ค์ ํ๋ mac-minikube๋ก ์ ํ์ ํด ์ฃผ์์ด์.
์์ง Github์ ์๋ ์ฝ๋๋ฅผ ์ธ ๊ฒ์ ์๋๋ผ์ Source files์ ์ค์ ์ ํฌ๊ฒ ์ค์ํ์ง ์์ ๊ฒ์ด์์.
Minikube๊ฐ ์ค์น๋ Mac Book์ ์์
Directory Path๋ฅผ ์ ๋ ๊ฒฝ๋ก๋ก Remote directory์ ์ ์ด์ฃผ๊ณ ,
Exec command์ kubectl์ ์ด์ฉํด์ Script๊ฐ ์๋๋๊ฒ ํด ์ฃผ์์ด์.
๋ช
๋ น์ด์์ Kubectl ๋ช
๋ น์ด๊ฐ ์์นํ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์
๋ ฅํด ์ฃผ์๋๋ฐ, Mac Book, Windows ๋ฅผ ํตํ Minikube ์ฌ์ฉ์์๋ ์ ๋ ๊ฒ ํ์ง ์์ผ๋ฉด Error๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋ ๊ฒฝ๋ก๋ก ์ ์ด์ฃผ๋ ๊ฒ์ด ์ข์์.
๐ก ์ฐธ๊ณ ์ฌํญ
Mac OS kubectl ์์น
Build๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ ๋์์ด์.
Minikube๊ฐ ์ค์น๋ Mac Book์์ ํ์ธํด๋ณด๋ ์์ ๊ฐ์ด Pod์ Deployment๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ Jenkins์ Ansible ๊ทธ๋ฆฌ๊ณ , Kubernetes ๋ชจ๋๋ฅผ ์ด์ฉํ๋ ์์
์ ํด ๋ณผ๊ฒ์.
์ต์ด Item ํ๋๋ฅผ ๋ง๋ค์ด์ค๊ฒ์.
์ด๋ฒ์๋ ๋น๋ ํ ์กฐ์น์์ ์์ ๊ฐ์ด ์ด ์ ์ ๋ง๋ค์๋ ansible-host๋ฅผ ์ ํํด ์ฃผ์์ด์.
Exec command ๋ถ๋ถ์๋ play book์ ๊ธฐ๋ํ๋ ๋ช
๋ น์ด๋ฅผ ์์ฑํด ์ฃผ์๋๋ฐ, -u Option์ ๋์ Server ์ฌ๊ธฐ์๋ ์ฃผ๋ํ๋์ Mac Book์ด๊ณ , ํด๋น Server์ ๊ณ์ ์ ์
๋ ฅํด ์ฃผ๋ฉด ๋์.
๋ง์ฝ root๋ผ๋ฉด ์๋ต ๊ฐ๋ฅํฉ๋๋ค.
Apply๋ฅผ ๋๋ฅธ ๋ค ์ ์ฅ์ ํด์ ํด๋น ์ฐฝ์ ๋์์ค๊ฒ์.
๊ทธ๋ฐ ๋ค Build ์์
์ ํด ์ฃผ์์ด์.
์์
์ด ์คํจ ํ์์ด์.
์ด ๋ฌธ์ ๋ Ansible Server์ IP๊ฐ ๋ฐ๋์ด์ ๋ฐ์๋ ๋ฌธ์ ์์. ์์ ํฐ๋ฏธ๋์์ ifconfig๋ฅผ ํ์์ ๋, eth0์ IP๊ฐ 172.17.0.5์ด์ง๋ง, Jenkins์ ์ค์ ๋ IP ์ฃผ์๋ 172.17.0.6์ธ ๊ฒ์ ํ์ธ ํ ์ ์์ด์.
Jenkins์ ์ค์ IP๋ฅผ 5๋ก ๋ฐ๊พธ์ด ์ค๊ฒ์.
๋ณ๊ฒฝ ๋ค Test๊น์ง ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋์์ด์.
์ถ๊ฐ์ ์ผ๋ก service Object ์์
์ ๋ํ Script ๋ช
๋ น์ด๋ฅผ ์์ ๊ฐ์ด ์์ฑํด ์ฃผ์์ด์.
๐ฆ ์ ์ฒด CI/CD ์๋ํ Process ๊ตฌ์ฑ
CI(Continuous Integration)๋ ์ง์์ ์ธ ํตํฉ์ด๋ผ๋ ๋ป์ผ๋ก ํ์ ๊ด๋ฆฌ ์๋ฃจ์
์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ Code๋ฅผ Push ์ฆ, ์ฌ๋ฆฌ๊ฒ ๋๋ฉด ํ๊ฒฝ์ ๋ง์ถ์ด Build๋ฅผ ํ๋ฉด์ ํ์์ ๋ฐ๋ผ Unit Test(๋จ์ ํ
์คํธ)๋ฅผ ํ๊ฒ ๋ ๊ฒ์ด๊ณ , ์ด์์ด ์๋ค๋ฉด Packaging File์ ๋ง๋ค๊ฒ ๋ ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค ๋ฐฐํฌํ๊ณ ์ ํ๋ Server์ ๋ฐฐํฌ๋ฅผ ํ๊ฒ ๋ ๊ฒ์ด์์.
์ฌ๊ธฐ๊น์ง ์์
์ CI๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด์์.
CD(Continuous Delivery & Continouos Deployment)์ ์ง์์ ๋ฐฐํฌ
๐ฝ Jenkins๋ฅผ ์ด์ฉํ CI/CD ์๋ํ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
๐ฆ ์ฒซ๋ฒ์งธ ์ด์ผ๊ธฐ
- hosts: all
# become: true
tasks:
- name: create a docker image with deployed war file
command: docker build -t junyharang/cicd-project-ansible .
args:
chdir: /root
- name: push the image on Docker Hub
command: docker push junyharang/cicd-project-ansible
ignore_erros: yes
- name: remove the docker image from the ansible server
command: docker rmi junyharang/cicd-project-ansible
ignore_errors: yes
์ต์ด ์ด ์ ์ Ansible์์ ๋ง๋ค์ด ๋์๋ Docker image๋ฅผ ์์ฑํ๋ Script๋ฅผ ์ด์ฉํ ๊ฒ์ด์์.
๋ํ ์ด ์ ์ ๋ง๋ค์ด ๋์๋ Dockerfile์ ์ด์ฉํ ๊ฒ์ธ๋ฐ, ์ฌ๊ธฐ์์ ์ฃผ๋ํ๋์ tomcat์ด ์๋ Nginx๋ฅผ ์ด์ฉํ๋๋ก ์์ ์ ํด ์ฃผ์์ด์.
ํ์ฌ ์ฃผ๋ํ๋ Mac Book์์ ๊ธฐ๋์ค์ธ pod์ deployment๋ฅผ ํ์ธํด ์ฃผ์๊ณ , ๋ชจ๋ ์ญ์ ๋ฅผ ํด ์ฃผ์์ด์.
Jenkins์์ ์์ ๊ฐ์ด Item์ ํ๋ ์์ฑํด ์ฃผ์์ด์.
์์ ํ ๋ถ๋ถ์ Exec command ๋ถ๋ถ์ธ๋ฐ, image๋ฅผ ๋ง๋๋ Script๋ฅผ ์คํ๋๊ฒ ํ๊ณ , ์ค์ง Ansible Server์์๋ง ์๋๋๊ฒ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด ์ฃผ์์ด์.
์ ์ฅํ๊ณ ํด๋น ์ฐฝ์ ๋๊ฐ์ค ๋ค Build๋ฅผ ์งํํด ๋ณด์์ด์.
์ด๋ฒ์๋ ์์
์ด ์คํจํ์์ด์. ์ญ์ ํ๋ฒ์ ์๋ฃ๋๋ฉด ์ฌ๋ฏธ๊ฐ ์๋ ๊ฒ์ด์์.
์ด ๋ฌธ์ ๋ฅผ ์์๋ณด๊ธฐ ์ํด Ansible Server์์ ์ง์ Jenkins์ ์
๋ ฅํ๋ ๋ช
๋ น์ด๋ฅผ ์คํํด ๋ณด๊ธฐ๋ก ํ์์ด์.
๋ง์ฝ ์์ ๊ฐ์ด Error๊ฐ ๋์จ๋ค๋ฉด yml์ ๋ฌธ๋ฒ์ด ํ๋ฆฐ ๊ฒ์ด์์.
์์ ๊ฐ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์๋์ฒ๋ผ ํด๊ฒฐํ ์ ์์ด์.
Ansible ์๊ธฐ ์์ ์๊ฒ ssh ์ ์ ์ ๊ณ์ ๋ฑ์ ๋ฌป์ง ์๊ฒ ํ๊ธฐ ์ํด SSH ๊ณต๊ฐํค๋ฅผ ์ ์ฅํด ๋๊ณ , ์งํํ๋๋ ์ฑ๊ณตํ์์ด์.
Docker Hub์๋ ์ ์์ ์ผ๋ก Update ๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
CI ์์
์ ์ ์์ ์ผ๋ก ๋์ด ๋ฌ๋ค๊ณ ํ๋จํ๊ณ , ์ด์ CD ์์
์ ์งํํ๋๋ก ํ ๊ฒ์.
Jenkins์ Item ์ค์ ์์ '๋น๋ ํ ์กฐ์น ์ถ๊ฐ' Button์ ๋๋ฌ์ฃผ์ธ์.
๊ทธ๋ฐ ๋ค Build other projects๋ฅผ ๋๋ฌ์ฃผ์ธ์.
์ด๊ฒ์ Build๊ฐ ์๋ฃ๋ ๋ค์ ์ด๋ค Project๋ฅผ ์ถ๊ฐ๋ก ์ฐ๊ณํ ๊ฒ์ธ์ง ์ ํํ๋ ๊ณณ์ด์์.
Projects to build์ ์ด ์ ์ ๋ง๋ค์๋ Ansible์ ์ด์ฉํ kubernetes ์ฐ๋ Project๋ฅผ ์ ํํด ์ฃผ์์ด์.
์ด ์ด์ผ๊ธฐ๋ ํ์ฌ Project๊ฐ ์ ์์ ์ผ๋ก ๋๋๋ฉด 'Junyharang-k8s-Porject-Using-Ansible' ์ด๋ผ๋ Project๋ฅผ ์ถ๊ฐ๋ก ์คํํด ๋ฌ๋ผ๋ ๊ฒ์ด์์.
์์ ๊ฐ์ด ์ค์ ํ๊ณ , ์ ์ฅ์ ํ ๋ค ํด๋น ์ฐฝ์ ๋์์ด์.
๊ทธ๋ฐ ๋ค Build๋ฅผ ์คํํด ์ฃผ์์ด์.
์์ ๊ฐ์ด ์ ์ ์๋ ํ์์ด์.
Docker Image๋ Docker Hub์ ์ ์ฌ๋ผ์ ์ฃผ์์ด์.
Code 15๋ฒ์ Version์ 1.5๋ก ๋ณ๊ฒฝํ๊ณ , Git์ Pushํด์ ์๋์ผ๋ก CI / CD๊ฐ ์ด๋ค์ง๋์ง ํ์ธํด ๋ณผ๊ฒ์.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."