از صنایع دستی گرفته تا صنعتی سازی: گیتوپ های چند EV با CD و Argo Kustomize در MicroK8s

🌍 زمینه: چرا این پروژه؟
این پروژه گسترش منطقی رویکردی است که چند ماه قبل آغاز شده است. در ابتدا ، زیرساخت های من ساخته شده است: برخی از پرونده های Kubernetes که در یک مجدداً قرار داده شده اند ، یک ورود به مدیریت ترافیک ورودی ، یک گواهی نامه رمزگذاری ، استقرار برنامه در معرض اپل من در یک سرویس داخلی و همچنین یک گره برای نمایشگاه خارجی.
اما به سرعت ، این رویکرد محدودیت های خود را نشان داد:
-
بدون مدیریت چند محیط
-
هیچ دید کلی از بیانیه خوشه وجود ندارد
-
به روزرسانی ها از طریق خطوط لوله اما محدود (فقط ایجاد یا به روزرسانی منابع ، بقیه باید به صورت دستی انجام شود) ، بدون سابقه روشن
من می خواستم یک راه اندازی قوی تر ، نزدیک به آنچه در تجارت انجام می شود: نسخه کامل زیرساخت ها ، استقرار چند EV ، GITOPS ، کامل تر (اثری ، سیاههها) و نظارت بر امنیت.
اهداف فنی
این پروژه جدید با هدف ساختن یک پایه محکم و نگهدارنده برای استقرار هرگونه برنامه در خوشه Kubernetes خود ، ساخته شده است. ستون ها:
-
گیتپس با CD Argo برای استقرار اعلان
-
چند محیط (dev ، staging ، prod …) از طریق kustomize
-
گواهینامه های TLS به طور خودکار توسط مدیر گواهی اداره می شود
-
نینکس برای نمایشگاه عمومی در HTTPS
-
نسخه کامل مادون قرمز : Ingress ، Cert-Manager ، Argo CD از طریق Helm نصب می شود ، اما از طریق Kustomize خلبان می شود
-
نام توسط محیط
📊 تکنیک پشته
-
microk8s : Kubernetes محلی بهینه شده
-
سرپرست : مدیر نمودار برای نصب ابزارهایی مانند Argo CD ، Cert-Matager ، Ingress-Nginx
-
باسج دادن : روکش محیط (dev ، prod)
-
سی دی آرگو : موتور Gitops برای استقرار مداوم
-
مدیر گواهی + Clustrissuer بیایید رمزگذاری کنیم : گواهینامه های عمومی TLS
📂 سازمان repo
استراحت به شرح زیر است:
.
├── environments/
│ ├── dev/ # Déploiement dédié au développement
│ ├── staging/ # Environnement de préproduction
│ └── prod/ # Production simulée
├── base/ # Composants K8s communs à tous les environnements
هر ابزار از طریق HELM با یک نسخه نصب می شود. نسخه YAML ، و Dev/ ، Staging/ and Prod/ محیط ها پوشش های Kustomize با تکه های هدفمند هستند.
repo در اینجا موجود است: github.com/wooulf/devops-bootcamp-ippon.
⚙ نصب CD Argo با HTTPS
CD Argo از طریق HELM در فضای نام نصب شد argocd
، با این پیکربندی:
global:
domain: argocd.woulf.fr
configs:
params:
server.insecure: "true"
server:
certificate:
enabled: true
secretName: argocd-tls
domain: argocd.woulf.fr
issuer:
group: cert-manager.io
kind: ClusterIssuer
name: letsencrypt-prod
ingress:
enabled: true
ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
hosts:
- argocd.woulf.fr
tls:
- hosts:
- argocd.woulf.fr
secretName: argocd-tls
برای چه server.insecure: true
؟ زیرا خاتمه TLS در سطح ورود مدیریت می شود. ترافیک داخلی در HTTP باقی مانده است ، که در یک خوشه محلی/VPS که به اشتراک گذاشته نشده است قابل قبول است.
access دسترسی عمومی از طریق Ingress
گواهی TLS به طور خودکار توسط مدیر Cert-Manager از Clusteriuser تولید می شود letsencrypt-prod
بشر Argo CD اکنون از طریق https://argocd.woulf.fr در دسترس عموم است.
📁 استقرار اول با CD Argo
استقرار نمونه کارها از طریق Application
CD Argo که به سمت Namepace Dev اشاره می کند. ورود به صورت پویا برای هر محیط از طریق یک پرونده json kustomize وصله شده است:
environments/dev/kustomization.yaml
namespace: dev
resources:
- ../../base
patches:
- path: patch-ingress-host.json
target:
kind: Ingress
name: portfolio-ingress
environments/dev/patch-ingress-host.json
[
{
"op": "replace",
"path": "/spec/tls/0/hosts/0",
"value": "dev.woulf.fr"
},
{
"op": "replace",
"path": "/spec/rules/0/host",
"value": "dev.woulf.fr"
}
]
🧠 تعریف ازApplication
سی دی آرگو
برای اتصال CD Argo به سپرده Git من و به او بگویم که چه چیزی را در خوشه همگام سازی کند ، من یک منبع از نوع Kubernetes ایجاد کردم Application
:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: portfolio-dev
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/Wooulf/devops-bootcamp-ippon
targetRevision: HEAD
path: environments/dev
destination:
server: https://kubernetes.default.svc
namespace: dev
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
🔍 چگونه کار می کند
-
Source.Repourl + Path + TargetRevision
CD Argo مانیتور رپرتوار را کنترل می کند
environments/dev
سپرده گیتhttps://github.com/Wooulf/devops-bootcamp-ippon
بشر هرگونه اصلاح (متعهد ، فشار) در این پوشه باعث هماهنگی خودکار می شود. -
مقصد
برنامه در خوشه محلی (MicroK8s) از طریق URL مستقر می شود
https://kubernetes.default.svc
، در فضای نامdev
بشر -
syncpolicy.Automated
-
automated
: هماهنگ سازی خودکار بدون اقدام دستی. -
prune
: حذف منابع منسوخ که دیگر در Git اعلام نشده اند. -
selfHeal
: پذیرایی خودکار اگر یک منبع به صورت دستی در خوشه تغییر کند.
-
-
syncoptions.createnamespace = درست است
فضای نام
dev
اگر هنوز وجود نداشته باشد ، به طور خودکار ایجاد می شود و استقرار مستقل و idempotate را ایجاد می کند.
🔁 نتیجه نهایی
- استقرار کامل و اتوماتیک GITOP در محیط
dev
- انطباق به طور دائم بین Git و خوشه اطمینان می یابد
- به روزرسانی یا حذف منابع فقط از زمان سپرده GIT مدیریت شده است
- نام
dev
به صورت پویا بدون پیش تنظیم دستی ساخته شده است
نمونه کارها dev
اکنون به طور خودکار با آخرین تصویر برچسب Docker مستقر شده است latest
، et از طریق https://dev.woulf.fr قابل دسترسی است.
🧨 مشکلات روبرو (و حل شده)
-
گواهینامه های مداوم خود امضا شده : به دلیل درگیری بین چندین شیء گواهی ، ناشی از وجود حاشیه نویسی
cert-manager.io/cluster-issuer
در Ingress و یک بخشserver.certificate
درvalues.yaml
بشر 👉 راه حل: فقط سرور پیکربندی را نگه دارید. Certificate. -
گواهی موقت حتی پس از تهیه LETE ENCRYPT: رفتار پیش فرض مدیر گواهی. فقط باید صبر کنید که گواهی مناسب منتشر شود.
-
Microk8s که افزونه ها را “از دست می دهد” (کلاه ، DNS و غیره) پس از راه اندازی مجدد: نیاز به تقویت فعال سازی ها.
-
Clusterussaer پس از راه اندازی مجدد اعمال نشده است : در صورت عدم ادامه کار لازم است که دوباره فشار دهید.
-
خطاهای دسترسی HTTPS در حالی که همه چیز خوب به نظر می رسید: اغلب با گواهی موقت یا خاتمه TLS بد مرتبط است (که من بعد از واقعیت در Ingress متوقف شدم).
این مسائل همچنین باعث شد تا در مورد علاقه به معرفی یک ابزار به عنوان فکر کنم غیر قابل انکار علاوه بر CD Argo. در جایی که آرگو پیروی از حالت Kubernetes با مانیفست های GIT را تضمین می کند ، Ansible می تواند به من کمک کند تا اطمینان حاصل کنم که وضعیت کلی سیستم میزبان (MicroK8s ، افزودنی های فعال ، پیش نیازهای شبکه و غیره) نیز مطابق با انتظارات من است.
🧾 به طور خلاصه
در این مقاله ، من انتقال به زیرساخت های چند منظوره Gitop را با:
-
نصب CD Argo از طریق HELM در یک فضای اختصاصی
-
مدیریت https با مدیر گواهینامه و یک خوشه بیایید رمزگذاری کنیم
-
وضوح مشکلات کلاسیک مرتبط با گواهینامه ها (ایجاد خود امضا شده ، موقت ، مضاعف گواهی)
-
L'Exposition d'Argo cd en https از طریق Ingress nginx
-
اولین استقرار گیتوپ یک برنامه (
portfolio
) در محیطdev
، به صورت پویا از طریقkustomize
🔜 برای آمدن در مقاله بعدی
ما با ادغام ادامه خواهیم داد به روزرسانی تصویر سی دی آرگو برای اطمینان از به روزرسانی خودکار تصاویر مستقر ، اضافه کردن یک لایه از ایمنی با مهر و موم شده برای محافظت از نشانه API برای تعامل با CD Argo. ما همچنین خواهیم دید که چگونه این سیستم را بدون مداخله دستی ، همیشه در یک منطق گیتوپ قرار دهیم.