در اين سري از پست ها قصد دارم تا شما را با ArgoCD آشنا کنم.
مواردي که در اين پست به آن مي پردازيم به شرح زير است:
اين روزها کمتر کسي است که در حوزه ي برنامه نويسي کار کند و اسمي از واژه ي devops را نشنيده باشد.
در اين پست قصد تعريف و مفاهيم دواپس را ندارم زيرا کسي که در حال مطالعه ي اين پست است حتما با اين مفاهيم آشنايي دارد.
همانطور که مي دانيد يکي از مفاهيم خيلي مهم در زمينه ي DevOps فرايند CI/CD مي باشد که در تصوير زير اين فرآيند به خوبي به تصوير کشيده شده است.
با توجه به تصوير بالا مشاهده مي شود که يکي از بخش هاي مهم بخش deploy کردن app به صورت مداوم مي باشد، يعني هروقت ورژن جديدي از نرم افزار توليد شد و نرم افزار build شد نوبت به deploy کردن آن بر روي سرور Production مي شود که در اين قسمت ArgoCD اين عمليات را انجام ميدهد.
در اصل کاري که ArgoCD انجام مي دهد اين است که به صورت پيوسته يک repo را برروسي ميکند که آيا ورژن جديدي از نرم افزار توليد شده يا خير، اگر توليد شده آن را برداشته و در سرور Prodcution پياده سازي مي کند(البته اگر نسخه ي جديد با مشکلي روبه رو شد ArgoCD به صورت خودکار به روي ورژن قبلي rollback مي کند).
براي نصب ArgoCD ما احتياج به يک کلاستر کوبرنتيس داريم. کلاستر ما تشکيل شده از شش نود مي باشد که سه تاي آنها در نقش master node و سه تاي ديگر در نقش worker عمل مي کنند.
اگر در سرور master دستور زير را وارد کنيد اطلاعات کلي نود ها و وضعيت کلاستر را به شما نشان مي دهد.
kubectl get nodes -o wide
همانطور که مشاهده مي کنيد کلاستري ما تشکيل شده از 6 نود مي باشد که از kubelet 1.24 استفاده ميکند و به عنوان container run time بجاي docker از containerd استفاده ميکند (زيرا از ورژن 1.24 کوبرنتيس ديگر از docker پشتيباني نمي کند).
براي نصب ArgoCD از وبسايت آن استفاده کرده ايم.
براي نصب ArgoCD در ابتدا يک namespace به همين نام ايجاد مي کنيم
kubectl create namespace argocd
سپس يک directory به نام argocd بسازيد و وارد آن شويد.
mkdir argocd cd argocd/
در مرحله بعد لينکي که در وبسايت است را با دستور wget دريافت کنيد(دقت کنيد هميشه از همان وبسايت که در بالا معرفي کرديم فايل را دانلود کنيد شايد تغييراتي در yaml فايل ايجاد شده باشد ).
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
با اجراي اين دستور فايل yaml اي براي شما در همين مسير دانلود مي شود. که نام فايل install.yaml است.
حال با دستور زير آن را پياده سازي کنيد
kubectl apply -f install.yaml -n argocd
براي مانيتور کردن وضعيت اين که پادها در چه وضعيتي هستند از دستور زير کمک بگيريد
watch kubectl get all -n argocd
بسته به سرعت اينترنت پادها بعد از مدتي روي سرورها پياده سازي ميشوند(به دليل دانلود کردن image ها) که در نهايت خروجي دستور بالا به شرح زير است.
همانطور که مشاهده مي کنيد تمام پاد ها در حالت running هستند. حال اگر بخواهيم از طريق web ui به اين ArgoCD دسترسي داشته باشيم بايد سرويس argocd-server را به صورت NodePort تعريف کنيم تا بتوانيم از بيرون به اين app دسترسي داشته باشيم.
با دستور زير اين عمليات را انجام دهيد:
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
حال با دستور زير پورتي که براي argocd باز شده را ميتوانيد مشاهده کنيد:
kubectl get svc -n argocd
که خروجي به صورت زير است که خط قرمز نشان دهنده ي پورتي است که ميتوانيم از بيرون به آن دسترسي داشته باشيم
مشاهده کنيد که ميتوان از پورت 30033 به argocd دسترسي پيدا کرد.(دقت کنيد که اين پورت به صورت random مي باشد و ممکن است براي شما متفاوت باشد).
حال وارد يک مرورگر شويد و با زدن IP يکي از worker ها(مهم نيست که کدام worker است) و پورت به محيط گرافيکي ArgoCD دست پيدا کرد. براي مثال ما از IP زير استفاده ميکنيم
https://192.168.9.50:30033
اگر همه مراحل قبل را به درستي رفته باشيد بايد صحفه ي اول argocd به صورت زير براي شما به نمايش در آيد
به صورت پيش فرض يوزر argocd با نام admin تعريف شده است و براي پيدا کردن پسورد کافي است که دستور زير را در سرور master وارد کنيد
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
خروجي اين دستور رمز argocd مي باشد. (حتما بعد از login کردن پسورد را از قسمت User Info تغيير دهيد).
در قسمت هاي بعد قصد دارم تا يک app که به صورت containerized توسعه يافته است را با argocd را پياده سازي کنم و شما را با فرايند CD و همچنين قابليت هاي ArgoCD آشنا کنم.
اميدوارم که اين براتون مفيد بوده باشه و بتونيد در محيط هاي عملياتيتون از ArgoCDاستفاده کنيد
امیدوارم با خوندن این مقاله مسير پيشرفت در اين حوزه براتون راحت تر بشه . اگر نظری یا سوالی دارین زیر همین پست پاسخگو هستم.