ویرگول
ورودثبت نام
Amir Fatemi
Amir Fatemi
خواندن ۵ دقیقه·۴ سال پیش

Install Spinnaker with Halyard on Kubernetes ( update 22 Aug 2020)

اسپیناکر ابزاری اپن‌سورس جهت پیاده‌سازی Continuous Delivery است که توسط کمپانی Netflix طراحی شده و به تیم‌های توسعه‌ٔ نرم‌افزار این امکان را می‌دهد تا اقدام به دیپلوی نسخه‌های جدید نرم‌افزارهای خود در محیط کلود نمایند (Continuous Delivery یا به اختصار CD به فرآیندی گفته می‌شود که طی آن دولوپرها می‌توانند نسخه‌های جدید اپلیکیشن را به شکلی سریع، ایمن و مطمئن جهت دیپلوی روی سرورهای اصلی آماده نمایند.)



اگر با ابزار اسپیناکر آشنا نیستید ابتدا این مطلب رو بخونید

نیازمندی های قبل از نصب:

  • Docker 18.x with proxies configured
  • A Kubernetes cluster
  • Helm3


مرحله اول:
برای نصب و مدیریت اسپیناکر اول باید ابزار Halyard را نصب کنیم. که خود سایت رسمی اینطوری تعریفش کرده :

Halyard is a command-line administration tool that manages the lifecycle of your Spinnaker deployment, including writing & validating your deployment’s configuration, deploying each of Spinnaker’s microservices, and updating the deployment.

برای نصب دوتا راه حل کلی دارید . اول اینکه مستقیم روی سیستم عاملتون نصب کنید که فعلا سیستم های زیر رو فقط ساپورت میکنه :

  • Ubuntu 14.04, 16.04 or 18.04 (Ubuntu 16.04 requires Spinnaker 1.6.0 or later)
  • Debian 8 or 9
  • macOS (tested on 10.13 High Sierra only)

یا اینکه از داکرش استفاده کنید اینطوری هم مستقل از سیستم عامل کار میکنیم و کار باهاش خیلی راحت تره. در این اموزش ما از نسخه داکرش استفاده می کنیم.

یک فایل docker-compose.yaml بسازید که محتوای داخلش مانند زیر باشد :


version: &quot3.3&quot services: halyard: container_name: halyard restart: always image: gcr.io/spinnaker-marketplace/halyard:stable volumes: - ./k8s:/home/spinnaker/k8s/ - ./halyard:/home/spinnaker/.hal environment: KUBECONFIG: /home/spinnaker/k8s/config/kubeconfig.conf ports: - 8084:8084 - 9000:9000

داکر کامپوز بالا فقط دوتا نکته مهم داره که حتما باید رعایت کنید . اول اینکه حتما kubeconfig.conf رو برای اتصال به کوبر داخل پوشه k8s/config قرار دهید. دوم اینکه پوشه کانفیگ halyard رو به بیرون mount کردیم که آن را از دست ندهیم. ساختار پوشه های ما در هاست بصورت زیر خواهد بود:

├── docker-compose.yml
├── halyard
└── k8s
└── config
└──kubeconfig.conf

در اخر فایل داکر کامپوز خودمون رو اجرا می کنیم:

docker-compose up -d docker exec -it halyard bash source <(hal --print-bash-completion)

فقط خط سوم نیاز به توضیح داره که اونم بخاطر اینکه فعال شدن command completion هست

قبل از رفتن به مرحله بعدی یک namespace به نام spinnaker توی کوبرتون بسازید


مرحله دوم انتخاب Cloud Providers

اسپیناکر از Cloud Providers های زیر پشتیبانی میکنه :

  • Amazon Web ServicesAzure
  • Cloud Foundry
  • DC/OS
  • Google Compute Engine
  • Kubernetes
  • Oracle

که ما در این آموزش از Kubernetes استفاده می کنیم. پس اگر انتخاب شما بغیر از Kubernetes هست ادامه اموزش براتون مفید نیست.برای انتخاب Cloud Providers از کامند زیر استفاده کنید:

