Flux CD چیست و چگونه کار می کند؟ [Tutorial]
![Flux CD چیست و چگونه کار می کند؟ [Tutorial] Flux CD چیست و چگونه کار می کند؟ [Tutorial]](https://nabfollower.com/blog/wp-content/uploads/2024/08/Flux-CD-چیست-و-چگونه-کار-می-کند؟-Tutorial-780x470.png)
Summarize this content to 400 words in Persian Lang
Flux CD با استفاده از فرآیند GitOps تحویل مستمر به خوشه های Kubernetes را پیاده سازی می کند. مجموعهای از کنترلکنندههای Kubernetes را ارائه میکند که وضعیت خوشه شما را برای مطابقت با پیکربندی تعریفشده در مخازن Git و سایر منابع همگامسازی میکند.
در این مقاله، ویژگی های کلیدی Flux CD را بررسی می کنیم و نحوه عملکرد آنها را توضیح می دهیم. ما همچنین یک آموزش ساده ارائه خواهیم داد که شما را از طریق استقرار اولین برنامه خود راهنمایی می کند – بیایید شروع کنیم!
Flux CD چیست؟
Flux CD یک ابزار تحویل پیوسته (CD) است که استقرار برنامه های مجهز به GitOps را در خوشه های Kubernetes خودکار می کند. این به شما امکان می دهد هر بار که کد خود را تغییر می دهید، استقرار برنامه Kubernetes را خودکار کنید.
Flux CD کنترلرهایی را در خوشه Kubernetes شما اجرا میکند که بهطور دورهای بهروزرسانیهای منابع مخزنی را که متصل کردهاید بررسی میکنند. هنگامی که تغییرات انجام می شود، Flux CD اشیاء Kubernetes را اضافه، جایگزین و حذف می کند تا استقرار در خوشه شما را به روز کند. این تضمین می کند که برنامه ها به طور مداوم با حداقل خطر مستقر شوند.
GitOps به استفاده از مخازن Git به عنوان تنها منبع حقیقت برای عملیات شما اشاره دارد. شما پیکربندی زیرساخت خود را به عنوان فایل های اعلامی در مخازن خود تعریف می کنید. سپس آن فایلها توسط ابزارهایی مانند Flux CD مصرف میشوند که بهطور خودکار تغییرات مورد نیاز را اعمال میکنند تا وضعیت زیرساخت شما با پیکربندی که اعلام کردهاید مطابقت داشته باشد.
Flux CD برای چه مواردی استفاده می شود؟
Flux CD برای خودکارسازی استقرار و مدیریت چرخه عمر برنامهها و زیرساختها در خوشههای Kubernetes استفاده میشود. این محبوب شد زیرا استقرار برنامه های پیچیده را بدون نیاز به پیکربندی دستی هر نسخه جدید آسان تر می کند. شما به سادگی می توانید تغییرات خود را انجام دهید و سپس منتظر بمانید تا Flux CD آنها را در کلاسترهای Kubernetes شما همگام کند. این به شما امکان میدهد روی ایجاد ویژگیهای جدید متمرکز بمانید و ثبات بیشتری را برای فرآیند استقرار شما فراهم میکند.
FluxCD به راحتی با:
کوبرنتیس
هلم
گرافانا
به آن
پرومتئوس
سمت چپ
کیورنو
SOPS
ویژگی ها و مزایای Flux CD
اگرچه شروع کار با Flux CD آسان است، اما ویژگیهای پیشرفته متعددی را نیز برای پشتیبانی از گردشهای کاری قدرتمند استقرار ارائه میکند:
پشتیبانی Kubernetes RBAC به شما امکان می دهد کنترل های دسترسی قوی را برای برنامه های خود پیکربندی کنید.
یکپارچهسازی با سیستمهای اعتبارسنجی مبتنی بر خطمشی مانند OPA و کنترلکنندههای پذیرش به اطمینان از سازگاری برنامههای شما کمک میکند.
میتوانید بهصورت اختیاری، وصلهها و بهروزرسانیهای تصویر را بر اساس اسکنهای کانتینرهای مستقر شده خود، با بازگرداندن به مخزن Git خود، خودکار کنید.
معماری فعال چند مستاجر Flux CD را برای خوشههایی مناسب میسازد که به تیمها و برنامههای متعدد خدمات میدهند.
سازگاری با Kubernetes Cluster API اجازه مدیریت سایر خوشه ها و عملیات تامین را می دهد.
هنگامی که با مولفه Flagger اختیاری ترکیب می شود، می توان برای پیاده سازی قناری، آبی/سبز، و A/B استفاده کرد.
یک اکوسیستم غنی از برنامههای افزودنی، رابطها و پلتفرمهای توسعه سازگار به شما امکان میدهد تجربه Flux CD خود را مطابق با روش کار خود سفارشی کنید.
به طور کلی، Flux CD به شما امکان می دهد تا به استقرار برنامه های خودکار قوی در Kubernetes دست پیدا کنید. با حذف نیاز به راهاندازی دستی یا آموزش توسعهدهندگان در مورد نحوه استفاده مستقیم از Kubernetes، پیکربندی، امنیت و انعطافپذیری سازگار را تضمین میکند.
FluxCD چگونه کار می کند؟
در سطح بالایی، Flux CD مخازن شما را برای تغییرات نظارت می کند و آنها را با وضعیت فعلی خوشه Kubernetes شما تطبیق می دهد. این یک گردش کار تحویل مستمر ایجاد می کند، جایی که تغییرات پس از اعمال بر روی مخازن شما به طور خودکار برای کاربران اعمال می شود.
Flux CD به مخازن به عنوان اشاره دارد منابع. منابع اغلب مخازن Git هستند، اما میتوانید محتوا را مستقیماً از مخازن Helm، ثبت تصاویر OCI و سطلهای Amazon S3 همگامسازی کنید.
هنگامی که یک منبع متصل شد، Flux CD محتویات آن را با استفاده از a همگامسازی میکند آشتی فرآیند تطبیق تضمین می کند که منابع در خوشه Kubernetes شما دقیقاً پیکربندی فعلی تعریف شده توسط منبع را منعکس می کند. عملیات درگیر در Reconciliation به نوع منبع مورد استفاده بستگی دارد — برای مخزن Git، Flux CD مانیفست های Kubernetes را در مخزن اعمال می کند، برای مثال، در حالی که یک مخزن Helm یک نسخه Helm جدید ایجاد می کند.
علاوه بر منابع برنامه شما، Flux CD منابع سفارشی را در خوشه شما ایجاد می کند که پیکربندی Flux مورد استفاده را توصیف می کند. به عنوان مثال، یک شی GitRepository برای برنامه هایی که از Git مستقر می شوند ایجاد می شود. میتوانید مانیفستها را برای این اشیاء ذخیره کنید و آنها را به مخزن دیگری متعهد کنید تا خود Flux را با استفاده از یک راهحل IaC مانند Terraform به صورت برنامهنویسی مدیریت کند.
Flux CD همچنین از Kustomize استفاده میکند تا به شما امکان میدهد چندین نمونه از برنامههای خود را با موارد مختلف، مانند محیطهای صحنهسازی و تولید، مستقر کنید. Kustomization ها به عنوان فایل های YAML در مخازن شما ایجاد می شوند و توسط کنترلر Kustomize Flux مدیریت می شوند. این به شما امکان میدهد هر استقرار را به صورت جداگانه بدون نیاز به لمس فایلهای منبع سفارشی کنید.
اجزای GitOps Toolkit Flux
همه این اجزای Flux با هم کار می کنند تا هسته ابزار GitOps Flux را تشکیل دهند. این جعبه ابزار شامل APIها، کنترلکنندهها و ابزارهایی است که برای پیادهسازی موفقیتآمیز گردش کار تحویل پیوسته مبتنی بر GitOps برای خوشههای Kubernetes خود نیاز دارید.
در زیر، می توانید نمودار معماری اجزای جعبه ابزار GitOps را بیابید:
منبع تصویر
جعبه ابزار Flux از پنج جزء اصلی تشکیل شده است:
منبع کنترل – این جزء Flux مسئول نظارت بر منابع شما برای تغییرات است، مانند تعهد به یک مخزن Git یا نمودار Helm به روز شده.
Kustomize Controller – لغو مانیفست را مدیریت می کند که به شما امکان می دهد برنامه ها را قبل از استقرار بدون تغییر فایل های منبع سفارشی کنید. سپس این کنترلر وضعیت خوشه شما را با منابع پیکربندی شده شما تطبیق می دهد.
کنترلر هلم – این کنترلر تخصصی مدیریت اعلامی انتشار نمودار Helm را از طریق HelmRelease CRD امکان پذیر می کند.
کنترل کننده اعلان – کنترل کننده اعلان بین Flux و سیستم های خارجی واسطه می شود. رویدادهایی را برای فعالیت Flux جدید منتشر می کند و هر رویداد ورودی را مدیریت می کند، مانند درخواست Slack برای تطبیق تغییرات مخزن.
کنترلکنندههای اتوماسیون تصویر – این کنترلکنندههای پیشرفته به شما این امکان را میدهند که بهطور خودکار مخازن Git خود را بر اساس نتایج اسکن تصویر بهروزرسانی کنید. همچنین میتوانید بهروزرسانیهای منابع Kubernetes را پس از تغییر برچسب تصویر، خودکار کنید.
کنترلکنندهها با استفاده از Flux CLI و CRD در خوشه شما پیکربندی میشوند. اینها با هم به شما امکان میدهند خطوط لوله جدید GitOps CI را ثبت کنید، تطبیق را اجرا کنید و هشدارها و بهروزرسانیهای خودکار تصویر را به طور اعلامی فعال کنید.
💡 همچنین ممکن است دوست داشته باشید:
فلاکس سی دی در مقابل آرگو سی دی
Argo CD یکی دیگر از ابزارهای محبوب تحویل مداوم Kubernetes با ویژگی های مشابه Flux CD است. اگرچه هم Flux CD و هم Argo CD استقرار GitOps را در خوشههای شما فعال میکنند، اما تجربیات کمی متفاوت را ارائه میدهند که برای موارد استفاده فردی مناسب است.
آرگو سی دی دامنه وسیع تری دارد. در نتیجه، شروع کار آسان تر است. این شامل یک رابط وب همه کاره است که به شما امکان می دهد اجزای برنامه خود را تجسم کنید، در حالی که هیچ رابط کاربری با Flux CD همراه نیست. برعکس، رفتار جعبه ابزار Flux CD می تواند برای استفاده پیشرفته تر یا جایی که نیاز به ادغام آسان با ابزارهای دیگر دارید، انتخاب بهتری باشد. برخلاف Argo، مستقیماً از Kubernetes API استفاده میکند، که به تسهیل اتصالات با اجزای اکوسیستم کمک میکند — برای مثال، GitLab در حال کار برای پشتیبانی بومی از استقرار FluxCD در پلتفرم DevOps خود است.
ما یک نسخه ی نمایشی ساده از نحوه راه اندازی خط لوله Flux CD برای یک مخزن Git را بررسی خواهیم کرد. Flux با بوت استرپ کردن آن با استفاده از یک مخزن جداگانه Git در کلاستر شما نصب می شود که به شما امکان می دهد پیکربندی Flux خود را به عنوان کد مدیریت کنید. سپس می توانید مخزن برنامه خود را به عنوان منبع آشتی Flux ثبت کنید.
در یک سناریوی واقعی، شما همچنین باید یک تصویر کانتینری بسازید و آن را به رجیستری تصویر خود فشار دهید، تا Flux آماده ورود به کلاستر شما باشد. ما از این مرحله صرف نظر می کنیم و به جای آن از یک تصویر عمومی از پیش ساخته شده استفاده می کنیم، بنابراین دنبال کردن این آموزش آسان است.
قبل از ادامه، باید Kubectl، Helm، یک حساب GitHub و یک خوشه Kubernetes آماده داشته باشید.
1. Flux CLI را نصب کنید
قبل از نصب Flux CD، ابتدا دستور زیر را برای اضافه کردن آن اجرا کنید flux CLI به سیستم شما:
$ curl -s https://fluxcd.io/install.sh | sudo bash
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این دستور روی لینوکس و macOS کار می کند. میتوانید دستورالعملهایی را برای سایر روشهای نصب پشتیبانی شده در مستندات Flux بیابید.
با اجرای آن بررسی کنید که Fluxc CLI کار می کند flux –version دستور:
$ flux –version
flux version 2.2.3
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
2. بررسی کنید که آیا خوشه Kubernetes شما آماده استفاده از Flux است
قبل از ادامه، باید بررسی کنید که خوشه شما تمام پیش نیازهای لازم برای استفاده از Flux را دارد. را flux check –pre دستور یک بررسی پیش از نصب را اجرا می کند که به شما امکان می دهد سازگاری را بدون افزودن چیزی به کلاستر خود تأیید کنید:
$ flux check –pre
► checking prerequisites
✔ Kubernetes 1.28.3 >=1.26.0-0
✔ prerequisites checks passed
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
قبل از اینکه بتوانید از Flex استفاده کنید، باید اخطارهای نمایش داده شده را اصلاح کنید. با این حال، تا زمانی که نسخه Kubernetes شما بهروزرسانی میشود، اکثر خوشههای Kubernetes باید فوراً الزامات را برآورده کنند.
3. مخزن Git برنامه خود را ایجاد کنید
در مرحله بعد، مخزن Git برنامه خود را ایجاد کنید. مخزن را در دستگاه خود کلون کنید، سپس مانیفست های Kubernetes زیر را کپی کنید، آنها را در مخزن خود ذخیره کنید و آنها را متعهد و فشار دهید:
manifests/deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-app
spec:
replicas: 3
selector:
matchLabels:
app: demo-app
template:
metadata:
labels:
app: demo-app
spec:
containers:
– name: nginx
image: nginx:latest
ports:
– containerPort: 80
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
manifests/service.yml
apiVersion: v1
kind: Service
metadata:
name: demo-app
spec:
selector:
app: demo-app
ports:
– name: nginx
port: 80
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
متعهد شوید و فشار دهید
$ git add .
$ git commit -m “Added initial Kubernetes manifests”
$ git push
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
4. اعتبار GitHub خود را آماده کنید
Flux برای ایجاد مخزن جدید که مانیفست های Flux GitOps Toolkit شما را ذخیره می کند، نیاز به دسترسی تأیید شده به حساب GitHub شما دارد. تنظیم کردن GITHUB_USER و GITHUB_TOKEN متغیرهای محیطی در پوسته شما ساده ترین راه برای ارائه اعتبارنامه برای این آموزش است.
$ export GITHUB_USER=
$ export GITHUB_TOKEN=
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
می توانید در تنظیمات حساب GitHub خود یک توکن ایجاد کنید. توکن را به API و محدوده خواندن/نوشتن مخزن اختصاص دهید.
5. Flux CD را نصب و راه اندازی کنید
در حال حاضر. می توانید سی دی Flux را در خوشه Kubernetes خود نصب و راه اندازی کنید.
دستور بوت استرپ زیر Flux را نصب می کند و مانیفست های آن را به یک پروژه جدید GitHub به نام متعهد می کند. flux-cd:
$ flux bootstrap github\
–personal\
–owner=$GITHUB_USER\
–repository=flux-cd
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
فرآیند بوت استرپ ممکن است چند لحظه طول بکشد. صبر کن تا ببینی all components are healthy پیام ظاهر می شود:
► connecting to github.com
✔ repository “https://github.com/ilmiont/flux-cd” created
► cloning branch “main” from Git repository “https://github.com/ilmiont/flux-cd.git”
✔ cloned repository
► generating component manifests
✔ generated component manifests
✔ committed component manifests to “main” (“b5e6afe53fdeffd80a9086ef82d15a3a3c73c2ec”)
► pushing component manifests to “https://github.com/ilmiont/flux-cd.git”
► installing components in “flux-system” namespace
✔ installed components
✔ reconciled components
► determining if source secret “flux-system/flux-system” exists
► generating source secret
✔ public key: ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBJExUXKGqaRpQsPUeiIYOeN7UFWBV83VTZ0mhgIpxl33q0yd+Qj5aat6V8Vjjy3Pf7Mpb0qtdTWF9ICedCGFghr6lClUjbntkJxepitiaaKc4eJzCJw5lVKOexJYTzC/Dg==
✔ configured deploy key “flux-system-main-flux-system” for “https://github.com/ilmiont/flux-cd”
► applying source secret “flux-system/flux-system”
✔ reconciled source secret
► generating sync manifests
✔ generated sync manifests
✔ committed sync manifests to “main” (“0ece87bab80b0b1919d4886afb3ee12bf6272eef”)
► pushing sync manifests to “https://github.com/ilmiont/flux-cd.git”
► applying sync manifests
✔ reconciled sync configuration
◎ waiting for GitRepository “flux-system/flux-system” to be reconciled
✔ GitRepository reconciled successfully
◎ waiting for Kustomization “flux-system/flux-system” to be reconciled
✔ Kustomization reconciled successfully
► confirming components are healthy
✔ helm-controller: deployment ready
✔ kustomize-controller: deployment ready
✔ notification-controller: deployment ready
✔ source-controller: deployment ready
✔ all components are healthy
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
دستور bootstrap بالا یک مخزن Git جدید در حساب GitHub شما ایجاد می کند و مانیفست های کامپوننت Flux را به آن مخزن اضافه می کند.
اگر اکنون حساب GitHub خود را بررسی کنید، یک حساب جدید خواهید دید flux-cd مخزن ایجاد شده است. در داخل مخزن، Flux CD مانیفست های Kubernetes را متعهد کرده است که به شما امکان می دهد پیکربندی فعلی خود را در آینده بازتولید کنید:
Flux CD اکنون در کلاستر شما نصب شده است و آماده استقرار برنامه های شما است.
6. مخزن برنامه خود را به عنوان منبع Flux ثبت کنید
از دستور flux create source برای ثبت یک منبع جدید Git با نصب Flux خود استفاده کنید. این به Flux CD دستور می دهد تا نظارت بر مخزن Git برنامه شما را آغاز کند.
$ flux create source git demo-app\
–url=https://github.com/$GITHUB_USER/.git\
–branch=master\
–interval=1m
✚ generating GitRepository source
► applying GitRepository source
✔ GitRepository source created
◎ waiting for GitRepository source reconciliation
✔ GitRepository source reconciliation completed
✔ fetched revision: master@sha1:3659ff528093f383ecfe625d24382dfdc7afecf1
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
می بینید که Flux محتوای مخزن شما را با هم تطبیق می دهد و آخرین commit را بازیابی می کند. را –interval=1m flag به این معنی است که Flux هر دقیقه تغییرات مخزن جدید را بررسی می کند.
7. برنامه خود را مستقر کنید
اگرچه مخزن شما اکنون به Flux متصل است، اما هنوز مستقر نشده است. برای انجام این کار، باید یک شی Kustomization ایجاد کنید که به شما امکان می دهد استقرار را پیکربندی کنید. در اینجا یک مثال ساده آورده شده است:
$ flux create kustomization demo-app\
–target-namespace=default\
–source=demo-app\
–prune=true\
–wait=true\
–interval=5m
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این سفارشی سازی مشخص می کند که demo-app منبع ایجاد شده در بالا باید در آن مستقر شود default فضای نام
را –prune flag به این معنی است که منابع اضافی خوشه به طور خودکار حذف می شوند زمانی که دیگر در مخزن تعریف نشده باشند، در حالی که –wait دستور می دهد تا ترمینال شما را تا زمانی که کامل شود مسدود کند.
را –interval از گزینه برای تنظیم وضوح دریفت خودکار استفاده می شود: هر پنج دقیقه، Flux بررسی می کند که آیا منابع مستقر شده از حالت صحیح خارج شده اند یا خیر و هرگونه تغییر ناخواسته را برمی گرداند.
هنگامی که دستور را اجرا می کنید، باید ببینید که Flux با موفقیت نسخه فعلی برنامه شما را بر اساس آخرین کامیت Git شما اجرا می کند:
✚ generating Kustomization
► applying Kustomization
✔ Kustomization created
◎ waiting for Kustomization reconciliation
✔ Kustomization demo-app is ready
✔ applied revision master@sha1:3659ff528093f383ecfe625d24382dfdc7afecf1
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اگر Deployments را در خوشه خود فهرست کنید default فضای نام، شما demo-app استقرار اکنون باید نشان داده شود:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
demo-app 3/3 3 3 57s
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این در حال اجرای سه کپی پیکربندی شده در شما است manifests/deployment.yml فایل
8. اپلیکیشن خود را به روز کنید
بعد، بیایید ببینیم وقتی برنامه خود را به روز می کنید چه اتفاقی می افتد. خود را اصلاح کنید manifests/deployment.yml فایل با تغییر spec.replicas میدان به 5 به جای 3:
spec:
replicas: 5
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
تغییرات خود را متعهد و فشار دهید:
$ git add .
$ git commit -m “Change replica count to 5”
$ git push
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در مرحله بعد، یک دقیقه صبر کنید — این فاصله زمانی است که مخزن خود را به عنوان منبع Flux ثبت کرده اید که در بالا پیکربندی شده است. پس از سپری شدن تاخیر، این کار را تکرار کنید kubectl get deployments دستور — باید ببینید که اکنون پنج نسخه در حال اجرا هستند:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
demo-app 5/5 5 5 3m32s
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
شما با موفقیت از Flux CD برای خودکار کردن تحویل مداوم به خوشه Kubernetes خود استفاده کرده اید! Flux به طور خودکار تعداد Replica Deployment شما را تنظیم کرده است تا با وضعیت تعریف شده توسط مخزن شما مطابقت داشته باشد، بدون اینکه نیازی به تعامل دستی با منابع Kubernetes یا Kubectl باشد.
مدیریت IaC برای Kubernetes
Flux CD یک گزینه عالی برای تیم هایی است که به دنبال خودکارسازی استقرار بارهای کاری Kubernetes خود هستند. اگرچه این تنها گزینه نیست: Argo CD یک جایگزین محبوب FluxCD است که میتواند سادهتر شروع به کار کند، در حالی که ابزارهای مدیریت IaC مانند Spacelift خودکار کردن تغییرات در محیطهای کلاستر و منابع ابری شما را آسانتر میکنند.
Spacelift مدیریت IaC را برای Kubernetes ساده میکند و به شما کمک میکند در بالای زیرساختهای خود بمانید. این قدرتمندترین تجربه Kubernetes را در هنگام کار با خوشه های خود در مقیاس به شما می دهد.
Spacelift یک جریان GitOps را به همراه دارد، بنابراین استقرارهای Kubernetes شما با Kubernetes Stacks شما همگامسازی میشوند و درخواستهای کششی پیشنمایش آنچه را که قصد تغییر آن را دارند به شما نشان میدهند. همچنین دارای مجموعه گسترده ای از خط مشی ها است که به شما امکان می دهد بررسی های انطباق را به صورت خودکار انجام دهید و گردش های کاری چند پشته ای پیچیده ایجاد کنید.
به غیر از Kubernetes، Spacelift از Terraform، OpenTofu، Terragrunt، Pulumi، AWS CloudFormation، Ansible و غیره نیز پشتیبانی میکند و کاربران را قادر میسازد تا بر اساس آنها پشته ایجاد کنند. با استفاده از Spacelift، میتوانید خطوط لوله CI/CD بسازید تا آنها را ترکیب کنید و از هر ابزار بهترین استفاده را ببرید.
اگر میخواهید درباره Spacelift اطلاعات بیشتری کسب کنید، همین امروز یک حساب کاربری رایگان ایجاد کنید یا با یکی از مهندسان ما یک نسخه نمایشی رزرو کنید.
نکات کلیدی
ما دیدهایم که FluxCD، پروژه فارغالتحصیل بنیاد محاسبات بومی ابری، یک راهحل پیشرو برای تحویل مداوم Kubernetes است. خوشههای Kubernetes شما را با مخازن Git شما هماهنگ نگه میدارد و هر بار که commitهای جدید را انجام میدهید، استقرار خودکار را تسهیل میکند. در مقایسه با خطوط لوله آزادسازی که به صورت دستی اجرا می شوند، این گردش کار در مقیاس ساده تر، ایمن تر و قابل نگهداری تر است.
نوشته جیمز واکر
Flux CD با استفاده از فرآیند GitOps تحویل مستمر به خوشه های Kubernetes را پیاده سازی می کند. مجموعهای از کنترلکنندههای Kubernetes را ارائه میکند که وضعیت خوشه شما را برای مطابقت با پیکربندی تعریفشده در مخازن Git و سایر منابع همگامسازی میکند.
در این مقاله، ویژگی های کلیدی Flux CD را بررسی می کنیم و نحوه عملکرد آنها را توضیح می دهیم. ما همچنین یک آموزش ساده ارائه خواهیم داد که شما را از طریق استقرار اولین برنامه خود راهنمایی می کند – بیایید شروع کنیم!
Flux CD چیست؟
Flux CD یک ابزار تحویل پیوسته (CD) است که استقرار برنامه های مجهز به GitOps را در خوشه های Kubernetes خودکار می کند. این به شما امکان می دهد هر بار که کد خود را تغییر می دهید، استقرار برنامه Kubernetes را خودکار کنید.
Flux CD کنترلرهایی را در خوشه Kubernetes شما اجرا میکند که بهطور دورهای بهروزرسانیهای منابع مخزنی را که متصل کردهاید بررسی میکنند. هنگامی که تغییرات انجام می شود، Flux CD اشیاء Kubernetes را اضافه، جایگزین و حذف می کند تا استقرار در خوشه شما را به روز کند. این تضمین می کند که برنامه ها به طور مداوم با حداقل خطر مستقر شوند.
GitOps به استفاده از مخازن Git به عنوان تنها منبع حقیقت برای عملیات شما اشاره دارد. شما پیکربندی زیرساخت خود را به عنوان فایل های اعلامی در مخازن خود تعریف می کنید. سپس آن فایلها توسط ابزارهایی مانند Flux CD مصرف میشوند که بهطور خودکار تغییرات مورد نیاز را اعمال میکنند تا وضعیت زیرساخت شما با پیکربندی که اعلام کردهاید مطابقت داشته باشد.
Flux CD برای چه مواردی استفاده می شود؟
Flux CD برای خودکارسازی استقرار و مدیریت چرخه عمر برنامهها و زیرساختها در خوشههای Kubernetes استفاده میشود. این محبوب شد زیرا استقرار برنامه های پیچیده را بدون نیاز به پیکربندی دستی هر نسخه جدید آسان تر می کند. شما به سادگی می توانید تغییرات خود را انجام دهید و سپس منتظر بمانید تا Flux CD آنها را در کلاسترهای Kubernetes شما همگام کند. این به شما امکان میدهد روی ایجاد ویژگیهای جدید متمرکز بمانید و ثبات بیشتری را برای فرآیند استقرار شما فراهم میکند.
FluxCD به راحتی با:
- کوبرنتیس
- هلم
- گرافانا
- به آن
- پرومتئوس
- سمت چپ
- کیورنو
- SOPS
ویژگی ها و مزایای Flux CD
اگرچه شروع کار با Flux CD آسان است، اما ویژگیهای پیشرفته متعددی را نیز برای پشتیبانی از گردشهای کاری قدرتمند استقرار ارائه میکند:
- پشتیبانی Kubernetes RBAC به شما امکان می دهد کنترل های دسترسی قوی را برای برنامه های خود پیکربندی کنید.
- یکپارچهسازی با سیستمهای اعتبارسنجی مبتنی بر خطمشی مانند OPA و کنترلکنندههای پذیرش به اطمینان از سازگاری برنامههای شما کمک میکند.
- میتوانید بهصورت اختیاری، وصلهها و بهروزرسانیهای تصویر را بر اساس اسکنهای کانتینرهای مستقر شده خود، با بازگرداندن به مخزن Git خود، خودکار کنید.
- معماری فعال چند مستاجر Flux CD را برای خوشههایی مناسب میسازد که به تیمها و برنامههای متعدد خدمات میدهند.
- سازگاری با Kubernetes Cluster API اجازه مدیریت سایر خوشه ها و عملیات تامین را می دهد.
- هنگامی که با مولفه Flagger اختیاری ترکیب می شود، می توان برای پیاده سازی قناری، آبی/سبز، و A/B استفاده کرد.
- یک اکوسیستم غنی از برنامههای افزودنی، رابطها و پلتفرمهای توسعه سازگار به شما امکان میدهد تجربه Flux CD خود را مطابق با روش کار خود سفارشی کنید.
به طور کلی، Flux CD به شما امکان می دهد تا به استقرار برنامه های خودکار قوی در Kubernetes دست پیدا کنید. با حذف نیاز به راهاندازی دستی یا آموزش توسعهدهندگان در مورد نحوه استفاده مستقیم از Kubernetes، پیکربندی، امنیت و انعطافپذیری سازگار را تضمین میکند.
FluxCD چگونه کار می کند؟
در سطح بالایی، Flux CD مخازن شما را برای تغییرات نظارت می کند و آنها را با وضعیت فعلی خوشه Kubernetes شما تطبیق می دهد. این یک گردش کار تحویل مستمر ایجاد می کند، جایی که تغییرات پس از اعمال بر روی مخازن شما به طور خودکار برای کاربران اعمال می شود.
Flux CD به مخازن به عنوان اشاره دارد منابع. منابع اغلب مخازن Git هستند، اما میتوانید محتوا را مستقیماً از مخازن Helm، ثبت تصاویر OCI و سطلهای Amazon S3 همگامسازی کنید.
هنگامی که یک منبع متصل شد، Flux CD محتویات آن را با استفاده از a همگامسازی میکند آشتی فرآیند تطبیق تضمین می کند که منابع در خوشه Kubernetes شما دقیقاً پیکربندی فعلی تعریف شده توسط منبع را منعکس می کند. عملیات درگیر در Reconciliation به نوع منبع مورد استفاده بستگی دارد — برای مخزن Git، Flux CD مانیفست های Kubernetes را در مخزن اعمال می کند، برای مثال، در حالی که یک مخزن Helm یک نسخه Helm جدید ایجاد می کند.
علاوه بر منابع برنامه شما، Flux CD منابع سفارشی را در خوشه شما ایجاد می کند که پیکربندی Flux مورد استفاده را توصیف می کند. به عنوان مثال، یک شی GitRepository برای برنامه هایی که از Git مستقر می شوند ایجاد می شود. میتوانید مانیفستها را برای این اشیاء ذخیره کنید و آنها را به مخزن دیگری متعهد کنید تا خود Flux را با استفاده از یک راهحل IaC مانند Terraform به صورت برنامهنویسی مدیریت کند.
Flux CD همچنین از Kustomize استفاده میکند تا به شما امکان میدهد چندین نمونه از برنامههای خود را با موارد مختلف، مانند محیطهای صحنهسازی و تولید، مستقر کنید. Kustomization ها به عنوان فایل های YAML در مخازن شما ایجاد می شوند و توسط کنترلر Kustomize Flux مدیریت می شوند. این به شما امکان میدهد هر استقرار را به صورت جداگانه بدون نیاز به لمس فایلهای منبع سفارشی کنید.
اجزای GitOps Toolkit Flux
همه این اجزای Flux با هم کار می کنند تا هسته ابزار GitOps Flux را تشکیل دهند. این جعبه ابزار شامل APIها، کنترلکنندهها و ابزارهایی است که برای پیادهسازی موفقیتآمیز گردش کار تحویل پیوسته مبتنی بر GitOps برای خوشههای Kubernetes خود نیاز دارید.
در زیر، می توانید نمودار معماری اجزای جعبه ابزار GitOps را بیابید:
منبع تصویر
جعبه ابزار Flux از پنج جزء اصلی تشکیل شده است:
- منبع کنترل – این جزء Flux مسئول نظارت بر منابع شما برای تغییرات است، مانند تعهد به یک مخزن Git یا نمودار Helm به روز شده.
- Kustomize Controller – لغو مانیفست را مدیریت می کند که به شما امکان می دهد برنامه ها را قبل از استقرار بدون تغییر فایل های منبع سفارشی کنید. سپس این کنترلر وضعیت خوشه شما را با منابع پیکربندی شده شما تطبیق می دهد.
- کنترلر هلم – این کنترلر تخصصی مدیریت اعلامی انتشار نمودار Helm را از طریق HelmRelease CRD امکان پذیر می کند.
- کنترل کننده اعلان – کنترل کننده اعلان بین Flux و سیستم های خارجی واسطه می شود. رویدادهایی را برای فعالیت Flux جدید منتشر می کند و هر رویداد ورودی را مدیریت می کند، مانند درخواست Slack برای تطبیق تغییرات مخزن.
- کنترلکنندههای اتوماسیون تصویر – این کنترلکنندههای پیشرفته به شما این امکان را میدهند که بهطور خودکار مخازن Git خود را بر اساس نتایج اسکن تصویر بهروزرسانی کنید. همچنین میتوانید بهروزرسانیهای منابع Kubernetes را پس از تغییر برچسب تصویر، خودکار کنید.
کنترلکنندهها با استفاده از Flux CLI و CRD در خوشه شما پیکربندی میشوند. اینها با هم به شما امکان میدهند خطوط لوله جدید GitOps CI را ثبت کنید، تطبیق را اجرا کنید و هشدارها و بهروزرسانیهای خودکار تصویر را به طور اعلامی فعال کنید.
💡 همچنین ممکن است دوست داشته باشید:
فلاکس سی دی در مقابل آرگو سی دی
Argo CD یکی دیگر از ابزارهای محبوب تحویل مداوم Kubernetes با ویژگی های مشابه Flux CD است. اگرچه هم Flux CD و هم Argo CD استقرار GitOps را در خوشههای شما فعال میکنند، اما تجربیات کمی متفاوت را ارائه میدهند که برای موارد استفاده فردی مناسب است.
آرگو سی دی دامنه وسیع تری دارد. در نتیجه، شروع کار آسان تر است. این شامل یک رابط وب همه کاره است که به شما امکان می دهد اجزای برنامه خود را تجسم کنید، در حالی که هیچ رابط کاربری با Flux CD همراه نیست. برعکس، رفتار جعبه ابزار Flux CD می تواند برای استفاده پیشرفته تر یا جایی که نیاز به ادغام آسان با ابزارهای دیگر دارید، انتخاب بهتری باشد. برخلاف Argo، مستقیماً از Kubernetes API استفاده میکند، که به تسهیل اتصالات با اجزای اکوسیستم کمک میکند — برای مثال، GitLab در حال کار برای پشتیبانی بومی از استقرار FluxCD در پلتفرم DevOps خود است.
ما یک نسخه ی نمایشی ساده از نحوه راه اندازی خط لوله Flux CD برای یک مخزن Git را بررسی خواهیم کرد. Flux با بوت استرپ کردن آن با استفاده از یک مخزن جداگانه Git در کلاستر شما نصب می شود که به شما امکان می دهد پیکربندی Flux خود را به عنوان کد مدیریت کنید. سپس می توانید مخزن برنامه خود را به عنوان منبع آشتی Flux ثبت کنید.
در یک سناریوی واقعی، شما همچنین باید یک تصویر کانتینری بسازید و آن را به رجیستری تصویر خود فشار دهید، تا Flux آماده ورود به کلاستر شما باشد. ما از این مرحله صرف نظر می کنیم و به جای آن از یک تصویر عمومی از پیش ساخته شده استفاده می کنیم، بنابراین دنبال کردن این آموزش آسان است.
قبل از ادامه، باید Kubectl، Helm، یک حساب GitHub و یک خوشه Kubernetes آماده داشته باشید.
1. Flux CLI را نصب کنید
قبل از نصب Flux CD، ابتدا دستور زیر را برای اضافه کردن آن اجرا کنید flux
CLI به سیستم شما:
$ curl -s https://fluxcd.io/install.sh | sudo bash
این دستور روی لینوکس و macOS کار می کند. میتوانید دستورالعملهایی را برای سایر روشهای نصب پشتیبانی شده در مستندات Flux بیابید.
با اجرای آن بررسی کنید که Fluxc CLI کار می کند flux --version
دستور:
$ flux --version
flux version 2.2.3
2. بررسی کنید که آیا خوشه Kubernetes شما آماده استفاده از Flux است
قبل از ادامه، باید بررسی کنید که خوشه شما تمام پیش نیازهای لازم برای استفاده از Flux را دارد. را flux check --pre
دستور یک بررسی پیش از نصب را اجرا می کند که به شما امکان می دهد سازگاری را بدون افزودن چیزی به کلاستر خود تأیید کنید:
$ flux check --pre
► checking prerequisites
✔ Kubernetes 1.28.3 >=1.26.0-0
✔ prerequisites checks passed
قبل از اینکه بتوانید از Flex استفاده کنید، باید اخطارهای نمایش داده شده را اصلاح کنید. با این حال، تا زمانی که نسخه Kubernetes شما بهروزرسانی میشود، اکثر خوشههای Kubernetes باید فوراً الزامات را برآورده کنند.
3. مخزن Git برنامه خود را ایجاد کنید
در مرحله بعد، مخزن Git برنامه خود را ایجاد کنید. مخزن را در دستگاه خود کلون کنید، سپس مانیفست های Kubernetes زیر را کپی کنید، آنها را در مخزن خود ذخیره کنید و آنها را متعهد و فشار دهید:
manifests/deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-app
spec:
replicas: 3
selector:
matchLabels:
app: demo-app
template:
metadata:
labels:
app: demo-app
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
manifests/service.yml
apiVersion: v1
kind: Service
metadata:
name: demo-app
spec:
selector:
app: demo-app
ports:
- name: nginx
port: 80
متعهد شوید و فشار دهید
$ git add .
$ git commit -m "Added initial Kubernetes manifests"
$ git push
4. اعتبار GitHub خود را آماده کنید
Flux برای ایجاد مخزن جدید که مانیفست های Flux GitOps Toolkit شما را ذخیره می کند، نیاز به دسترسی تأیید شده به حساب GitHub شما دارد. تنظیم کردن GITHUB_USER
و GITHUB_TOKEN
متغیرهای محیطی در پوسته شما ساده ترین راه برای ارائه اعتبارنامه برای این آموزش است.
$ export GITHUB_USER=
$ export GITHUB_TOKEN=
می توانید در تنظیمات حساب GitHub خود یک توکن ایجاد کنید. توکن را به API و محدوده خواندن/نوشتن مخزن اختصاص دهید.
5. Flux CD را نصب و راه اندازی کنید
در حال حاضر. می توانید سی دی Flux را در خوشه Kubernetes خود نصب و راه اندازی کنید.
دستور بوت استرپ زیر Flux را نصب می کند و مانیفست های آن را به یک پروژه جدید GitHub به نام متعهد می کند. flux-cd
:
$ flux bootstrap github\
--personal\
--owner=$GITHUB_USER\
--repository=flux-cd
فرآیند بوت استرپ ممکن است چند لحظه طول بکشد. صبر کن تا ببینی all components are healthy
پیام ظاهر می شود:
► connecting to github.com
✔ repository "https://github.com/ilmiont/flux-cd" created
► cloning branch "main" from Git repository "https://github.com/ilmiont/flux-cd.git"
✔ cloned repository
► generating component manifests
✔ generated component manifests
✔ committed component manifests to "main" ("b5e6afe53fdeffd80a9086ef82d15a3a3c73c2ec")
► pushing component manifests to "https://github.com/ilmiont/flux-cd.git"
► installing components in "flux-system" namespace
✔ installed components
✔ reconciled components
► determining if source secret "flux-system/flux-system" exists
► generating source secret
✔ public key: ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBJExUXKGqaRpQsPUeiIYOeN7UFWBV83VTZ0mhgIpxl33q0yd+Qj5aat6V8Vjjy3Pf7Mpb0qtdTWF9ICedCGFghr6lClUjbntkJxepitiaaKc4eJzCJw5lVKOexJYTzC/Dg==
✔ configured deploy key "flux-system-main-flux-system" for "https://github.com/ilmiont/flux-cd"
► applying source secret "flux-system/flux-system"
✔ reconciled source secret
► generating sync manifests
✔ generated sync manifests
✔ committed sync manifests to "main" ("0ece87bab80b0b1919d4886afb3ee12bf6272eef")
► pushing sync manifests to "https://github.com/ilmiont/flux-cd.git"
► applying sync manifests
✔ reconciled sync configuration
◎ waiting for GitRepository "flux-system/flux-system" to be reconciled
✔ GitRepository reconciled successfully
◎ waiting for Kustomization "flux-system/flux-system" to be reconciled
✔ Kustomization reconciled successfully
► confirming components are healthy
✔ helm-controller: deployment ready
✔ kustomize-controller: deployment ready
✔ notification-controller: deployment ready
✔ source-controller: deployment ready
✔ all components are healthy
دستور bootstrap بالا یک مخزن Git جدید در حساب GitHub شما ایجاد می کند و مانیفست های کامپوننت Flux را به آن مخزن اضافه می کند.
اگر اکنون حساب GitHub خود را بررسی کنید، یک حساب جدید خواهید دید flux-cd
مخزن ایجاد شده است. در داخل مخزن، Flux CD مانیفست های Kubernetes را متعهد کرده است که به شما امکان می دهد پیکربندی فعلی خود را در آینده بازتولید کنید:
Flux CD اکنون در کلاستر شما نصب شده است و آماده استقرار برنامه های شما است.
6. مخزن برنامه خود را به عنوان منبع Flux ثبت کنید
از دستور flux create source برای ثبت یک منبع جدید Git با نصب Flux خود استفاده کنید. این به Flux CD دستور می دهد تا نظارت بر مخزن Git برنامه شما را آغاز کند.
$ flux create source git demo-app\
--url=https://github.com/$GITHUB_USER/.git\
--branch=master\
--interval=1m
✚ generating GitRepository source
► applying GitRepository source
✔ GitRepository source created
◎ waiting for GitRepository source reconciliation
✔ GitRepository source reconciliation completed
✔ fetched revision: master@sha1:3659ff528093f383ecfe625d24382dfdc7afecf1
می بینید که Flux محتوای مخزن شما را با هم تطبیق می دهد و آخرین commit را بازیابی می کند. را --interval=1m
flag به این معنی است که Flux هر دقیقه تغییرات مخزن جدید را بررسی می کند.
7. برنامه خود را مستقر کنید
اگرچه مخزن شما اکنون به Flux متصل است، اما هنوز مستقر نشده است. برای انجام این کار، باید یک شی Kustomization ایجاد کنید که به شما امکان می دهد استقرار را پیکربندی کنید. در اینجا یک مثال ساده آورده شده است:
$ flux create kustomization demo-app\
--target-namespace=default\
--source=demo-app\
--prune=true\
--wait=true\
--interval=5m
این سفارشی سازی مشخص می کند که demo-app
منبع ایجاد شده در بالا باید در آن مستقر شود default
فضای نام
را --prune
flag به این معنی است که منابع اضافی خوشه به طور خودکار حذف می شوند زمانی که دیگر در مخزن تعریف نشده باشند، در حالی که --wait
دستور می دهد تا ترمینال شما را تا زمانی که کامل شود مسدود کند.
را --interval
از گزینه برای تنظیم وضوح دریفت خودکار استفاده می شود: هر پنج دقیقه، Flux بررسی می کند که آیا منابع مستقر شده از حالت صحیح خارج شده اند یا خیر و هرگونه تغییر ناخواسته را برمی گرداند.
هنگامی که دستور را اجرا می کنید، باید ببینید که Flux با موفقیت نسخه فعلی برنامه شما را بر اساس آخرین کامیت Git شما اجرا می کند:
✚ generating Kustomization
► applying Kustomization
✔ Kustomization created
◎ waiting for Kustomization reconciliation
✔ Kustomization demo-app is ready
✔ applied revision master@sha1:3659ff528093f383ecfe625d24382dfdc7afecf1
اگر Deployments را در خوشه خود فهرست کنید default
فضای نام، شما demo-app
استقرار اکنون باید نشان داده شود:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
demo-app 3/3 3 3 57s
این در حال اجرای سه کپی پیکربندی شده در شما است manifests/deployment.yml
فایل
8. اپلیکیشن خود را به روز کنید
بعد، بیایید ببینیم وقتی برنامه خود را به روز می کنید چه اتفاقی می افتد. خود را اصلاح کنید manifests/deployment.yml
فایل با تغییر spec.replicas
میدان به 5
به جای 3
:
spec:
replicas: 5
تغییرات خود را متعهد و فشار دهید:
$ git add .
$ git commit -m "Change replica count to 5"
$ git push
در مرحله بعد، یک دقیقه صبر کنید — این فاصله زمانی است که مخزن خود را به عنوان منبع Flux ثبت کرده اید که در بالا پیکربندی شده است. پس از سپری شدن تاخیر، این کار را تکرار کنید kubectl get deployments
دستور — باید ببینید که اکنون پنج نسخه در حال اجرا هستند:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
demo-app 5/5 5 5 3m32s
شما با موفقیت از Flux CD برای خودکار کردن تحویل مداوم به خوشه Kubernetes خود استفاده کرده اید! Flux به طور خودکار تعداد Replica Deployment شما را تنظیم کرده است تا با وضعیت تعریف شده توسط مخزن شما مطابقت داشته باشد، بدون اینکه نیازی به تعامل دستی با منابع Kubernetes یا Kubectl باشد.
مدیریت IaC برای Kubernetes
Flux CD یک گزینه عالی برای تیم هایی است که به دنبال خودکارسازی استقرار بارهای کاری Kubernetes خود هستند. اگرچه این تنها گزینه نیست: Argo CD یک جایگزین محبوب FluxCD است که میتواند سادهتر شروع به کار کند، در حالی که ابزارهای مدیریت IaC مانند Spacelift خودکار کردن تغییرات در محیطهای کلاستر و منابع ابری شما را آسانتر میکنند.
Spacelift مدیریت IaC را برای Kubernetes ساده میکند و به شما کمک میکند در بالای زیرساختهای خود بمانید. این قدرتمندترین تجربه Kubernetes را در هنگام کار با خوشه های خود در مقیاس به شما می دهد.
Spacelift یک جریان GitOps را به همراه دارد، بنابراین استقرارهای Kubernetes شما با Kubernetes Stacks شما همگامسازی میشوند و درخواستهای کششی پیشنمایش آنچه را که قصد تغییر آن را دارند به شما نشان میدهند. همچنین دارای مجموعه گسترده ای از خط مشی ها است که به شما امکان می دهد بررسی های انطباق را به صورت خودکار انجام دهید و گردش های کاری چند پشته ای پیچیده ایجاد کنید.
به غیر از Kubernetes، Spacelift از Terraform، OpenTofu، Terragrunt، Pulumi، AWS CloudFormation، Ansible و غیره نیز پشتیبانی میکند و کاربران را قادر میسازد تا بر اساس آنها پشته ایجاد کنند. با استفاده از Spacelift، میتوانید خطوط لوله CI/CD بسازید تا آنها را ترکیب کنید و از هر ابزار بهترین استفاده را ببرید.
اگر میخواهید درباره Spacelift اطلاعات بیشتری کسب کنید، همین امروز یک حساب کاربری رایگان ایجاد کنید یا با یکی از مهندسان ما یک نسخه نمایشی رزرو کنید.
نکات کلیدی
ما دیدهایم که FluxCD، پروژه فارغالتحصیل بنیاد محاسبات بومی ابری، یک راهحل پیشرو برای تحویل مداوم Kubernetes است. خوشههای Kubernetes شما را با مخازن Git شما هماهنگ نگه میدارد و هر بار که commitهای جدید را انجام میدهید، استقرار خودکار را تسهیل میکند. در مقایسه با خطوط لوله آزادسازی که به صورت دستی اجرا می شوند، این گردش کار در مقیاس ساده تر، ایمن تر و قابل نگهداری تر است.
نوشته جیمز واکر