โ ์ฟ ๋ฒ๋คํฐ์ค ์ด๋๋ ํด๋์ค (์ง์ํธ) - Spring 1, 2 ์ ๋ฃ๊ณ ์์ฑํ๋ ๋ณต์ต ๋ธ๋ก๊ทธ ์ ๋๋ค.
(1) ๋ช ์นญ ์ ๋ฆฌ
๋ฐฐํฌํด
- Jenkins : ์ง๊ธ๊น์ง ๋ฐฐํฌํด๋ก ์ฌ์ฉ
- argo : ์ด๋ฒ์๊ฐ๋ถํฐ ๋ฐฐํฌํด๋ก ์ฌ์ฉ
kubectl ์ ์จ์ ์ฟ ๋ฒ๋คํฐ์ค๋ก ๋ฐฐํฌ
- kubectl ์ ์ปค๋งจ๋ ๋ผ์ธ ๋๊ตฌ์ธ CLI
- create ๋ apply ๋ก ์์ ์์ฑ
- CLI ๋ช ๋ น ์ค ํ๋๋ฅผ ์ฌ์ฉํ๊ฑฐ์ง ๋ฐฐํฌ๋ฅผ ์ํ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์์์
- ์ค๋ฌด์์๋ kubectl ์ ์ฟ ๋ฒ๋คํฐ์ค ์์์ ์กฐํํ๊ฑฐ๋ ๊ธํ ์์ ํ ๋๋ง ์ฌ์ฉ
- ์ค์ ์์ ์์ฑ์ Kustomize ๋ Helm ์ ํตํด์ ํ๋ค
ํจํค์ง ๋งค๋์ : Helm, Kustomize
- kubectl ๊ณผ ๊ฐ์ด 6๋ช ์ ๋ช ๋ น์ ๋ ๋ฆฌ์ง๋ง,
- ์์ ์ ์ ์ฅ์์๋ ํ ๋ฒ์ผ๋ก ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์๋ค
- App ์ ํจํค์ง ๋จ์๋ก ๊ด๋ฆฌ
(2) Helm vs Kustomize
2-1. ๊ณตํต์
- ์ฌ์ฉ ๋ชฉ์ : ์ค๋ณต ๊ด๋ฆฌ ์ต์ํ
- ๋ง์ดํฌ๋ก ์๋น์ค๋ก App ์ข ๋ฅ๊ฐ ๋ง์์ก๊ธฐ ๋๋ฌธ์
- ๋ค์ํ ๋ฐฐํฌ ํ๊ฒฝ ๋๋ฌธ์
- ๋ค์ํ ๋ฐฐํฌ ํด์์ ์ง์
- ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ง์ํด์ค๋ค
2-2. ์ฐจ์ด์
Helm | Kustomize.io | |
๋ฐฐํฌ ํธ์ ๊ธฐ๋ฅ ๊ฐฏ์ | 200๊ฐ | 10๊ฐ |
ํ ํจํค์ง ๋น ํ์ฉ ๋ฒ์ (๊ถ๊ณ ) | ๋ง์ดํฌ๋ก ์๋น์ค AND ๋ค์ํ ๋ฐฐํฌ ํ๊ฒฝ | ๋ง์ดํฌ๋ก ์๋น์ค OR ๋ค์ํ ๋ฐฐํฌ ํ๊ฒฝ ⇒ ์ ์ ํจํค์ง ๋ด๋ถ ํ์ผ๋์ด ๋ง์์ง๋ ๊ตฌ์กฐ |
์ฌ์ฉ ๋ชฉ์ | ํ๋ก์ ํธ๊ด๋ฆฌ ํจํค์ง์ฉ + ๊ธฐ์ ์ ํ ํจํค์ง์ฉ | ํ๋ก์ ํธ๊ด๋ฆฌ ํจํค์ง์ฉ |
์ ์ฆ์ผ์ด์ค | ๋ํํ๋ก์ ํธ App ์ข ๋ฅ - 5๊ฐ ์ด์ |
๊ฐ๋จํ ํ๋ก์ ํธ App ์ข ๋ฅ - 5๊ฐ ๋ฏธ๋ง |
2-3. ์ต์ข ์๊ฒฌ
- ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ํ๋ฉด์ ๋ฌด์กฐ๊ฑด ์ฌ๋ฌ ์คํ์์ค๋ฅผ ๋์ ํ๊ฒ ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ทธ ์คํ์์ค๋ ๋๋ถ๋ถ Helm ํํ๋ก ๋ฐฐํฌ
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Helm ์ ์ด์ฐจํผ ์์์ผ ํ๋ค.
- ๊ทธ๋์ ์ฒ์์ ํ์ต์ด ์ด๋ ต์ง๋ง Helm ์ ๋จผ์ ์ฐ๋ฉด Kustomize ๋ฅผ ์ฌ์ฉํ ํ์๋ ์์ด์ง๊ฒ ๋๋ค.
Kustomize ๋ฅผ ์์์ผ ํ๋ ๊ฒฝ์ฐ
- ์ฒ์๋ถํฐ ๋๊น์ง ์๊ท๋ชจ ํ๋ก์ ํธ๊ฐ ๋ ๊ฒฝ์ฐ
- ๋นจ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํด์ผํ๊ณ , ๋จ๊ณ์ ์ผ๋ก Helm ์ ์ฉํด๋ ๋๋ ๊ฒฝ์ฐ
- ์ด๋ฏธ ๋๊ฐ Kustomize ๋ก ๋ฐฐํฌ ํ์ดํ ๋ผ์ธ์ ์ ์ฉํด ๋์ ๋ถ์ํด์ผ ํ ๊ฒฝ์ฐ
2-4. Helm vs Kustomize ๋น๊ต
2-4-1. ์ค์น ๊ตฌ์ฑ
Kustomize | Helm |
|
|
2-4-2. ์ฌ์ฉ ๋ฐฉ์
Helm → ํจ์ ๋ฐฉ์ | Kustomize → ์ค๋ฒ๋ ์ด ๋ฐฉ์ |
|
|
2-4-3. ํจํค์ง ๊ตฌ์กฐ
Helm | Kustomize |
|
|
(3) Helm ๋ฐฐํฌ
0. ์ค์นํ๊ธฐ
0-1. Helm ์ค์น
[root@cicd-server ~]#
yum install -y tar
curl -O <https://get.helm.sh/helm-v3.13.2-linux-arm64.tar.gz>
tar -zxvf helm-v3.13.2-linux-arm64.tar.gz
mv linux-arm64/helm /usr/bin/helm
ํ์ธํ๊ธฐ
# jenkins ์ ์ ๋ก ์ ํํด์ ํ์ธ
[root@cicd-server ~]# su - jenkins -s /bin/bash
[jenkins@cicd-server ~]$ helm
ํ ํ๋ฆฟ ์์ฑํ๊ธฐ
helm create api-tester
0-2. Kustomize ์ค์น
- kubectl ์ ์ด๋ฏธ ์ค์น๋์ด ์์
1. Helm ๋ฐฐํฌ ์์ํ๊ธฐ
1-1. Pipeline ์์ฑ
- item name : 2221-deploy-heml
- type : Pipeline
1-2. Configuration
- Configure > General > GitHub project > Project url : https://github.com/soyeon207/kubernetes-anotherclass-sprint2/
- Advanced Project Options > Pipeline
Definition : Pipeline script from SCM
Definition > SCM : Git
Definition > SCM > Repositories > Repository URL : <https://github.com/soyeon207/kubernetes-anotherclass-sprint2.git>
Definition > SCM > Branches to build > Branch Specifier : */main
Definition > SCM > Branches to build > Additional Behaviours > Sparse Checkout paths > Path : 2221
Definition > Script Path : 2221/Jenkinsfile
1-3. ์ง๊ธ ๋น๋
- ๋ฐฐํฌ ์์ ๋ฒํผ์ ๋๋ฅด๋ฉด Helm ๋ฐฐํฌ
- Helm ํ ํ๋ฆฟ ํ์ธ
# Source: api-tester/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: api-tester-2221-postgresql
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
stringData:
postgresql-info.yaml: |-
driver-class-name: "org.postgresql.Driver"
url: "jdbc:postgresql://postgresql:5431"
username: "dev"
password: "dev123"
---
# Source: api-tester/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: api-tester-2221-properties
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
data:
application_role: ALL
postgresql_filepath: /usr/src/myapp/datasource/postgresql-info.yaml
spring_profiles_active: dev
---
# Source: api-tester/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: api-tester-2221
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
spec:
type: NodePort
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
nodePort: 32221
selector:
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
---
# Source: api-tester/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-tester-2221
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
spec:
replicas: 2
selector:
matchLabels:
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
template:
metadata:
labels:
helm.sh/chart: api-tester-0.1.0
app.kubernetes.io/name: api-tester
app.kubernetes.io/instance: api-tester-2221
app.kubernetes.io/version: "v1.0.0"
app.kubernetes.io/managed-by: Helm
spec:
serviceAccountName: default
securityContext:
{}
containers:
- name: api-tester
securityContext:
{}
image: "1pro/api-tester:v1.0.0"
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
protocol: TCP
envFrom:
- configMapRef:
name: api-tester-2221-properties
startupProbe:
httpGet:
path: "/startup"
port: 8080
periodSeconds: 5
failureThreshold: 24
livenessProbe:
httpGet:
path: "/liveness"
port: 8080
readinessProbe:
httpGet:
path: "/readiness"
port: 8080
resources:
limits:
cpu: 200m
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
volumeMounts:
- mountPath: /usr/src/myapp/datasource
name: secret-datasource
volumes:
- name: secret-datasource
secret:
secretName: api-tester-2221-postgresql
1-4. ๋ฐฐํฌ ์ฝ๋ ํ์ธ
https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2/tree/main/2221
- ์ฑ์ Helm ํจํค์ง๋ก ๋ง๋ค๊ธฐ ์ํด์ ํ์ํ ๋จ๊ณ
1-5. Helm Package ๋ฅผ ๋ง๋๋ ์์
1-5-1. Helm ํ ํ๋ฆฟ ์์ฑ
# helm ํ
ํ๋ฆฟ ์์ฑ
[jenkins@cicd-server ~]$ helm create api-tester
[jenkins@cicd-server ~]$ cd api-tester
[jenkins@cicd-server api-tester]$ ls
charts Chart.yaml templates values.yaml
1-5-2. ๋น์ฅ ํ์์๋ ๋ด์ฉ ์ญ์ ํ๊ธฐ (deleting)
- helm create api-tester ๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์๋จ์ ๋ฉ์ธ์ฐจํธ ํด๋ ์์ฑ
- ํ์๋ก
- charts : ์๋ธ์ฐจํธ ํด๋ → ์ฌ์ฉ X ์ญ์
- templates : ๋ฉ์ธ์ฐจํธ yaml ํ์ผ ํด๋
- .helmignore : ๋ ๋๋ง ์ ์ ์ธ ํ์ผ์ง์ , ๊ณต์ ํ ํ์ ์๋ ํ์ผ๋ค
- Chart.yaml : ์ฐจํธ ๊ธฐ๋ณธ์ ๋ณด ์ ์ธ
- values.yaml : ๋ฐฐํฌ๋ yaml ํ์ผ์ ๋ค์ด๊ฐ ์๋ ๋ณ์๋ค์ ๊ธฐ๋ณธ๊ฐ ์ ์ธ, ๋ณ์ ๊ฐ argument ๋ฅผ ์ค์
- templates : ๋ฉ์ธ์ฐจํธ yaml ํ์ผ ํด๋
- tests : App ์ ํต์ ์ํ ํ์ธ (๋ถ๊ฐ๊ธฐ๋ฅ) → ์ฌ์ฉ X ์ญ์
- _helpers.tpl : ์ฌ์ฉ์ ์ ์ ์ ์ญ๋ณ์ ์ ์ธ
- NOTES.txt : ๋ฐฐํฌ ํ ์๋ด๋ฌธ๊ตฌ
- deployment.yaml : ๋ฐฐํฌ ๋ ํ์ผ
1-5-3. ๋ด yaml ํ์ผ์ ๋ง๊ฒ Helm Package ์์ ํ๊ธฐ (modify)
- helm command → .Release ๋ฅผ ์จ์ ๋ณ์๋ฅผ ๋ฃ์ ์ ์๋ค
- Chart.yaml → .Chart ๋ฅผ ์จ์ ๋ณ์๋ฅผ ๋ฃ์ ์ ์๋ค
- .Chart.Name ์ฒ๋ผ ๋ค์ ๋๋ฌธ์๋ก ์์
- values.yaml → .Values ๋ฅผ ์จ์ ๋ณ์๋ฅผ ๋ฃ์ ์ ์๋ค
- .Values.replicaCount ์ฒ๋ผ ๋ค์ ์๋ฌธ์๋ก ์์
- _helpers.tpl → include ๋ฅผ ์จ์ import
→ helm ๋ช ๋ น์ด๋ Chart.yaml, values.yaml ์ templates ์์ ์๋ ๋ชจ๋ ํ์ผ์์ ๊ฐ์ ธ๋ค๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
→ _helpers.tpl ์ templates ์ ์ฒด์์ ์ฌ์ฉ ๊ฐ๋ฅ
1-5-4. additional
configmap.yaml ์ด๋ secret.yaml ์ ์ถ๊ฐ
- helm install → kubectl create
- helm upgrade → kubectl patch
- helm upgrade --install → kubectl apply
1-6. ์ค์ต ํ ์ ๋ฆฌ
# helm ์กฐํ
helm list -n anotherclass-222
# helm ์ญ์
helm uninstall -n anotherclass-222 api-tester-2221
# namespace ์ญ์
kubectl delete ns anotherclass-222
์ด๋ฏธ์ง ์ถ์ฒ URL : https://inf.run/k7mF
'๐ฑ ์ธํ๋ฐ > โ ์ฟ ๋ฒ๋คํฐ์ค ์ด๋๋ ํด๋์ค (์ง์ํธ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
(14) Helm๊ณผ Kustomize ๋น๊ตํ๋ฉฐ ์ฌ์ฉ-2 (1) | 2025.06.24 |
---|---|
[๋ฏธ์ 5] ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ฌ๋ก ์ค์ต (1) | 2025.06.16 |
(12) Jenkins Pipeline (๊ธฐ์ด๋ถํฐ Blue/Green ๊น์ง) (1) | 2025.06.14 |
(11) ๋ฐฐํฌ๋ฅผ ์์ํ๊ธฐ ์ ์ ๋ฐ๋์ ์์์ผ ํ ๊ฒ๋ค (2) | 2025.06.11 |
(10) ์์ฝ๊ฒ ๋ฐ๋ธ์ต์ค ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ (2) | 2025.06.10 |