hal config provider kubernetes enable

در مرحله بعد یک کاربر برای اسپیناکر می سازیم:

hal config provider kubernetes account add <my_account> \ --provider-version v2 \ --context $(kubectl config current-context)

در قسمت <my_account> یک نام کاربری دلخواه قرار دهید . و برای استفاده های بعدی در environment variable با نام ACCOUNT درست کنید . مانند زیر

export ACCOUNT=safa

ابزار Halyard از انواع Spinnaker deployment پشتیبانی میکنه برای فعال کردن حالت distributed deployment از گامند زیر استفاده کنید :

hal config deploy edit --type distributed --account-name $ACCOUNT

مرحله سوم انتخاب Persistent Storage :

  • اسپیناکر به persistent store نیاز داره برای ذخیره continuous delivery pipelines و بقیه کانفیگ هاش. برای انتخاب میتونید از multiple storage providers های زیر انتخاب کنید
  • Azure Storage
  • Google Cloud Storage
  • Minio
  • Redis (warning: Unsupported and not recommended for production environments)
  • S3
  • Oracle Object Storage

برای اینکار ما از minio استفاده میکنیم. پس برای ادامه کار موقت از کانتینر خارج بشید و برید داخل مستر Kubernetes تا با استفاده از helm ابزار minio رو نصب کنیم . فرض ما اینکه شما helm رو نصب کردید ( اگر از ورژن 3 استفاده کنید دیگه نیازی به tiller ندارید ). خب برای ساخت از کامند زیر استفاده می کنیم

helm install minio --namespace spinnaker bitnami/minio --set persistence.enabled=false,persistence.size=5Gi,persistence.existingClaim=spinnaker-pvc

نکته اول : شما باید در Namespace فعلی یک PersistentVolumeClaim داشته باشید . من برای نمونه از spinnaker-pvc که از قبل ساخته بودم استفاده کردم. برای ساختن PVCs میتونید از NFS استفاده کنید
نکته دوم : بعد از اجرا شدن کامل helm باید MINIO_ACCESS_KEY و MINIO_SECRET_KEY استخراج و داخل export هامون قرار بدیم . برای این کار از دو دستور زیر استفاده نمایید

export MINIO_ACCESS_KEY=$(kubectl get secret --namespace spinnaker minio -o jsonpath=&quot{.data.access-key}&quot | base64 --decode) export MINIO_SECRET_KEY=$(kubectl get secret --namespace spinnaker minio -o jsonpath=&quot{.data.secret-key}&quot | base64 --decode)


حال به کانتینر خودمون بر میگردیم و کامند زیرو رو اجرا می کنیم تا این اتصال بر قرار بشه

echo $MINIO_SECRET_KEY | \ hal config storage s3 edit --endpoint http://minio.spinnaker.svc:9000 \ --access-key-id $MINIO_ACCESS_KEY \ --secret-access-key

نکته : حتما با فایل کانفیگ Hal رفته و در قسمت persistentStorage حتما پارمتر pathStyleAccess برابر true قرار بدید در غیر این صورت pod front50 مدام کرش خواهد کرد
سپس برای فعال کردن s3 storage provider از کامند زیر استفاده کنید :

hal config storage edit --type s3

مرحله چهارم Set version

اگر دقت کرده باشید در تمامی مراحل قبل موقع تنظیم در اخر لاگ ها یک پیغام به شما نمایش میده با این مفهوم که شما ورژن اسپناکر رو هنوز انتخاب نکردید. برای این کار ابتدا کامند زیر رو بزنید :

hal version list


خروجی دستور بالا مانند زیر هست

