اسپیناکر ابزاری اپنسورس جهت پیادهسازی Continuous Delivery است که توسط کمپانی Netflix طراحی شده و به تیمهای توسعهٔ نرمافزار این امکان را میدهد تا اقدام به دیپلوی نسخههای جدید نرمافزارهای خود در محیط کلود نمایند (Continuous Delivery یا به اختصار CD به فرآیندی گفته میشود که طی آن دولوپرها میتوانند نسخههای جدید اپلیکیشن را به شکلی سریع، ایمن و مطمئن جهت دیپلوی روی سرورهای اصلی آماده نمایند.)
اگر با ابزار اسپیناکر آشنا نیستید ابتدا این مطلب رو بخونید
نیازمندی های قبل از نصب:
مرحله اول:
برای نصب و مدیریت اسپیناکر اول باید ابزار 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.
برای نصب دوتا راه حل کلی دارید . اول اینکه مستقیم روی سیستم عاملتون نصب کنید که فعلا سیستم های زیر رو فقط ساپورت میکنه :
یا اینکه از داکرش استفاده کنید اینطوری هم مستقل از سیستم عامل کار میکنیم و کار باهاش خیلی راحت تره. در این اموزش ما از نسخه داکرش استفاده می کنیم.
یک فایل docker-compose.yaml بسازید که محتوای داخلش مانند زیر باشد :
version: "3.3" 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 های زیر پشتیبانی میکنه :
که ما در این آموزش از 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 :
برای اینکار ما از 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="{.data.access-key}" | base64 --decode) export MINIO_SECRET_KEY=$(kubectl get secret --namespace spinnaker minio -o jsonpath="{.data.secret-key}" | 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 "http://$SPIN_HOST:30900" hal config security api edit \ --override-base-url "http://$SPIN_HOST:30800" hal deploy apply
خب بالاخره مراحل نصب به اتمام رسید و از طریق ادرس http://$SPIN_HOST:30900 می تونید به محیط گرافیکی اسپناکر متصل شوید.و در اخر هر زمان خواستید اسپیناکر رو از روی کوبر پاک کنید از کامند زیر استفاده کنید
hal deploy clean
در اخر اگر همه چیز درست بود از فایل کانفیگتون حتما بک اپ بگیرد:
hal backup create
در قسمت های بعدی سعی میکنم آموزش کار با اسپیناکر رو قرار بدم. با ارزوی موفقیت برای همه :)