๐ก Adobe Creative Cloud Tuning on macOS โ Executive Summary
Technical architectural analysis, practical configuration manifests, and deployment instructions for Adobe Creative Cloud Tuning on macOS.
Installation
required
-
kube-proxy:8080
yaml
k proxy --port=8080 &
macOS
bash
brew install helmfile
amd64
bash
LATEST=$(curl -sL https://github.com/helmfile/helmfile/releases/latest \
| grep -oP 'tag/\K[v0-9\.]+' | head -1)
curl -LO https://github.com/helmfile/helmfile/releases/download/${LATEST}/helmfile_$(echo $LATEST | sed 's/v//')_linux_amd64.tar.gz
https://github.com/helmfile/helmfile/releases/download/v1.1.9/helmfile_1.1.9_linux_amd64.tar.gz
tar -xvzf helmfile_$(echo $LATEST | sed 's/v//')_linux_amd64.tar.gz
chmod +x helmfile
mv ./helmfile /usr/local/bin
rm helmfile_$(echo $LATEST | sed 's/v//')_linux_amd64.tar.gz LICENSE README-zh_CN.md README.md
Exec
yaml
#Helm ์ฐจํธ๋ฅผ ์ค์ ๋ก ์ค์น ๋๋ ์
๋ฐ์ดํธ
helmfile sync
#diff ํ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋๋ง ์ ์ฉ (๊ถ์ฅ)
helmfile apply
#์ค์ ์ ์ฉ ์ ๋ณ๊ฒฝ์ ํ์ธ
helmfile diff
#Helm ํ
ํ๋ฆฟ๋ง ๋ ๋๋ง
helmfile template
#๋ฐฐํฌ๋ Helm ๋ฆฌ์์ค ์ญ์
helmfile destroy
#๋ฐฐํฌ๋ Helm ๋ฆฌ์์ค ์ญ์
helmfile -l name=build-image sync ํน์ ๋ฆด๋ฆฌ์ค๋ง ๋ฐฐํฌ
#ํน์ ๋ฆด๋ฆฌ์ค๋ง ์ญ์
helmfile -l name=old-build-deploy-image destroy
#ํน์ ํ๊ฒฝ(dev)์ผ๋ก ๋ฐฐํฌ (environments ์ฌ์ฉ ์)
helmfile -e dev apply
Detailed comparison of sync vs apply differences
| item |
helmfile sync
|
helmfile apply
|
| How it runs | Force synchronization of all releases | Distribute only releases with changes |
| Whether revision increases? | Always increase (helm upgrade is forced) | Maintained without change |
| example situation | Even if the settings are the same, revision 1 โ 2 | If the settings are the same, keep revision 1 |
| Recommended use | Forced redistribution, initial installation | Proceed after routine distribution and change inspection |
For routine deployments, we recommend helmfile apply! Only releases with changes are updated, so it is efficient and safe.
Use helmfile sync only when you need to force redistribution of all releases
Global Flags
bash
# ./helmfile.yaml ์ธ ์ง์
helmfile -f $filename
Samples
Basic
yaml
# helmfile.yaml
repositories:
- name: bitnami
url: https://charts.bitnami.com/bitnami
releases:
- name: redis
namespace: default
chart: bitnami/redis
version: 17.1.3
values:
- values/redis-values.yaml
Specify release as git repo
- public
yaml
# helm-git powered repository: You can treat any Git repository as a charts repository
- name: polaris
url: git+https://github.com/reactiveops/polaris@deploy/helm?ref=master
- private
yaml
repositories:
- name: polaris
url: git+https:/
/<USERNAME>:<TOKEN>@github.com/reactiveops/polaris@deploy/helm?ref=master
ArgoCD installation example
helmfile.yaml
yaml
#Argo Helm ์ ์ฅ์ ์ถ๊ฐ
repositories:
- name: argo
url: https://argoproj.github.io/argo-helm
- name: dandydeveloper
url: https://dandydeveloper.github.io/charts/
releases:
- name: argocd
namespace: argocd
createNamespace: true
chart: ./
version: 7.7.0
values:
- values/mgmt.yaml
helmDefaults:
#์ค์น ์๋ฃ๊น์ง ๋๊ธฐ
wait: true
#600์ด(10๋ถ)
timeout: 600
#์คํจ ์ ๋กค๋ฐฑ
atomic: true
#์คํจ ์ ์ ๋ฆฌ
cleanupOnFail: true
# Hooks to ensure proper installation and upgrades
hooks:
#์ค์น ์ ์์กด์ฑ ์
๋ฐ์ดํธ
- events: ["presync"]
showlogs: true
command: "helm"
args:
- "dependency"
- "update"
- "."
#๋ค์์คํ์ด์ค ์์ฑ ํ์ธ
- events: ["presync"]
showlogs: true
command: "kubectl"
args:
- "create"
- "namespace"
- "argocd"
- "--dry-run=client"
- "-o"
- "yaml"
- "||"
- "true"
Application.yaml
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: gitlab-runners
spec:
source:
repoURL: [email protected]:server/argocd-applicationset.git
path: kuberntes-infra/cicd/gitlab-runner # helmfile.yaml์ด ์๋ ๋๋ ํ ๋ฆฌ
plugin:
name: helmfile # ArgoCD์ helmfile ํ๋ฌ๊ทธ์ธ ์ค์น ํ์
destination:
server: https://kubernetes.default.svc
namespace: gitlab-runner
Applicationset.yaml
yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: gitlab-runners-applicationset
spec:
generators:
- list:
elements:
- name: build-image
values: build.yaml
- name: deploy-image
values: deploy.yaml
template:
metadata:
name: '{{name}}-runner'
spec:
source:
repoURL: [email protected]:server/argocd-applicationset.git
path: kuberntes-infra/cicd/gitlab-runner
plugin:
name: helmfile
env:
- name: HELMFILE_RELEASE_NAME
value: '{{name}}'
- name: HELMFILE_VALUES_FILE
value: 'values/{{values}}'
Features
Deployment according to environment
bash
helmfile -e dev apply
helmfile -e prod apply
Environment classification method
- dir classification
bash
helmfile.d/dev/helmfile.yaml
helmfile.d/prod/helmfile.yaml
- Division within yaml
yaml
environments:
dev:
values:
- values/dev.yaml
prod:
values:
- values/prod.yaml
ArgoCD Plugin Settings
- required
- helm-git
bash
helm plugin install https://github.com/aslafy-z/helm-git --version 1.4.1f
- age
bash
go install filippo.io/age/cmd/...@latest
- Repo-server
ARGOCD_EXEC_TIMEOUTUndefined. Default: 90s- If the template takes a long time, the following error occurs
bash
Failed to load target state: failed to generate manifest for source 1 of 1: rpc error: code = DeadlineExceeded desc = context deadline exceeded
- All sidecars in the following two resources
deploy/argocd-repo-serverwith pluginsts/argocd-application-controller
bash
ARGOCD_EXEC_TIMEOUT=5m
- Nginx-Ingress
- Default timeout 60s
- If the template takes a long time, the following error occurs
bash
{"level":"fatal","msg":"rpc error: code = Unknown desc = POST https://argocd.Enterprise Cloud.hanacloudia.com:443/application.ApplicationService/Get failed with status code 504","time":"2025-12-24T15:01:43+09:00"}
ing/argo-cd-argocd-server
bash
annotations:
nginx.ingress.kubernetes.io/proxy-connect-timeout: "450"
nginx.ingress.kubernetes.io/proxy-send-timeout: "450"
nginx.ingress.kubernetes.io/proxy-read-timeout: "450"
- ArgoCD Installation Sample
- Without age key file
bash
#๊ฐ ํ์ผ์ ์ค์ํ ์์ฑ์ ์ํธํํ๋ ๋ฐ ๊ฐ์ธ ํค๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์๋ค๋ฉด ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ๋ฉด Argo CD์ Helmfile ํ๋ฌ๊ทธ์ธ์ ์ค์นํ ์ ์์ต๋๋ค... Helmfile .
cat <<EOF | helmfile apply -f -
repositories:
- name: argo
url: https://argoproj.github.io/argo-helm
releases:
- name: argocd
namespace: argocd
labels:
app: argocd
chart: argo/argo-cd
version: ~7.8.23
values:
- repoServer:
extraContainers:
- name: plugin
image: lucj/argocd-plugin-helmfile:latest
command: ["/var/run/argocd/argocd-cmp-server"]
securityContext:
runAsNonRoot: true
runAsUser: 999
volumeMounts:
- mountPath: /var/run/argocd
name: var-files
- mountPath: /home/argocd/cmp-server/plugins
name: plugins
EOF
- Include age key file
bash
#๊ฐ ํ์ผ์ ๋ฏผ๊ฐํ ์์ฑ์ ์ํธํํ๊ธฐ ์ํด ๊ฐ์ธ ํค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด Argo CD๋ฅผ ์ค์นํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด key.txt ํ์ผ์ age ํค๊ฐ ์์ฑ๋๊ฑฐ๋ ๊ธฐ์กด ํค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
cat <<EOF | helmfile apply -f -
repositories:
- name: argo
url: https://argoproj.github.io/argo-helm
releases:
- name: argocd
namespace: argocd
labels:
app: argocd
chart: argo/argo-cd
version: ~7.8.23
values:
- repoServer:
volumes:
- name: age
secret:
secretName: age
extraContainers:
- name: plugin
image: lucj/argocd-plugin-helmfile:latest
command: ["/var/run/argocd/argocd-cmp-server"]
securityContext:
runAsNonRoot: true
runAsUser: 999
env:
- name: SOPS_AGE_KEY_FILE
value: /app/config/age/key.txt
volumeMounts:
- name: age
mountPath: "/app/config/age/"
- mountPath: /var/run/argocd
name: var-files
- mountPath: /home/argocd/cmp-server/plugins
name: plugins
hooks:
- events: ["presync"]
showlogs: true
command: "/bin/bash"
args:
- "-ec"
- |
# Create a sops / age secret key if none already exists
if [[ -f ./key.txt ]]; then
echo "age key.txt file already exists"
else
age-keygen > ./key.txt
fi
# Create secret to give Argo access to the age key
kubectl create ns argocd || true
kubectl -n argocd create secret generic age --from-file=key.txt=./key.txt || true
- events: ["postuninstall"]
showlogs: true
command: "/bin/bash"
args:
- "-ec"
- |
# Remove secret created in the presync hook
kubectl -n argocd delete secret age
EOF
- Application Sample
bash
#์ํ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์
์ธ VotingApp์ ์ ์ํ๋ ๋ค์ Argo CD ์ ํ๋ฆฌ์ผ์ด์
๋ฆฌ์์ค๋ฅผ ์์ฑํ์ธ์. Argo CD๋ ์ง์ ๋ (๋ฐ๋ชจ) ์ ์ฅ์์ ์๋ helmfile.yaml ํ์ผ์ ์ฌ์ฉํ์ฌ ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์๋์ผ๋ก ๋ฐฐํฌํฉ๋๋ค.
cat <<EOF | kubectl apply -f -
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: votingapp
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: default
source:
repoURL: https://gitlab.com/lucj/luc.run.git
targetRevision: main
path: misc/helmfiles/votingapp
plugin: {}
destination:
server: https://kubernetes.default.svc
namespace: vote
syncPolicy:
automated: {}
syncOptions:
- CreateNamespace=true
EOF




Leave a Reply