5๋
๋ฐ ์ ์ธ 2018๋
XNUMX์ XNUMX์ผ, Google์ CI/CD์ฉ ์คํ ์์ค ํ๋ก์ ํธ์ ์ฒซ ๋ฒ์งธ ์ํ ๋ฒ์ ์ธ
NB: ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์ฐ๋ฆฌ๋ ์ด๋ฏธ Skaffold์ ๋ํด ์ ๋ฐ์ ์ผ๋ก ๊ฐ๋ตํ๊ฒ ์ด์ผ๊ธฐํ์ต๋๋ค.
์ด๋ก . ๋ชฉ์ ๊ณผ ์ญ๋
๋ฐ๋ผ์ ์ผ๋ฐ์ ์ผ๋ก Skaffold๋ CI/CD ์ฃผ๊ธฐ(๋น๋, ํธ์, ๋ฐฐํฌ ๋จ๊ณ) ์๋ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ๊ฐ๋ฐ์์๊ฒ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. Kubernetes ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์ ๋ฐ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํํ๋ก ํ์ ์ฝ๋ ๋ณ๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์ ์ํ๊ฒ ์์ ํ๋ ๊ธฐ๋ฅ. ๋ํ ๋ค์ํ ํ๋ก(๊ฐ๋ฐ, ๋จ๊ณ, ํ๋ก๋์ ...)์์ ์๋ํ ์ ์์ผ๋ฉฐ, Skaffold๋ ์ถ์๋ฅผ ์ํ ํด๋น ํ์ดํ๋ผ์ธ์ ์ค๋ช ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Skaffold์ ์์ค ์ฝ๋๋ Go๋ก ์์ฑ๋์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ๊ณผ ํน์ง์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฒซ ๋ฒ์งธ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- Skaffold๋ CI/CD ํ์ดํ๋ผ์ธ ์์ฑ์ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ค ์ฝ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ฝ๋๋ฅผ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ก ์กฐํฉํ๊ณ ์ด๋ฌํ ์ด๋ฏธ์ง๋ฅผ Docker ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์ํ๊ณ Kubernetes ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ๋ ์๋ํ๋ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
- ์ ์ฅ์์ ํ์ผ์ ์ปจํ ์ด๋์ ์์ ๋๋ ํฐ๋ฆฌ์ ๋๊ธฐํํฉ๋๋ค.
- ์ปจํ ์ด๋ ๊ตฌ์กฐ ํ ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ํ ์คํธํฉ๋๋ค.
- ํฌํธ๋ฅผ ์ ๋ฌํฉ๋๋ค.
- ์ปจํ ์ด๋์์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๊ทธ๋ฅผ ์ฝ์ต๋๋ค.
- Java, Node.js, Python, Go๋ก ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ฒ๊น ์ ๋์์ด ๋ฉ๋๋ค.
์ด์ ๊ธฐ๋ฅ์ ๋ํด:
- Skaffold ์์ฒด์๋ ํด๋ฌ์คํฐ ์ธก ๊ตฌ์ฑ์์๊ฐ ์์ต๋๋ค.. ์ฆ, ์ด ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Kubernetes๋ฅผ ์ถ๊ฐ๋ก ๊ตฌ์ฑํ ํ์๊ฐ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ๋ค์ํ ํ์ดํ๋ผ์ธ. ๊ฐ๋ฐํ๋ ๋์ ๋ก์ปฌ Minikube์ ์ฝ๋๋ฅผ ๋กค์์ํ ๋ค์ ์คํ
์ด์ง ๋๋ ํ๋ก๋์
์ผ๋ก ๋กค์์ํด์ผ ํฉ๋๊น? ์ด๋ฅผ ์ํด ๋ค์์ด ์์ต๋๋ค.
ะฟัะพัะธะปะธ ๊ทธ๋ฆฌ๊ณ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ๋ค์ํ ํ์ดํ๋ผ์ธ์ ์ค๋ช ํ ์ ์๋ ์ฌ์ฉ์ ๊ตฌ์ฑ, ํ๊ฒฝ ๋ณ์ ๋ฐ ํ๋๊ทธ๊ฐ ์์ต๋๋ค. - CLI. YAML์ ์ฝ์ ์ ํธ๋ฆฌํฐ ๋ฐ ๊ตฌ์ฑ๋ง ๊ฐ๋ฅํฉ๋๋ค. ์ธํฐ๋ท์์ ์ฐฝ์ ์๋์ ๋ํ ์ฐธ๊ณ ์๋ฃ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์คํ์ ์ธ GUI ๊ทธ๋ฌ๋ ํ์ฌ ์ด๊ฒ์ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๋ฅผ ํ์๋ก ํ๋ค๋ ๊ฒ์ ์๋ฏธํ ๊ฐ๋ฅ์ฑ์ด ๋์ง๋ง ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์์ต๋๋ค. - ๋ชจ๋์ฑ. Skaffold๋ ๋ ๋ฆฝํ ์ํ๊ธฐ๊ฐ ์๋์ง๋ง ํน์ ์์ ์ ๊ฐ๋ณ ๋ชจ๋์ด๋ ๊ธฐ์กด ์๋ฃจ์ ์ ์ฌ์ฉํ๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค.
ํ์์ ์์:
- ์กฐ๋ฆฝ ๋จ๊ณ์์ ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- docker๋ kaniko๋ฅผ ์ฌ์ฉํ๋ ํด๋ฌ์คํฐ ๋๋ Google Cloud Build์์ ๋ก์ปฌ๋ก ๋น๋ํฉ๋๋ค.
- ๋ก์ปฌ๋ก Bazel;
- ๋ก์ปฌ๋ก ๋๋ Google Cloud Build์์ Jib Maven ๋ฐ Jib Gradle
- ์ฌ์ฉ์ ์ ์ ๋น๋ ์คํฌ๋ฆฝํธ๋ ๋ก์ปฌ์์ ์คํ๋ฉ๋๋ค. ๋ค๋ฅธ(๋ ์ ์ฐํ๊ณ ์น์ํ...) ๋น๋ ์๋ฃจ์
์ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ Skaffold๊ฐ ์ด๋ฅผ ์์ํ ์ ์๋๋ก ์คํฌ๋ฆฝํธ์ ์ค๋ช
๋์ด ์์ต๋๋ค(
๋ฌธ์์ ์ ). ์ด๋ฅผ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถํ ์ ์๋ ๋ชจ๋ ์์ง๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํ
์คํธ ๋จ๊ณ์์๋ ์ด๋ฏธ ์ธ๊ธํ
์ปจํ ์ด๋ ๊ตฌ์กฐ ํ ์คํธ ; - ๋ฐฐํฌ๋ฅผ ์ํด ๋ค์์ด ์ ๊ณต๋ฉ๋๋ค.
- Kubectl;
- ์ง๋ฐฐ;
- ์ฌ์ฉ์ ์ ์.
๋๋ถ์ Skaffold๋ ๋ ํนํ ์ ํ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. CI/CD ๊ตฌ์ถ์ ์ํ ํ๋ ์์ํฌ. ๋ค์์ ์ด๋ฅผ ์ฌ์ฉํ ๋์ ์์ ์ํฌํ๋ก์ ๋๋ค(ํ๋ก์ ํธ ๋ฌธ์ ์ฐธ์กฐ).
Skaffold์ ์์
์ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ๋ชจ์ต์ธ๊ฐ์?
- ์ ํธ๋ฆฌํฐ๋ ์์ค ์ฝ๋ ๋๋ ํฐ๋ฆฌ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ํ์ผ์ด ์์ ๋๋ฉด Kubernetes ํด๋ฌ์คํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ํฌ๋์ ๋๊ธฐํ๋ฉ๋๋ค. ๊ฐ๋ฅํ๋ค๋ฉด ์ด๋ฏธ์ง๋ฅผ ์ฌ์กฐ๋ฆฝํ์ง ์๊ณ ์งํํ์ธ์. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ์ด๋ฏธ์ง๊ฐ ์กฐ๋ฆฝ๋ฉ๋๋ค.
- ์กฐ๋ฆฝ๋ ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋ ๊ตฌ์กฐ ํ ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธ๋๊ณ ํ๊ทธ๊ฐ ์ง์ ๋์ด Docker ๋ ์ง์คํธ๋ฆฌ๋ก ์ ์ก๋ฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ์ด๋ฏธ์ง๊ฐ ๋ฐฐํฌ๋ฉ๋๋ค(Kubernetes ํด๋ฌ์คํฐ์ ๋ฐฐํฌ๋จ).
- ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์คํ์ด ์ด๊ธฐํ๋ ๊ฒฝ์ฐ
skaffold dev
, ๊ทธ๋ฌ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ก๊ทธ ์์ ์ ์์ํ๊ณ Skaffold๋ ๋ณ๊ฒฝ์ฌํญ์ด ๋ชจ๋ ์์ ์ ๋ค์ ๋ฐ๋ณตํ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
Skaffold ์๋์ ์ฃผ์ ๋จ๊ณ์ ๋ํ ๊ทธ๋ฆผ
๊ดํ. ๋น๊ณ ์ฌ์ฉํด๋ณด๊ธฐ
Skaffold์ ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๋ค์์ ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
๋น๊ณ ์ค์น:
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin
skaffold version
v0.37.1
ํ์ํ ์์๋ฅผ ์ฌ์ฉํ์ฌ Skaffold ์ ์ฅ์๋ฅผ ๋ณต์ ํด ๋ณด๊ฒ ์ต๋๋ค.
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices
์ ๋ ๊ฐ๊ฐ ํ๋์ ์์ Go ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจํ๋ ๋ ๊ฐ์ ํฌ๋๊ฐ ์๋ ์์ ๋ฅผ ์ ํํ์ต๋๋ค. ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ์ ๋ ๋ฒ์งธ ์ ํ๋ฆฌ์ผ์ด์ ์ธ ๋ฐฑ์๋(leeroy-app)๋ก ๋ฆฌ๋๋ ์ ํ๋ ํ๋ฐํธ์๋(leeroy-web)์ ๋๋ค. ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๋ณด์ด๋์ง ๋ด ์๋ค:
~/skaffold/examples/microservices # tree
.
โโโ leeroy-app
โ โโโ app.go
โ โโโ Dockerfile
โ โโโ kubernetes
โ โโโ deployment.yaml
โโโ leeroy-web
โ โโโ Dockerfile
โ โโโ kubernetes
โ โ โโโ deployment.yaml
โ โโโ web.go
โโโ README.adoc
โโโ skaffold.yaml
4 directories, 8 files
leeroy-app ๋ฐ leeroy-web์๋ ์ด ์ฝ๋๋ฅผ ๋ก์ปฌ๋ก ๋น๋ํ๊ธฐ ์ํ Go ์ฝ๋์ ๊ฐ๋จํ Dockerfile์ด ํฌํจ๋์ด ์์ต๋๋ค.
~/skaffold/examples/microservices # cat leeroy-app/Dockerfile
FROM golang:1.12.9-alpine3.10 as builder
COPY app.go .
RUN go build -o /app .
FROM alpine:3.10
CMD ["./app"]
COPY --from=builder /app .
์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ์ ๊ณตํ์ง ์๊ฒ ์ต๋๋ค. ๊ทธ๊ฒ๋ง ์์๋ ์ถฉ๋ถํฉ๋๋ค. leeroy-web
์์ฒญ์ ์๋ฝํ๊ณ ์ด๋ฅผ ํ๋ก์๋ก ์ฒ๋ฆฌํฉ๋๋ค. leeroy-app
. ๊ทธ๋ฌ๋ฏ๋ก ํ์ผ์ Deployment.yaml
์ ๋ํด์๋ง ์๋น์ค๊ฐ ์์ต๋๋ค app
(๋ด๋ถ ๋ผ์ฐํ
์ฉ) ํฌ๋ ํฌํธ web
์ ํ๋ฆฌ์ผ์ด์
์ ๋น ๋ฅด๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ํด๋น ์ ๋ณด๋ฅผ ์ฐ๋ฆฌ ์์ ์๊ฒ ์ ๋ฌํ๊ฒ ์ต๋๋ค.
๋ชจ์ skaffold.yaml
:
~/skaffold/examples/microservices # cat skaffold.yaml
apiVersion: skaffold/v1beta13
kind: Config
build:
artifacts:
- image: leeroy-web
context: ./leeroy-web/
- image: leeroy-app
context: ./leeroy-app/
deploy:
kubectl:
manifests:
- ./leeroy-web/kubernetes/*
- ./leeroy-app/kubernetes/*
portForward:
- resourceType: deployment
resourceName: leeroy-web
port: 8080
localPort: 9000
์์์ ์ธ๊ธํ ๋ชจ๋ ๋จ๊ณ๊ฐ ์ฌ๊ธฐ์ ์ค๋ช
๋์ด ์์ต๋๋ค. ์ด ๊ตฌ์ฑ ์ธ์๋ ์ ์ญ ์ค์ ์ด ํฌํจ๋ ํ์ผ๋ ์์ต๋๋ค. ~/.skaffold/config
. ์๋์ผ๋ก ๋๋ CLI๋ฅผ ํตํด ํธ์งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
skaffold config set --global local-cluster true
์ด ๋ช
๋ น์ ์ ์ญ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค local-cluster
์๋ฏธ์ true
, ์ดํ์๋ Skaffold๊ฐ ์๊ฒฉ ๋ ์ง์คํธ๋ฆฌ์ ์ด๋ฏธ์ง๋ฅผ ํธ์ํ๋ ค๊ณ ์๋ํ์ง ์์ต๋๋ค. ๋ก์ปฌ๋ก ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ ์ด ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ ์์ต๋๋ค.
๋์ ๊ฐ๊ธฐ skaffold.yaml
:
- ๋ฌด๋ ์์
build
์ด๋ฏธ์ง๋ฅผ ๋ก์ปฌ๋ก ์์งํ๊ณ ์ ์ฅํด์ผ ํ๋ค๊ณ ์ง์ ํฉ๋๋ค. ๋น๋๊ฐ ์ฒ์ ์คํ๋๋ฉด ๋ค์์ด ํ์๋ฉ๋๋ค.// ั.ะบ. Minikube ัะพะทะดะฐะตั ะบะปะฐััะตั ะฒ ะพัะดะตะปัะฝะพะน ะฒะธัััะฐะปัะฝะพะน ะผะฐัะธะฝะต, // ะฟัะธะดะตััั ะฟัะพะฝะธะบะฝััั ะฒะฝัััั, ััะพะฑั ะฝะฐะนัะธ ะพะฑัะฐะทั # minikube ssh $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE leeroy-app 7d55a50803590b2ff62e47e6f240723451f3ef6f8c89aeb83b34e661aa287d2e 7d55a5080359 4 hours ago 13MB leeroy-app v0.37.1-171-g0270a0c-dirty 7d55a5080359 4 hours ago 13MB leeroy-web 5063bfb29d984db1ff70661f17d6efcc5537f2bbe6aa6907004ad1ab38879681 5063bfb29d98 5 hours ago 13.1MB leeroy-web v0.37.1-171-g0270a0c-dirty 5063bfb29d98 5 hours ago 13.1MB
๋ณด์๋ค์ํผ Skaffold๋ ์ด๋ฏธ์ง์ ์ง์ ํ๊ทธ๋ฅผ ์ง์ ํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๋ฌ ํ๊ทธ ์ง์ ์ ์ฑ ์ด ์ง์๋ฉ๋๋ค.
- ์ถ๊ฐ๋ก ๊ตฌ์ฑ์ ํ์๋ฉ๋๋ค
context: ./leeroy-app/
, ์ฆ. ์ด๋ฏธ์ง๊ฐ ์์ง๋๋ ์ปจํ ์คํธ๊ฐ ์ง์ ๋ฉ๋๋ค. - ๋ฐฐํฌ ๋จ๊ณ์์๋ ํ์ํ ๋งค๋ํ์คํธ์ kubectl๊ณผ ๋ง์คํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
-
PortForward
: ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ ์ฌ์ฉํ์ฌ ํฌํธ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ฌํฉ๋๋ค.kubectl port-forward
, Skaffold์ ์ด ๋ช ๋ น์ด๋ฅผ ํธ์ถํ๋ผ๋ ์ง์นจ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ก์ปฌ ํฌํธ โโ9000์ ๋ฐฐํฌ์์ ์ด๋ฆ์ด 8080์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.leeroy-web
.
๋ฐ์ฌํ ์๊ฐ์ด๋ค skaffold dev
: ํ์ ์ง์์ ์ธ "ํผ๋๋ฐฑ ๋ฃจํ"๋ฅผ ์์ฑํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ ์์งํ์ฌ ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ ๋ฟ๋ง ์๋๋ผ ํ์ฌ ํฌ๋ ์ํ์ ๋ํด ์๋ ค์ฃผ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ๊ณ ํฌ๋ ์ํ๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
์ถ์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. skaffold dev --port-forward
์ฌ์กฐ๋ฆฝํ ๋:
๋จผ์ ์บ์๊ฐ ์ฌ์ฉ๋๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ค์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ด ์กฐ๋ฆฝ ๋ฐ ๋ฐฐํฌ๋๊ณ ํฌํธ๊ฐ ์ ๋ฌ๋ฉ๋๋ค. ์ง์ ๋ ์ดํ --port-forward
, Skaffold๊ฐ ํฌํธ๋ฅผ ๋ค์์ผ๋ก ์ ๋ฌํ์ต๋๋ค. web
, ๊ทธ๊ฐ ์์ฒญํ๋๋ก, ๊ทธ๋ฌ๋ app
๊ทธ๋ ์์ ์ ์ฌ๋์ ๋ฐ๋ผ ๋์ก์ต๋๋ค (๊ฐ์ฅ ๊ฐ๊น์ด ๋ฌด๋ฃ ํญ๋ชฉ์ ์ ํํ์ต๋๋ค). ๊ทธ๋ฐ ๋ค์ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก๋ถํฐ ์ฒซ ๋ฒ์งธ ๋ก๊ทธ๋ฅผ ๋ฐ์ต๋๋ค.
์๋ํ๋์ง ํ์ธํด๋ณผ๊น์?
~/skaffold/examples/microservices # kubectl get po
NAME READY STATUS RESTARTS AGE
leeroy-app-6998dfcc95-2nxvf 1/1 Running 0 103s
leeroy-web-69f7d47c9d-5ff77 1/1 Running 0 103s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy app!!!
ํ์ผ ์์ leeroy-app/app.go
- ๋ช ์ด๊ฐ ์ง๋๋ฉด...๊ทธ๋ฆฌ๊ณ :
~/skaffold/examples/microservices # kubectl get po
NAME READY STATUS RESTARTS AGE
leeroy-app-ffd79d986-l6nwp 1/1 Running 0 11s
leeroy-web-69f7d47c9d-5ff77 1/1 Running 0 4m59s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy Habr!!!
๋์์ Skaffold ์์ฒด๋ ํ ๊ฐ์ง ์ ์ ์ ์ธํ๊ณ ์ด์ ๊ณผ ๋์ผํ ๋ด์ฉ์ ์ฝ์์ ํ์ํ์ต๋๋ค. leeroy-app
, ๊ทธ๋ฆฌ๊ณ ํ ๋ฒ์ ์ ๋ถ๋ ์๋๋๋ค.
๋ ๋ง์ ์ฐ์ต
์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ Skaffold ๊ตฌ์ฑ์ ๋ถํธ์คํธ๋ฉํ ์ ์๋ค๋ ์ ๋ ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค. init
, ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค. ๋ํ ์ฌ๋ฌ ๊ตฌ์ฑ์ ์์ฑํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ๊ตฌ์ฑ์์ ๊ฐ๋ฐ์ ์ํํ ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋จ๊ณ์ ์ผ๋ก ๋กค์์ํ ์ ์์ต๋๋ค. run
(๊ฐ์ ๊ณผ์ dev
, ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ์ง ์์), ๋ค๋ฅธ ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค.
์นดํ์ฝ๋ค์๋
Skaffold์ ๊ฐ๋ฅํ ์ฌ์ฉ ์ฌ๋ก ์ค ํ๋๋ ์๊ฒฉ ํด๋ฌ์คํฐ์์ ๊ฐ๋ฐ์ ์ํํ๋ ๊ฒ์
๋๋ค. ๋ชจ๋ ์ฌ๋์ด ์์ ์ ํ๋์จ์ด์์ Minikube๋ฅผ ์คํํ ๋ค์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ถ์ํ๊ณ ์ ์ ํ๊ฒ ์๋ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ ๊ฒ์ ํธ์ํ๊ฒ ์๊ฐํ์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ Skaffold๋ ๋ฌธ์ ๋ฅผ ์๋ฒฝํ๊ฒ ํด๊ฒฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด Reddit ์์ง๋์ด๊ฐ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ฏธ ๋
ผ์
๊ทธ๋ฆฌ๊ณ ์
๊ฒฐ๋ก
Skaffold๋ Kubernetes์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ถ์ํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๊ธฐ ์ํ ํธ๋ฆฌํ ๋๊ตฌ์ด๋ฉฐ ์ฃผ๋ก ๊ฐ๋ฐ ์๊ตฌ ์ฌํญ์ ์ค์ ์ ๋ก๋๋ค. ๊ฐ๋ฐ์์ ๊ธฐ๋ณธ ์๊ตฌ ์ฌํญ์ ๊ณ ๋ คํ๋ "์งง์" ํ์ดํ๋ผ์ธ์ ๋ง๋๋ ๊ฒ์ด ๋งค์ฐ ์ฌ์ธ ๋ฟ๋ง ์๋๋ผ ์ํ๋ ๊ฒฝ์ฐ ๋ ํฐ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค. CI/CD ํ๋ก์ธ์ค์์ Skaffold๋ฅผ ์ฌ์ฉํ๋ ๋ช
ํํ ์ ์ค ํ๋๋ก
Skaffold๋ ์ด๋ฏธ GitHub์์ ๊ฑฐ์ 8000๊ฐ ์ด์์ ๋ณ์ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ Google์์ ๊ฐ๋ฐํ์ผ๋ฉฐ ๋ค์์ ์ผ๋ถ์
๋๋ค.
PS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
Kubernetes์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋๊ตฌ "; - ยซ
werf - Kubernetes์ CI/CD์ฉ ๋๊ตฌ(๊ฐ์ ๋ฐ ๋น๋์ค ๋ณด๊ณ ์) "; - ยซ
Garden v0.10.0: ๋ ธํธ๋ถ์๋ Kubernetes๊ฐ ํ์ํ์ง ์์ต๋๋ค. "; - ยซ
Kubernetes ํ ๋ฐ ์๋ น: ๋ก์ปฌ ๊ฐ๋ฐ ๋ฐ Telepresence ์ ๋ณด ".
์ถ์ฒ : habr.com