Tekton Pipeline - خطوط أنابيب Kubernetes الأصلية


Tekton Pipeline هو مشروع جديد يتيح لك تشغيل خطوط أنابيب CI / CD باستخدام النهج الأصلي Kubernetes. كانت خطوط أنابيب Tekton في الأصل جزءًا من مشروع "Knative build". إذا كنت تريد معرفة المزيد عن هذا المشروع ، فإنني أوصي بشدة بزيارة موقعه على شبكة الإنترنت ، وهو متاح على الرابط هنا .


قبل أن نبدأ في الحديث عن معنى "Kubernetes-native" وكيفية عمل Tekton Pipeline ، أود أن أعود خطوة بخطوة وأشرح باختصار لماذا تشغيل خطوط الأنابيب في حاويات بدلاً من مضيفها مهم ومفيد للغاية: منذ بعض الوقت بدأنا نقل التطبيقات التي نعمل معها إلى الحاويات. لقد فعلنا هذا بسبب فوائد مثل العزلة والتبعيات الشفافة والقابلية للتوسعة والقابلية للتغير. ألا يكون ذلك مفيدًا لأنابيب CI / CD؟ فكر في "build-hosts" ، والتي ستوفر الأدوات والتبعيات اللازمة لمهمة بناء محددة. حول بيئة ستكون هي نفسها في كل مرة يتم إطلاقها ولن تكون لها أي تبعيات على مشاريع أخرى ، مما قد يسبب مشاكل. وكذلك ، حول خطوط الأنابيب سهلة التحجيم. هذا هو السبب في أننا نستطيع ويجب علينا تشغيل خطوط أنابيب بالحاويات!


الآن بعد أن تحدثنا لفترة وجيزة عن حاويات خطوط الأنابيب ، فلنتحدث عن كيف يمكن لمشروع Tekton Pipeline بنهج Kubernetes الأصلي أن يساعد في:


يسمح لنا Tekton Pipeline بتشغيل خطوط أنابيب حاويات في مجموعات Kubernetes الحالية. هذا يعني أننا لسنا بحاجة إلى آلات إضافية لتشغيل خطوط أنابيبنا ، وبالتالي ، يمكننا استخدام تلك القائمة بشكل أفضل.


إنه أمر رائع ، ولكن بصراحة ، هذا لا يجعل خط أنابيب Tekton فريدًا من نوعه. لذلك ، يمضي Tekton Pipeline خطوة إلى الأمام ويخزن كل ما يتعلق بخطوط أنابيبنا داخل Kubernetes - كمورد Kubernetes. هذا يتيح لنا العمل مع الناقلات لدينا ، وكذلك مع أي مورد آخر. فكر في النشر أو الخدمة ، والتي يمكنك إنشاءها وإدارتها باستخدام ملفات kubectl و YAML.


صورة


من أين تبدأ


كما ذكرنا أعلاه ، يقع خط أنابيب Tekton داخل مجموعة Kubernetes. يعتمد على 5 تعريفات الموارد المخصصة (CRD) ، النشرات ، ConfigMaps ، والخدمات. يمكنك تشغيل الأمر التالي للبدء:


kubectl apply -f https://storage.googleapis.com/tekton-releases/latest/release.yaml 

بالإضافة إلى الموارد المذكورة أعلاه ، سيقوم أيضًا بإنشاء Namespace و Pod Security Policy و Service Service و ClusterRoles. خط أنابيب Tekton جاهز للعمل بمجرد أن تصبح جميع Pods في مساحة الاسم التي تم إنشاؤها حديثًا (الاسم الافتراضي هو خطوط أنابيب tekton) جاهزة.


بالطبع ، يمكنك عرض ملف YAML وتخصيصه وفقًا لاحتياجاتك.


إذا كنت بحاجة إلى مشاركة القطع الأثرية أو موارد خطوط الأنابيب الأخرى بين المهام ، فأنت بحاجة إلى إعداد التخزين لها. يمكنك استخدام PVC ، والذي سيُطلب في كل مرة يكون ذلك ضروريًا (التهيئة الديناميكية لمستوى الصوت هو المفتاح!) ، أو تخزين Blob. ستجد المزيد من المعلومات حول هذه المهمة هنا .


خط الأنابيب الأول


إذا كيف تعمل خطوط أنابيب Tekton؟ سأشرح الفرق بين تعريفات الموارد المخصصة لخطوط أنابيب Tekton في أمثلة صغيرة. سيقوم Pipeline بإنشاء (إنشاء) تطبيق صغير على Go ، وإنشاء الصورة المطلوبة ثم دفعها إلى السجل. يمكنك العثور على جميع الملفات ذات الصلة هنا .


بادئ ذي بدء ، نقوم بإنشاء تعريفين لـ PipelineResouce سنستخدمهما لتحديد مستودع Git و Registry باعتباره الوجهة النهائية ككود مصدر. تعد موارد خطوط الأنابيب اختيارية وبالتالي فهي مفيدة جدًا لاستخدام خطوط الأنابيب نفسها ، ولكن مع مصادر ووجهات مختلفة.


 apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: git-repo spec: type: git params: - name: revision value: master - name: url value: https://gitlab.com/nmeisenzahl/tekton-demo --- apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: image-registry spec: type: image params: - name: url value: registry.gitlab.com/nmeisenzahl/tekton-demo/demo:latest 

نحتاج الآن إلى إنشاء مورد مهام لتحديد تسلسل الخطوات في خط أنابيبنا. بالطبع ، إذا لزم الأمر ، يمكنك إنشاء العديد من المهام. في مثالنا ، سوف نستخدم Kaniko لإنشاء صورة. يقع Dockerfile هذا ، مثل الموارد الأخرى للتطبيق ، في مستودع Git.


 apiVersion: tekton.dev/v1alpha1 kind: Task metadata: name: build-docker-image spec: inputs: resources: - name: git-repo type: git params: - name: pathToDockerFile description: Path to Dockerfile default: /workspace/git-repo/Dockerfile - name: pathToContext description: The build context used by Kaniko default: /workspace/git-repo outputs: resources: - name: image-registry type: image steps: - name: build-and-push image: gcr.io/kaniko-project/executor:v0.10.0 env: - name: "DOCKER_CONFIG" value: "/builder/home/.docker/" command: - /kaniko/executor args: - --dockerfile=${inputs.params.pathToDockerFile} - --destination=${outputs.resources.image-registry.url} - --context=${inputs.params.pathToContext} 

الآن يمكننا إنشاء مورد TaskRun لبدء مثيل المهمة المذكورة أعلاه. ومع ذلك ، في هذا المثال ، نستخدم Pipeline ، والذي يمكننا استخدامه لدمج العديد من المهام (المهام) في صف واحد:


 apiVersion: tekton.dev/v1alpha1 kind: Pipeline metadata: name: demo-pipeline spec: resources: - name: git-repo type: git - name: image-registry type: image tasks: - name: build-docker-image taskRef: name: build-docker-image params: - name: pathToDockerFile value: /workspace/git-repo/Dockerfile - name: pathToContext value: /workspace/git-repo resources: inputs: - name: git-repo resource: git-repo outputs: - name: image-registry resource: image-registry 

نظرًا لأننا نضع الصورة التي تم إنشاؤها في السجل ، فأنت بحاجة إلى التأكد من أن خط الأنابيب يمكن المصادقة عن طريق تعيين ImagePullSecrets لخدمة serviceaccount المطلوبة (في حالتنا ، يكون serviceaccount - الافتراضي).


الآن لدينا كل ما هو ضروري لإطلاق خط الأنابيب. للقيام بذلك ، نحتاج إلى تحديد التعريف الأخير لمورد PipelineRun :


 apiVersion: tekton.dev/v1alpha1 kind: PipelineRun metadata: name: demo-pipeline-run-1 spec: pipelineRef: name: demo-pipeline resources: - name: git-repo resourceRef: name: git-repo - name: image-registry resourceRef: name: image-registry 

يمكنك استخدام kubectl get pipelineruns -o yaml للتحقق من حالة خط الأنابيب.


علاوة على ذلك


بالإضافة إلى مشروع Tekton Pipeline نفسه ، هناك أيضًا مشروع لـ CLI يجعل العمل مع خطوط الأنابيب أسهل. يمكنك أيضًا إعداد لوحة معلومات على شبكة الإنترنت لعرض خطوط الأنابيب وإدارتها من المستعرض.


بالإضافة إلى ذلك ، يعمل نفس الفريق على مشروع آخر يسمى Tekton Triggers. هذا المشروع جديد إلى حد ما (الالتزام الأول كان قبل 4 أسابيع) وما زال قيد التطوير. تسمح لك مشغلات Tekton بالاتصال بـ Tekton Pipelines استنادًا إلى "مشغلات". يمكن أن يكون git-commits أو git-issues أو أي webhooks أخرى (خطاطيف الويب). مزيد من المعلومات متاحة هنا .


اقرأ أيضًا مقالات أخرى على مدونتنا:


Source: https://habr.com/ru/post/ar481992/


All Articles