پیاده سازی GitOps با Argocd – DEV Community

Summarize this content to 400 words in Persian Lang
هدف این پروژه نشان دادن نحوه ادغام مفاهیم GitOps با استفاده از GitHub Actions، ArgoCD و Kubernetes است.
از طریق این راهنما، میتوانید تغییرات را بهطور خودکار از طریق GitHub Actions و ArgoCD ایجاد کنید. در این مثال، Kubernetes و ArgoCD را از طریق Minikube اجرا خواهیم کرد.
پیش نیازها
راه اندازی خارجی
به پانل Dockerhub خود بروید و یک توکن شخصی ایجاد کنید
یک فورک از این پروژه ایجاد کنید و به صفحه تنظیمات پروژه بروید.
را کلیک کنید Secrets and variables > Actions و 3 متغیر ایجاد کنید:
DOCKER_USERNAME – نام کاربری Dockerhub شما
DOCKER_REGISTRY – docker.io
DOCKER_PASSWORD – توکن شخصی ایجاد شده در مرحله قبل
راه اندازی محلی
Docker را راه اندازی کنید
minikube را راه اندازی کنید
minikube start
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
هنگامی که minikube آماده و اجرا شد، دو وابستگی پروژه را نصب کنید:
نصب Argocd
به پوشه بروید infra/k8s و موارد زیر را اجرا کنید:
kubectl apply -k kustomization.yaml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نصب Skater Reloader
Stakater Reloader را می توان با استفاده از پیکربندی راه دور آن اعمال کرد. برای انجام این کار، دستور زیر را اجرا کنید:
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
پیکربندی Argocd
اول از همه، شما باید به کنسول Argocd دسترسی داشته باشید. برای انجام این کار، دستور را اجرا کنید:
minikube service argocd-server -n argocd –url
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی چیزی شبیه این خواهد بود:
http://127.0.0.1:55643
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکنون می توانید با استفاده از لینک بالا به کنسول Argocd دسترسی پیدا کنید.
به طور پیش فرض، Argocd دارای کاربر ادمین فعال و رمز عبور پیش فرض است. برای تجسم این رمز عبور باید:
غلاف مسئول argocd-server را شناسایی کنید
kubectl get pods -n argocd
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی چیزی شبیه این خواهد بود
نام
آماده
وضعیت
شروع مجدد
سن
argocd-application-controller-0
1/1
در حال دویدن
0
125 متر
argocd-applicationset-controller-86fc5c85-bgt82
1/1
در حال دویدن
0
125 متر
argocd-dex-server-7f4689df5-p8fwx
1/1
در حال دویدن
0
125 متر
argocd-notifications-controller-59f78959c8-m2fsh
1/1
در حال دویدن
0
125 متر
argocd-redis-74cb89f466-t549k
1/1
در حال دویدن
0
125 متر
argocd-repo-server-6578ccfc67-txds5
1/1
در حال دویدن
0
125 متر
argocd-server-854c79df45-ff5zs
1/1
در حال دویدن
0
125 متر
غلاف مورد نیاز ما غلاف است argocd-server-854c79df45-ff5zs. پس از شناسایی پاد، دستور زیر را برای دریافت رمز عبور پیش فرض اجرا کنید:
kubectl exec -it argocd-server-854c79df45-ff5zs -n argocd — argocd admin initial-password
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی چیزی شبیه به این خواهد بود:
Sqfjox8ceceIosuW
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
یا
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=”{.data.password}” | base64 -d
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی چیزی شبیه به این خواهد بود:
Sqfjox8ceceIosuW%
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
فینال را نادیده بگیرید %
با توجه به آن، اکنون باید به کنسول Argocd دسترسی داشته باشید. به url ایجاد شده توسط minikube بروید و وارد شوید admin به عنوان نام کاربری و رمز عبور نمایش داده شده توسط دستور بالا.
به محض ورود، صفحه ای مانند این را مشاهده خواهید کرد
در پروژه شما، زمانی که این پروژه را از ابتدا ایجاد می کنید، خالی خواهد بود. در اسکرین شات خود، من قبلاً برنامه را ایجاد کرده ام و به همین دلیل می توانید آن را در تصویر فهرست شده مشاهده کنید.
حرکت به Settings > Repositories
را کلیک کنید Connect Repo. در این مرحله باید یک کلید ssh ایجاد کنید و Argocd را از طریق ssh به مخزن Github خود متصل کنید.
دستور زیر را اجرا کنید:
ssh-keygen -t ed25519 -C “” -f gitops-argocd -P “”
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی چیزی شبیه به این خواهد بود:
Generating public/private ed25519 key pair.
Your identification has been saved in gitops-argocd
Your public key has been saved in gitops-argocd.pub
The key fingerprint is:
SHA256:7FXbnyKfvckbD1eMhXvTDfyPqaS23sVCa0WGlBsK7UY
The key’s randomart image is:
+–[ED25519 256]–+
| . .. |
| . E.oo . |
| + .oo* .|
| . +..= Bo|
| S.. o =.B|
| . . . + ==|
| . .=.*o+|
| .=o+=o+|
| o+.oo *+|
+—-[SHA256]—–+
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
کلید را با پسوند pub. کپی کنید
cat gitops-argocd.pub
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
به مخزن Github خود بروید و روی آن کلیک کنید Settings > Deploy keys > Add deploy key
آن را نامگذاری کنید و کلید کپی شده را جایگذاری کنید.
حالا به کنسول Argocd برگردید و روی آن کلیک کنید Connect Repo. کلیدی را که تولید کرده اید قرار دهید و روی آن کلیک کنید Connect.
مخزن فهرست شده را خواهید دید. مطمئن شوید که می توانید وضعیت را ببینید Successful
روی 3 نقطه کلیک کنید تا منو باز شود و سپس Create Application
شما به صفحه داشبورد هدایت می شوید که در آنجا می توانید برنامه را ایجاد کنید.
برای قسمت Project باید پیش فرض را انتخاب کنید.
تا قسمت Source به پایین اسکرول کنید
فیلدها را به صورت زیر پر کنید:
Revision: شاخه ای که می خواهید همگام سازی کنید، در این مثال ما main را همگام سازی می کنیم
Path: محل پوشه ای که Argocd می تواند مانیفست های kubernetes را پیدا کند. در این پروژه به infra/k8s
برای بخش مقصد، فیلدها را با مقادیر زیر پر کنید:
URL مخزن: در جعبه ترکیبی انتخاب کنید
فضای نام: Defautl
به بخش آخر بروید و مطمئن شوید که دایرکتوری را انتخاب کرده اید.
در قسمت exclude اضافه کنید kustomization.yaml. این برای جلوگیری از Argocd برای بازسازی خود است.
پس از اتمام، روی Create در بالای modal کلیک کنید و voilà، برنامه شما تقریباً تمام شده است.
روی App Details کلیک کنید، تا «SYNC POLICY» بروید و در AUTOMATED روی SYNC کلیک کنید. این برای نظارت Argocd بر مخزن / شاخه / مسیر کافی است.
در نهایت، برنامه شما به شکل زیر خواهد بود:
اگر نمی توانید این را ببینید، فقط روی دکمه SYNC در بالای صفحه کلیک کنید و Argocd با مخزن شما همگام سازی می شود.
همانطور که در مرحله قبل همگام سازی خودکار را فعال کرده اید، Argocd هر 3 دقیقه یک بار مخزن را تماشا می کند. فقط با زدن دکمه App Details و غیرفعال کردن آن در بخش POLICY SYNC میتوانید آن را غیرفعال کنید.
هر بار که می خواهید برنامه خود را همگام کنید، فقط روی SYNC کلیک کنید و Argocd مانیفست های شما را در داخل kubernetes به روز می کند.
چگونه آن را تست کنیم؟
سه راه برای اجرای این پروژه وجود دارد:
انجام هر گونه تغییر در پوشه src
ایجاد یک تگ جدید
تغییر kubernetes در infra/k8s آشکار می شود
انجام هر گونه تغییر در پوشه src
این ساده ترین راه برای آزمایش آن است. فقط کافیست هر تغییری را در پوشه src انجام دهید و آن را انجام دهید. یک PR باز کنید و تغییرات را در شاخه اصلی ادغام کنید. این خط لوله را راه اندازی می کند و تصویر داکر جدید را ایجاد می کند. تصویر را به رجیستری کانتینر هدایت می کند، در این مثال ما از docker.io استفاده می کنیم.
خط لوله تصویر را به رجیستری docker منتقل می کند و فایل infra/k8s/deployment.yaml و شاخه اصلی را با نام تصویر جدید به روز می کند.
Argocd تغییر را تشخیص داده و استقرار kubernetes را با تصویر جدید به روز می کند. نام تگ تصویر همیشه خواهد بود latest
ایجاد یک تگ جدید
این دومین راه برای تست آن است. فقط یک تگ جدید ایجاد کنید و آن را فشار دهید. این فرآیند همان جریان قبلی را دنبال می کند، با این حال، تصویر برچسب را به عنوان نام تگ خود می گیرد.
تغییر kubernetes در infra/k8s آشکار می شود
این سومین راه تست آن است. فقط کافی است هر تغییری را در پوشه infra/k8s اعمال کنید و آن را به مخزن فشار دهید. در این صورت، Github Actions راه اندازی نمی شود و Argocd هر چیزی را که تغییر داده اید به روز می کند.
به عنوان مثال، فرض کنید مقداری را در configmap تغییر داده اید. Argocd این را شناسایی می کند و فقط کانفیگ مپ را به روز می کند، زیرا این تنها مانیفست به روز شده است.
چگونه اپلیکیشن را تجسم کنیم؟
این پروژه دارای یک برنامه NodeJs است که صفحه index.html ساده را نشان می دهد. در کانفیگ مپ، یک متغیر COLOR وجود دارد. این متغیر به index.html منعکس می شود
COLOR روی عنوان “GitOps – ArgoCD” و “Check my Github” تاثیر می گذارد.
Minikube برای دسترسی به سرویس از دستگاه محلی شما نیاز به ارائه پورت و آدرس اینترنتی دارد. برای انجام این کار، دستور را اجرا کنید:
minikube service argocd-server -n argocd –url
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی چیزی شبیه این خواهد بود:
http://127.0.0.1:55643
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این URL را در مرورگر خود باز کنید و برنامه را بررسی کنید. برای مشاهده عملکرد تمام جریان، سعی کنید رنگ را در configmap تغییر دهید و تغییرات را به شاخه اصلی فشار دهید. یک لحظه صبر کنید تا Argocd تغییرات را مجدداً شناسایی کند و شروع به ایجاد تغییرات کند. با دسترسی به کنسول Argocd می توانید این عملیات را دنبال کنید.
هنگامی که به روز رسانی انجام شد، فقط صفحه برنامه اکسپرس را رفرش کنید و تمام. اگر رنگ معتبری را وارد کرده باشید و این راهنما را به درستی دنبال کنید، تغییرات را مشاهده خواهید کرد.
می توانید پروژه کامل را اینجا ببینید
هدف این پروژه نشان دادن نحوه ادغام مفاهیم GitOps با استفاده از GitHub Actions، ArgoCD و Kubernetes است.
از طریق این راهنما، میتوانید تغییرات را بهطور خودکار از طریق GitHub Actions و ArgoCD ایجاد کنید. در این مثال، Kubernetes و ArgoCD را از طریق Minikube اجرا خواهیم کرد.
پیش نیازها
راه اندازی خارجی
به پانل Dockerhub خود بروید و یک توکن شخصی ایجاد کنید
یک فورک از این پروژه ایجاد کنید و به صفحه تنظیمات پروژه بروید.
را کلیک کنید Secrets and variables
> Actions
و 3 متغیر ایجاد کنید:
-
DOCKER_USERNAME
– نام کاربری Dockerhub شما -
DOCKER_REGISTRY
– docker.io -
DOCKER_PASSWORD
– توکن شخصی ایجاد شده در مرحله قبل
راه اندازی محلی
- Docker را راه اندازی کنید
- minikube را راه اندازی کنید
minikube start
هنگامی که minikube آماده و اجرا شد، دو وابستگی پروژه را نصب کنید:
نصب Argocd
به پوشه بروید infra/k8s
و موارد زیر را اجرا کنید:
kubectl apply -k kustomization.yaml
نصب Skater Reloader
Stakater Reloader را می توان با استفاده از پیکربندی راه دور آن اعمال کرد. برای انجام این کار، دستور زیر را اجرا کنید:
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
پیکربندی Argocd
اول از همه، شما باید به کنسول Argocd دسترسی داشته باشید. برای انجام این کار، دستور را اجرا کنید:
minikube service argocd-server -n argocd --url
خروجی چیزی شبیه این خواهد بود:
http://127.0.0.1:55643
اکنون می توانید با استفاده از لینک بالا به کنسول Argocd دسترسی پیدا کنید.
به طور پیش فرض، Argocd دارای کاربر ادمین فعال و رمز عبور پیش فرض است. برای تجسم این رمز عبور باید:
- غلاف مسئول argocd-server را شناسایی کنید
kubectl get pods -n argocd
خروجی چیزی شبیه این خواهد بود
نام | آماده | وضعیت | شروع مجدد | سن |
---|---|---|---|---|
argocd-application-controller-0 | 1/1 | در حال دویدن | 0 | 125 متر |
argocd-applicationset-controller-86fc5c85-bgt82 | 1/1 | در حال دویدن | 0 | 125 متر |
argocd-dex-server-7f4689df5-p8fwx | 1/1 | در حال دویدن | 0 | 125 متر |
argocd-notifications-controller-59f78959c8-m2fsh | 1/1 | در حال دویدن | 0 | 125 متر |
argocd-redis-74cb89f466-t549k | 1/1 | در حال دویدن | 0 | 125 متر |
argocd-repo-server-6578ccfc67-txds5 | 1/1 | در حال دویدن | 0 | 125 متر |
argocd-server-854c79df45-ff5zs | 1/1 | در حال دویدن | 0 | 125 متر |
غلاف مورد نیاز ما غلاف است argocd-server-854c79df45-ff5zs
. پس از شناسایی پاد، دستور زیر را برای دریافت رمز عبور پیش فرض اجرا کنید:
kubectl exec -it argocd-server-854c79df45-ff5zs -n argocd -- argocd admin initial-password
خروجی چیزی شبیه به این خواهد بود:
Sqfjox8ceceIosuW
یا
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
خروجی چیزی شبیه به این خواهد بود:
Sqfjox8ceceIosuW%
فینال را نادیده بگیرید %
با توجه به آن، اکنون باید به کنسول Argocd دسترسی داشته باشید. به url ایجاد شده توسط minikube بروید و وارد شوید admin
به عنوان نام کاربری و رمز عبور نمایش داده شده توسط دستور بالا.
به محض ورود، صفحه ای مانند این را مشاهده خواهید کرد
در پروژه شما، زمانی که این پروژه را از ابتدا ایجاد می کنید، خالی خواهد بود. در اسکرین شات خود، من قبلاً برنامه را ایجاد کرده ام و به همین دلیل می توانید آن را در تصویر فهرست شده مشاهده کنید.
حرکت به Settings > Repositories
را کلیک کنید Connect Repo
. در این مرحله باید یک کلید ssh ایجاد کنید و Argocd را از طریق ssh به مخزن Github خود متصل کنید.
دستور زیر را اجرا کنید:
ssh-keygen -t ed25519 -C "" -f gitops-argocd -P ""
خروجی چیزی شبیه به این خواهد بود:
Generating public/private ed25519 key pair.
Your identification has been saved in gitops-argocd
Your public key has been saved in gitops-argocd.pub
The key fingerprint is:
SHA256:7FXbnyKfvckbD1eMhXvTDfyPqaS23sVCa0WGlBsK7UY
The key's randomart image is:
+--[ED25519 256]--+
| . .. |
| . E.oo . |
| + .oo* .|
| . +..= Bo|
| S.. o =.B|
| . . . + ==|
| . .=.*o+|
| .=o+=o+|
| o+.oo *+|
+----[SHA256]-----+
کلید را با پسوند pub. کپی کنید
cat gitops-argocd.pub
به مخزن Github خود بروید و روی آن کلیک کنید Settings
> Deploy keys
> Add deploy key
آن را نامگذاری کنید و کلید کپی شده را جایگذاری کنید.
حالا به کنسول Argocd برگردید و روی آن کلیک کنید Connect Repo
. کلیدی را که تولید کرده اید قرار دهید و روی آن کلیک کنید Connect
.
مخزن فهرست شده را خواهید دید. مطمئن شوید که می توانید وضعیت را ببینید Successful
روی 3 نقطه کلیک کنید تا منو باز شود و سپس Create Application
شما به صفحه داشبورد هدایت می شوید که در آنجا می توانید برنامه را ایجاد کنید.
برای قسمت Project باید پیش فرض را انتخاب کنید.
تا قسمت Source به پایین اسکرول کنید
فیلدها را به صورت زیر پر کنید:
- Revision: شاخه ای که می خواهید همگام سازی کنید، در این مثال ما main را همگام سازی می کنیم
- Path: محل پوشه ای که Argocd می تواند مانیفست های kubernetes را پیدا کند. در این پروژه به
infra/k8s
برای بخش مقصد، فیلدها را با مقادیر زیر پر کنید:
- URL مخزن: در جعبه ترکیبی انتخاب کنید
- فضای نام: Defautl
به بخش آخر بروید و مطمئن شوید که دایرکتوری را انتخاب کرده اید.
در قسمت exclude اضافه کنید kustomization.yaml
. این برای جلوگیری از Argocd برای بازسازی خود است.
پس از اتمام، روی Create در بالای modal کلیک کنید و voilà، برنامه شما تقریباً تمام شده است.
روی App Details کلیک کنید، تا «SYNC POLICY» بروید و در AUTOMATED روی SYNC کلیک کنید. این برای نظارت Argocd بر مخزن / شاخه / مسیر کافی است.
در نهایت، برنامه شما به شکل زیر خواهد بود:
اگر نمی توانید این را ببینید، فقط روی دکمه SYNC در بالای صفحه کلیک کنید و Argocd با مخزن شما همگام سازی می شود.
همانطور که در مرحله قبل همگام سازی خودکار را فعال کرده اید، Argocd هر 3 دقیقه یک بار مخزن را تماشا می کند. فقط با زدن دکمه App Details و غیرفعال کردن آن در بخش POLICY SYNC میتوانید آن را غیرفعال کنید.
هر بار که می خواهید برنامه خود را همگام کنید، فقط روی SYNC کلیک کنید و Argocd مانیفست های شما را در داخل kubernetes به روز می کند.
چگونه آن را تست کنیم؟
سه راه برای اجرای این پروژه وجود دارد:
- انجام هر گونه تغییر در پوشه src
- ایجاد یک تگ جدید
- تغییر kubernetes در infra/k8s آشکار می شود
انجام هر گونه تغییر در پوشه src
این ساده ترین راه برای آزمایش آن است. فقط کافیست هر تغییری را در پوشه src انجام دهید و آن را انجام دهید. یک PR باز کنید و تغییرات را در شاخه اصلی ادغام کنید. این خط لوله را راه اندازی می کند و تصویر داکر جدید را ایجاد می کند. تصویر را به رجیستری کانتینر هدایت می کند، در این مثال ما از docker.io استفاده می کنیم.
خط لوله تصویر را به رجیستری docker منتقل می کند و فایل infra/k8s/deployment.yaml و شاخه اصلی را با نام تصویر جدید به روز می کند.
Argocd تغییر را تشخیص داده و استقرار kubernetes را با تصویر جدید به روز می کند. نام تگ تصویر همیشه خواهد بود latest
ایجاد یک تگ جدید
این دومین راه برای تست آن است. فقط یک تگ جدید ایجاد کنید و آن را فشار دهید. این فرآیند همان جریان قبلی را دنبال می کند، با این حال، تصویر برچسب را به عنوان نام تگ خود می گیرد.
تغییر kubernetes در infra/k8s آشکار می شود
این سومین راه تست آن است. فقط کافی است هر تغییری را در پوشه infra/k8s اعمال کنید و آن را به مخزن فشار دهید. در این صورت، Github Actions راه اندازی نمی شود و Argocd هر چیزی را که تغییر داده اید به روز می کند.
به عنوان مثال، فرض کنید مقداری را در configmap تغییر داده اید. Argocd این را شناسایی می کند و فقط کانفیگ مپ را به روز می کند، زیرا این تنها مانیفست به روز شده است.
چگونه اپلیکیشن را تجسم کنیم؟
این پروژه دارای یک برنامه NodeJs است که صفحه index.html ساده را نشان می دهد. در کانفیگ مپ، یک متغیر COLOR وجود دارد. این متغیر به index.html منعکس می شود
COLOR روی عنوان “GitOps – ArgoCD” و “Check my Github” تاثیر می گذارد.
Minikube برای دسترسی به سرویس از دستگاه محلی شما نیاز به ارائه پورت و آدرس اینترنتی دارد. برای انجام این کار، دستور را اجرا کنید:
minikube service argocd-server -n argocd --url
خروجی چیزی شبیه این خواهد بود:
http://127.0.0.1:55643
این URL را در مرورگر خود باز کنید و برنامه را بررسی کنید. برای مشاهده عملکرد تمام جریان، سعی کنید رنگ را در configmap تغییر دهید و تغییرات را به شاخه اصلی فشار دهید. یک لحظه صبر کنید تا Argocd تغییرات را مجدداً شناسایی کند و شروع به ایجاد تغییرات کند. با دسترسی به کنسول Argocd می توانید این عملیات را دنبال کنید.
هنگامی که به روز رسانی انجام شد، فقط صفحه برنامه اکسپرس را رفرش کنید و تمام. اگر رنگ معتبری را وارد کرده باشید و این راهنما را به درستی دنبال کنید، تغییرات را مشاهده خواهید کرد.
می توانید پروژه کامل را اینجا ببینید