Adobe Creative Cloud Tuning on macOS

๐Ÿ’ก 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
  1. dir classification
bash
helmfile.d/dev/helmfile.yaml
   helmfile.d/prod/helmfile.yaml
  1. 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_TIMEOUT Undefined. 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-server with plugin
    • sts/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

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *