-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
π docs: Helm Chart λ₯Ό μ΄μ©ν Argo CD λ°°ν¬
- Loading branch information
1 parent
8e41a7b
commit e8e700d
Showing
9 changed files
with
370 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
apiVersion: v2 | ||
name: ngnix-demo | ||
description: A Helm chart for Kubernetes | ||
|
||
type: application | ||
|
||
version: 0.1.0 | ||
|
||
appVersion: "1.0.0" |
35 changes: 35 additions & 0 deletions
35
argocd/helm-charts-generator/output/templates/deployment.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: {{ .Values.app.name }} | ||
labels: | ||
app: {{ .Values.app.name }} | ||
namespace: {{ .Release.Namespace | quote }} | ||
spec: | ||
replicas: {{ .Values.app.replicas }} | ||
selector: | ||
matchLabels: | ||
app: {{ .Values.app.name }} | ||
template: | ||
metadata: | ||
{{- with .Values.podAnnotations }} | ||
annotations: | ||
{{- toYaml .Values.podAnnotations | nindent 8 }} | ||
{{- end }} | ||
labels: | ||
app: {{ .Values.app.name }} | ||
{{- with .Values.podLabels }} | ||
{{- toYaml . | nindent 8 }} | ||
{{- end }} | ||
spec: | ||
containers: | ||
- image: {{ .Values.app.image }} | ||
name: {{ .Values.app.name }} | ||
{{- with .Values.app.resources }} | ||
resources: | ||
{{- toYaml . | nindent 10 }} | ||
{{- end }} | ||
ports: | ||
- name: http | ||
protocol: TCP | ||
containerPort: {{ .Values.app.port }} |
22 changes: 22 additions & 0 deletions
22
argocd/helm-charts-generator/output/templates/ingress.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
{{- if .Values.service.enabled }} | ||
{{- if .Values.ingress.enabled }} | ||
apiVersion: networking.k8s.io/v1 | ||
kind: Ingress | ||
metadata: | ||
name: {{ .Values.app.name }} | ||
namespace: {{ .Release.Namespace | quote }} | ||
spec: | ||
ingressClassName: {{ .Values.ingress.className }} | ||
rules: | ||
- host: {{ .Values.ingress.host }} | ||
http: | ||
paths: | ||
- path: {{ .Values.ingress.path }} | ||
pathType: {{ .Values.ingress.pathType }} | ||
backend: | ||
service: | ||
name: {{ .Values.app.name }} | ||
port: | ||
number: {{ .Values.service.port }} | ||
{{- end }} | ||
{{- end }} |
17 changes: 17 additions & 0 deletions
17
argocd/helm-charts-generator/output/templates/service.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
{{- if .Values.service.enabled }} | ||
apiVersion: v1 | ||
kind: Service | ||
metadata: | ||
labels: | ||
app: {{ .Values.app.name }} | ||
name: {{ .Values.app.name }} | ||
namespace: {{ .Release.Namespace | quote }} | ||
spec: | ||
ports: | ||
- port: {{ .Values.service.port }} | ||
protocol: TCP | ||
name: http | ||
targetPort: {{ .Values.app.port }} | ||
selector: | ||
app: {{ .Values.app.name }} | ||
{{- end }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
app: | ||
name: "ngnix-demo" | ||
replicas: 1 | ||
image: "nginx:stable-alpine3.19-perl" | ||
port: 80 | ||
resources: | ||
requests: | ||
cpu: "1m" | ||
memory: "128Mi" | ||
limits: | ||
cpu: "1m" | ||
memory: "128Mi" | ||
|
||
podAnnotations: {} | ||
podLabels: | ||
tier: backend | ||
|
||
ingress: | ||
enabled: true | ||
className: nginx | ||
host: "" | ||
path: "" | ||
pathType: Prefix | ||
|
||
service: | ||
enabled: true | ||
port: 80 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,260 @@ | ||
# κ°μ | ||
|
||
Helm Chart λ₯Ό μ΄μ©ν΄μ μ ν리μΌμ΄μ μ Argo CD λ‘ λ°°ν¬νλ κ³Όμ μ μ 리νμ΅λλ€. | ||
|
||
## μ€ν νκ²½ | ||
|
||
- OS: Ubuntu 20.04 Desktop | ||
- Helm: v3.14.4 | ||
- ArgoCD: v2.9.7 | ||
|
||
# μμ κ³Όμ | ||
|
||
## 1. Helm Chart μ μ₯νκΈ° μν Github Repository μμ± | ||
|
||
42Cluster-Seoul μ Github Organization μ `helm-charts` λΌλ μ΄λ¦μ [Repository](https://github.com/42Cluster-Seoul/helm-charts) λ₯Ό μμ±νμ΅λλ€. | ||
|
||
Github λ₯Ό μ΄μ©ν΄μ Helm Repo μμ±μ νκΈ° μν΄ Github Pages μ€μ λ ν¨κ» νμ΅λλ€. | ||
|
||
> μ°Έκ³ μλ£ | ||
> | ||
> - [0. μ¬μ μ€λΉ: githubμ helm repository λ§λ€κΈ°](https://happycloud-lee.tistory.com/6) [ν°μ€ν 리] | ||
Helm Chart λ₯Ό Argo CD λ‘ λ°°ν¬νκΈ° μν΄ μ¬μ©ν λ°©λ²μ 2κ°μ§μ λλ€. | ||
|
||
1. Github Pages μ μ΄μ©ν Helm Repository | ||
2. Github Repository μ Helm Chart κ²½λ‘ μ§μ | ||
|
||
μμ ν Github Repository μλ 2λ² λ°©μμ κΈ°μ€μΌλ‘ Shell Script κ° μμ±λμ΄ μμ΅λλ€λ§, 1λ² λ°©μλ μ μμ μΌλ‘ μλνλ κ²μ νμΈνμ΅λλ€. | ||
|
||
μμΈν λ΄μ©μ **[3. Shell Script μλ μ리]** μμ μ€λͺ νκ² μ΅λλ€. | ||
|
||
## 2. Helm Chart μμ±μ μν Shell Script μμ± | ||
|
||
μ¬μ©μμ μ λ ₯μ λ°μμ Helm Chart λ₯Ό μμ±νλ Shell Script λ₯Ό μμ±νμ΅λλ€. | ||
|
||
Shell Script λ `helm-charts` Github Repository μ `helm-charts-generator` λλ ν 리 νμμ `main.sh` μ μμ΅λλ€. | ||
|
||
```bash | ||
. | ||
βββ README.md | ||
βββ helm-charts-generator | ||
β βββ main.sh | ||
β βββ template | ||
β βββ Chart.yaml.template | ||
β βββ templates | ||
β β βββ application.yaml | ||
β β βββ deployment.yaml | ||
β β βββ ingress.yaml | ||
β β βββ service.yaml | ||
β βββ values.yaml.template | ||
βββ stable | ||
``` | ||
|
||
`main.sh` μ½λλ μλμ κ°μ΅λλ€. | ||
|
||
```bash | ||
read -p "Enter the value for application name: " app_name | ||
|
||
# Variables | ||
OUTPUT_DIRECTORY="../stable" | ||
DESTINATION_DIRECTORY="$OUTPUT_DIRECTORY/$app_name" | ||
OUTPUT_CHARTS_FILE="$DESTINATION_DIRECTORY/Chart.yaml" | ||
OUTPUT_VALUES_FILE="$DESTINATION_DIRECTORY/values.yaml" | ||
HELM_TEMPLATES_DIRECTORY="template/templates" | ||
GITHUB_REPOSITORY="https://github.com/42Cluster-Seoul/helm-charts" | ||
|
||
if [ ! -d "$DESTINATION_DIRECTORY" ]; then | ||
mkdir -p "$DESTINATION_DIRECTORY" | ||
else | ||
rm -rf "$DESTINATION_DIRECTORY" | ||
mkdir -p "$DESTINATION_DIRECTORY" | ||
fi | ||
|
||
cp template/values.yaml.template $OUTPUT_VALUES_FILE | ||
cp template/Chart.yaml.template $OUTPUT_CHARTS_FILE | ||
|
||
sed -i.tmp "s/\${app_name}/$app_name/g" $OUTPUT_CHARTS_FILE | ||
|
||
read -p "Enter replicas count: " replicas_count | ||
read -p "Enter image url: " image_url | ||
read -p "Enter port number: " port_number | ||
|
||
sed -i.tmp \ | ||
-e "s/\${app_name}/$app_name/g" \ | ||
-e "s/\${replicas_count}/$replicas_count/g" \ | ||
-e "s/\${image_url}/$image_url/g" \ | ||
-e "s/\${port_number}/$port_number/g" \ | ||
"$OUTPUT_VALUES_FILE" | ||
|
||
rm -f "$OUTPUT_CHARTS_FILE.tmp" "$OUTPUT_VALUES_FILE.tmp" | ||
|
||
cp -r "$HELM_TEMPLATES_DIRECTORY" "$DESTINATION_DIRECTORY" | ||
|
||
sed -i.tmp "s/\${app_name}/$app_name/g" "$DESTINATION_DIRECTORY/templates/application.yaml" | ||
|
||
rm -f "$DESTINATION_DIRECTORY/templates/application.yaml.tmp" | ||
|
||
mv "$DESTINATION_DIRECTORY/templates/application.yaml" "$OUTPUT_DIRECTORY/$app_name-applcation.yaml" | ||
|
||
echo -e "\nπͺ½ New Helm Charts created with app name: $app_name \n" | ||
|
||
echo -e "β Lint Check for application: $app_name\n" | ||
|
||
helm lint $DESTINATION_DIRECTORY | ||
|
||
echo -e "β« Uploading Helm Chart to Github Repository: $GITHUB_REPOSITORY \n" | ||
|
||
git add $OUTPUT_DIRECTORY | ||
git commit -m "Added new application: $app_name" | ||
git push origin main | ||
|
||
echo -e "\nπ Applying for application: $app_name-application.yaml\n" | ||
|
||
kubectl create -f $OUTPUT_DIRECTORY/$app_name-applcation.yaml | ||
``` | ||
|
||
μλ μμλ μλμ κ°μ΅λλ€. | ||
|
||
### (1) μ ν리μΌμ΄μ μ 보 μ λ ₯ | ||
|
||
μλμ κ°μ΄ 4κ°μ§ μ 보λ₯Ό μ λ ₯ λ°μ΅λλ€. | ||
|
||
1. μ ν리μΌμ΄μ μ΄λ¦: λ°°ν¬νκ³ μ νλ μ ν리μΌμ΄μ μ μ΄λ¦ | ||
2. Replicas κ°μ: μ€νν νλμ κ°μ | ||
3. Image URL: νλμ λ°°ν¬ν μ ν리μΌμ΄μ μ μ΄λ―Έμ§(DockerHub λ±)μ URL | ||
4. ν¬νΈ λ²νΈ: Ingress λ₯Ό μ¬μ©νκΈ° μν ν¬νΈ λ²νΈ | ||
|
||
### (2) μ λ ₯ λ°μ μ 보λ₯Ό ν νλ¦Ώμ μ λ ₯ | ||
|
||
`sed` λͺ λ Ήμ΄λ₯Ό μ΄μ©ν΄μ νμ€ μ λ ₯μΌλ‘ λ°μ κ°μ ν νλ¦Ώμ μΉνν©λλ€. | ||
|
||
### (3) Helm Lint μν | ||
|
||
`stable/${app_name}` κ²½λ‘μ μμ±λ Helm Chart κ΄λ ¨ yaml νμΌλ€μ λ¬Έλ²μ νμΈνκΈ° μν΄ `helm lint` λ₯Ό μνν©λλ€. | ||
|
||
### (4) Github Repository Push | ||
|
||
`stable` κ²½λ‘μ μμ±λ νμΌμ `helm-charts` Repository μ μ λ‘λν©λλ€. | ||
|
||
### (5) Argo CD λ°°ν¬ | ||
|
||
`kubectl create -f stable/${app_name}-application.yaml` λͺ λ Ήμ΄λ₯Ό μ΄μ©ν΄μ μ ν리μΌμ΄μ μ λ°°ν¬ν©λλ€. | ||
|
||
## 3. Shell Script μλ μ리 | ||
|
||
`helm-charts-generator/template` κ²½λ‘μλ Helm Chart λ₯Ό ꡬμ±νκΈ° μν Chart.yaml, values.yaml, κ·Έλ¦¬κ³ μ ν리μΌμ΄μ ꡬμ±μ μν deployment, service, ingress, application(ArgoCD CRD) ν νλ¦Ώμ΄ μμ΅λλ€. | ||
|
||
μ¬μ©μλ‘λΆν° λ°μ μ λ ₯ κ°μ ν νλ¦Ώ νμΌλ€μ μ λ ₯ν΄μ `stable/${app_name}` κ²½λ‘μ μ μ₯ν©λλ€. | ||
|
||
μ΄λ, application.yaml μ Helm Chart μ μμ΄μ§ μλλ‘ `stable` κ²½λ‘μ μ μ₯ν©λλ€. | ||
|
||
`stable` λλ ν 리 ꡬ쑰λ μλμ κ°μ΅λλ€. | ||
|
||
```bash | ||
stable | ||
βββ demo-nginx | ||
β βββ Chart.yaml | ||
β βββ templates | ||
β β βββ deployment.yaml | ||
β β βββ ingress.yaml | ||
β β βββ service.yaml | ||
β βββ values.yaml | ||
βββ demo-nginx-0.1.0.tgz | ||
βββ demo-nginx-applcation.yaml | ||
βββ index.yaml | ||
``` | ||
|
||
`demo-nginx` λ Shell Script λ‘ μ λ ₯ν μ ν리μΌμ΄μ μ΄λ¦μ λλ€. | ||
|
||
μ€ννλ λͺ¨μ΅μ μλμ κ°μ΅λλ€. | ||
|
||
![1.gif](../images/2024-05-04-helm-chart-with-argocd/1.gif) | ||
|
||
### application.yaml | ||
|
||
Argo CD μμ Helm Chart λ₯Ό μ΄μ©ν΄μ λ°°ν¬ν λ 2κ°μ§ λ°©λ²μ μ§μν©λλ€. | ||
|
||
첫 λ²μ§Έλ Github Repository λ΄ Helm Chart κ²½λ‘λ₯Ό μ§μ νλ κ²μ λλ€. | ||
|
||
`stable/${app_name}` κ²½λ‘μλ yaml νμΌλ€λ‘ ꡬμ±λμ΄ μμ΅λλ€. | ||
|
||
```bash | ||
stable/demo-nginx | ||
βββ Chart.yaml | ||
βββ templates | ||
β βββ deployment.yaml | ||
β βββ ingress.yaml | ||
β βββ service.yaml | ||
βββ values.yaml | ||
``` | ||
|
||
μ΄ κ²½λ‘λ₯Ό application.yaml μ μ λ ₯ν΄μ λ°°ν¬ν Helm Chart λ₯Ό μ§μ ν μ μμ΅λλ€. | ||
|
||
```yaml | ||
spec: | ||
project: default | ||
source: | ||
path: stable/${app_name} | ||
repoURL: https://github.com/42Cluster-Seoul/helm-charts | ||
targetRevision: HEAD | ||
helm: | ||
valueFiles: | ||
- values.yaml | ||
``` | ||
`${app_name}-application.yaml` νμΌμ `stable` κ²½λ‘μ μ μ₯λ©λλ€. | ||
|
||
```bash | ||
stable | ||
βββ demo-nginx | ||
β βββ Chart.yaml | ||
β βββ templates | ||
β β βββ deployment.yaml | ||
β β βββ ingress.yaml | ||
β β βββ service.yaml | ||
β βββ values.yaml | ||
βββ demo-nginx-applcation.yaml | ||
``` | ||
|
||
λ λ²μ§Έλ Helm Repo λ₯Ό μ΄μ©νλ λ°©λ²μ λλ€. | ||
|
||
application.yaml μ μ λ ₯νλ κ²μ κ±°μ μ μ¬ν©λλ€. | ||
|
||
repoURL μ Github Pages λ‘ μμ±ν Helm Repo λ₯Ό μ λ ₯νκ³ , `source.chart` μμ±μ chart μ΄λ¦μ μ λ ₯ν΄μ£Όλ κ²μ΄ μ°¨μ΄μ μ λλ€. | ||
|
||
```yaml | ||
spec: | ||
project: default | ||
source: | ||
chart: demo-nginx | ||
repoURL: https://42cluster-seoul.github.io/helm-charts/stable | ||
targetRevision: 0.1.0 | ||
helm: | ||
valueFiles: | ||
- values.yaml | ||
``` | ||
|
||
μ΄λ₯Ό μ΄μ©νκΈ° μν΄μ `stable` κ²½λ‘μ Helm Chart μ `index.yaml` νμΌκ³Ό μμΆν ν¨ν€μ§ νμΌμ ν¨κ» μ λ‘λ νμ΅λλ€. | ||
|
||
```bash | ||
stable | ||
βββ demo-nginx | ||
β βββ Chart.yaml | ||
β βββ templates | ||
β β βββ deployment.yaml | ||
β β βββ ingress.yaml | ||
β β βββ service.yaml | ||
β βββ values.yaml | ||
βββ demo-nginx-0.1.0.tgz | ||
βββ demo-nginx-applcation.yaml | ||
βββ index.yaml | ||
``` | ||
|
||
ν μ€νΈ λͺ©μ μΌλ‘ nginx λ₯Ό λ°°ν¬νκ³ , Cluster IP λ‘ μ κ·Όνλ©΄ μλμ κ°μ νλ©΄μ΄ λΉλλ€. | ||
|
||
![2.png](../images/2024-05-04-helm-chart-with-argocd/2.png) | ||
|
||
λ€λ§, Ingress μ€μ μ μλͺ»νλμ§, νμ¬λ μλμ μ΄λ―Έμ§μ κ°μ΄ Ingress κ° μ λλ‘ μ€μΉλμ§ μλ μνμ λλ€. | ||
|
||
![3.png](../images/2024-05-04-helm-chart-with-argocd/3.png) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.