- 1.18.10 (Longmire): Changelog: https://gist.github.com/spinnaker-release/306d7e241272980642e918f64ed91fe3 Published: Tue May 05 13:46:19 GMT 2020 (Requires Halyard >= 1.29 - 1.19.7 (Gilmore Girls A Year in the Life): Changelog: https://gist.github.com/spinnaker-release/cc4410d674679c5765246a40f28e3cad Published: Tue May 05 11:52:54 GMT 2020 (Requires Halyard >= 1.32) - 1.20.0 (Drive to Survive): Changelog: https://gist.github.com/spinnaker-release/75d50c7b931f1089e710a0e9d1acf8c4 Published: Mon May 04 17:58:56 GMT 2020 (Requires Halyard >= 1.32)

هر نسخه ایی که میخواید رو انتخاب و با کامند زیر مشخص کنید

hal config version edit --version <version>

مرحله پنجم Deploy Spinnaker

این اخرین مرحله از نصب هست . قبل از نصب Spinnaker حتما یک بار فایل کانفیگ زیرو بررسی کنید که ادرس فایل kubeconfig در اون درست تنظیم شده باشه و اگر مشکل داشته یا شما ادرس فایل رو از پیش فرض تغییر داید حتما ویرایش کنید . ادرس این فایل در

vi /home/spinnaker/.hal/config

و مقدار پارمترkubeconfigFile می باشد. سپس کامند زیر رو اجرا کنید تا اسپناکر بر روی کوبر شما نصب بشه

hal deploy apply

اگر برای اولین بار هست که نصب می کنید بخاطر دانلود ایمیج های مربوطه ممکنه کمی طولانی بشه. پس صبور باشید ( ایمیح ها تا حدود ۱ گیگ هستند )
نکته : اگر در نصب بر روی کوبر به مشکل خوردید deploy apply رو در مود دیباگ اجرا کنید :


Hal deploy apply --debug -l

مرحله ششم Spinnaker reachable

برای دستیابی به پنل گرافیکی اسپناکر اگر از روش غیر داکر استفاده کردید از کامند زیر استفاده کنید :

hal deploy connect

سپس از طریق ادرس localhost:9000. میتونید به پنل گرافیکی دسترسی داشته باشید

ولی اگر از روش داکر استفاده کردید برید سراغ مستر Kubernetes و مقدایر سرویس های زیر رو از ClusterIP به NodePort تغییر دهید

kubectl edit svc spin-deck -n spinnaker

نمونه تغییر مشابه کد زیر میتونه باشه البته پورت خروجی رو میتونید به دلخواه تغییر بدید

... spec: type: NodePort ports: - port: 9000 protocol: TCP targetPort: 9000 nodePort: 30900 selector: app: spin cluster: spin-deck sessionAffinity: None status: ...

و همچنین سرویس زیر رو

kubectl edit svc spin-gate -n spinnaker

خب حالا برمیگردیم سراغ کانتینر و اخرین تغییرات رو اعمال می کنیم. برای این کار ابتدا مقدار environment variable مرود نیاز رو با نام متغییر SPIN_HOST که ادرس دسترسی به کلاستر کوبر هست رو قرار بدید و سپس کامند های زیر

hal config security ui edit \ --override-base-url &quothttp://$SPIN_HOST:30900&quot hal config security api edit \ --override-base-url &quothttp://$SPIN_HOST:30800&quot hal deploy apply

خب بالاخره مراحل نصب به اتمام رسید و از طریق ادرس http://$SPIN_HOST:30900 می تونید به محیط گرافیکی اسپناکر متصل شوید.و در اخر هر زمان خواستید اسپیناکر رو از روی کوبر پاک کنید از کامند زیر استفاده کنید

hal deploy clean

در اخر اگر همه چیز درست بود از فایل کانفیگتون حتما بک اپ بگیرد:

hal backup create


در قسمت های بعدی سعی میکنم آموزش کار با اسپیناکر رو قرار بدم. با ارزوی موفقیت برای همه :)

Spinnakerآموزش spinnakerآموزش اسپیناکرآموزش continuois deliverycontinuous delivery
DevOps Engineer
شاید از این پست‌ها خوشتان بیاید