برنامه نویسی

از صنایع دستی گرفته تا صنعتی سازی: گیتوپ های چند 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

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🔍 چگونه کار می کند

  1. Source.Repourl + Path + TargetRevision

    CD Argo مانیتور رپرتوار را کنترل می کند environments/dev سپرده گیت https://github.com/Wooulf/devops-bootcamp-ipponبشر هرگونه اصلاح (متعهد ، فشار) در این پوشه باعث هماهنگی خودکار می شود.

  2. مقصد

    برنامه در خوشه محلی (MicroK8s) از طریق URL مستقر می شود https://kubernetes.default.svc، در فضای نام devبشر

  3. syncpolicy.Automated

    • automated: هماهنگ سازی خودکار بدون اقدام دستی.
    • prune: حذف منابع منسوخ که دیگر در Git اعلام نشده اند.
    • selfHeal: پذیرایی خودکار اگر یک منبع به صورت دستی در خوشه تغییر کند.
  4. 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. ما همچنین خواهیم دید که چگونه این سیستم را بدون مداخله دستی ، همیشه در یک منطق گیتوپ قرار دهیم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا