پرو هوسٽر > بلاگ > انتظاميه > بهترين عملن ۽ پاليسين جي خلاف ڪبرنيٽس YAML جي تصديق ڪريو
بهترين عملن ۽ پاليسين جي خلاف ڪبرنيٽس YAML جي تصديق ڪريو
نوٽ. ترجمو: K8s ماحوليات لاء YAML ترتيبن جي وڌندڙ تعداد سان، انهن جي خودڪار تصديق جي ضرورت وڌيڪ ۽ وڌيڪ تڪڙي ٿي ويندي آهي. هن جائزي جي ليکڪ نه رڳو هن ڪم لاءِ موجوده حل چونڊيا آهن، پر انهن کي ڪيئن ڪم ڪرڻ لاءِ مثال طور استعمال ڪيو ويو آهي. اھو انھن لاءِ تمام معلوماتي ثابت ٿيو جيڪي ھن موضوع ۾ دلچسپي رکن ٿا.
TL، ڊاڪٽر: هي آرٽيڪل ڇهن جامد اوزارن جو مقابلو ڪري ٿو ڪبرنيٽس YAML فائلن کي صحيح ۽ جائزو وٺڻ لاءِ بهترين عملن ۽ گهرجن جي خلاف.
Kubernetes ڪم لوڊ عام طور تي YAML دستاويزن جي صورت ۾ بيان ڪيا ويا آهن. YAML سان مسئلن مان هڪ آهي واضح فائلن جي وچ ۾ رڪاوٽون يا رشتا بيان ڪرڻ جي مشڪل.
ڇا جيڪڏهن اسان کي پڪ ڪرڻ جي ضرورت آهي ته ڪلستر تي لڳل سڀئي تصويرون هڪ قابل اعتماد رجسٽري مان اچن ٿيون؟
مان انهن ڊيپلائيمينٽن کي ڪيئن روڪي سگهان ٿو جن وٽ پوڊ ڊسپريشن بجيٽ نه آهي ڪلستر ڏانهن موڪلڻ کان؟
جامد جانچ جي انضمام توهان کي ترقي جي اسٽيج تي غلطين ۽ پاليسي جي ڀڃڪڙي جي نشاندهي ڪرڻ جي اجازت ڏئي ٿي. اهو گارنٽي وڌائي ٿو ته وسيلن جي وصف صحيح ۽ محفوظ آهن، ۽ اهو وڌيڪ ممڪن بڻائي ٿو ته پيداوار جي ڪم لوڊ بهترين عملن جي پيروي ڪندا.
اندر ۾ ڪبيوال خيال اهو آهي ته ڪبرنيٽس سان ڪو به رابطو ان جي REST API ذريعي ٿئي ٿو. ٻين لفظن ۾، توھان استعمال ڪري سگھوٿا API اسڪيما چيڪ ڪرڻ لاءِ ته ڇا ڏنل YAML ان جي مطابق آھي. اچو ته هڪ مثال ڏسو.
$ kubeval kubeval-invalid.yaml
WARN - kubeval-invalid.yaml contains an invalid Deployment (http-echo) - selector: selector is required
PASS - kubeval-invalid.yaml contains a valid Service (http-echo)
# проверим код возврата
$ echo $?
1
وسيلن جي تصديق نه ڪئي وئي آهي.
API ورزن استعمال ڪندي ڊيپلائيشن apps/v1, هڪ چونڊيندڙ کي شامل ڪرڻ گهرجي جيڪو پوڊ جي ليبل سان ملندو آهي. مٿي ڏنل پڌرنامي ۾ چونڊيندڙ شامل نه آهي، تنهن ڪري ڪوبيوال هڪ غلطي جي رپورٽ ڪئي ۽ غير صفر ڪوڊ سان نڪتل.
$ kubectl apply -f kubeval-invalid.yaml
error: error validating "kubeval-invalid.yaml": error validating data: ValidationError(Deployment.spec):
missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors,
turn validation off with --validate=false
اها ئي غلطي آهي جنهن بابت ڪوبيوال خبردار ڪيو هو. توھان ھن کي درست ڪري سگھو ٿا چونڊيندڙ شامل ڪندي:
ڪبيوال وانگر اوزارن جو فائدو اهو آهي ته اهڙن غلطين کي پڪڙي سگهجي ٿو شروعات ۾ مقرري جي چڪر ۾.
اضافي طور تي، انهن چيڪن کي ڪلستر تائين رسائي جي ضرورت ناهي؛ اهي آف لائن ڪري سگهجن ٿيون.
ڊفالٽ طور، kubeval تازو Kubernetes API اسڪيما جي خلاف وسيلن کي چيڪ ڪري ٿو. جڏهن ته، اڪثر ڪيسن ۾ توهان کي ڪنهن مخصوص ڪبرنيٽس رليز جي خلاف چيڪ ڪرڻ جي ضرورت پوندي. اهو پرچم استعمال ڪندي ڪري سگهجي ٿو --kubernetes-version:
نسخن جي فهرست لاءِ جن جي تصديق جي حمايت ڪئي وئي آهي، مهرباني ڪري ڏسو GitHub تي JSON اسڪيما، جيڪو ڪبيوال تصديق لاءِ استعمال ڪري ٿو. جيڪڏهن توهان کي هلائڻ جي ضرورت آهي kubeval آف لائن، اسڪيما ڊائون لوڊ ڪريو ۽ پرچم استعمال ڪندي انهن جي مقامي مقام جي وضاحت ڪريو --schema-location.
انفرادي YAML فائلن جي اضافي ۾، ڪبيوال پڻ ڊائريڪٽرن ۽ اسٽين سان ڪم ڪري سگھن ٿا.
ان کان سواء، ڪوبيوال آساني سان CI پائپ لائن ۾ ضم ٿي. جيڪي ڪلستر ڏانهن منشور موڪلڻ کان اڳ ٽيسٽ هلائڻ جي خواهشمند آهن اهي ڄاڻڻ لاءِ خوش ٿيندا ته ڪوبيوال ٽن آئوٽ پٽ فارميٽ کي سپورٽ ڪري ٿو:
سادي متن؛
JSON؛
ڪجھ به پروٽوڪول جي جانچ ڪريو (TAP).
۽ ڪنهن به فارميٽ کي استعمال ڪري سگھجن ٿا آئوٽ جي وڌيڪ تجزيي لاءِ گهربل قسم جي نتيجن جو خلاصو پيدا ڪرڻ لاءِ.
ڪبيوال جي خرابين مان هڪ آهي ته اهو في الحال ڪسٽم ريسورس ڊيفينشنز (CRDs) جي تعميل جي جانچ نٿو ڪري سگهي. بهرحال، اهو ممڪن آهي ته ڪوبيوال کي ترتيب ڏيو ان کي نظر انداز ڪريو.
Kubeval وسيلن جي چڪاس ۽ جائزو وٺڻ لاء هڪ بهترين اوزار آهي. بهرحال، اهو زور ڀريو وڃي ٿو ته امتحان پاس ڪرڻ جي ضمانت نه آهي ته وسيلن جي بهترين عملن جي تعميل آهي.
مثال طور، ٽيگ استعمال ڪندي latest هڪ ڪنٽينر ۾ بهترين عملن جي پيروي نه ڪندو آهي. بهرحال، ڪوبيوال هن کي غلطي نٿو سمجهي ۽ ان کي رپورٽ نٿو ڪري. اهو آهي، اهڙي YAML جي تصديق بغير ڊيڄاريندڙ مڪمل ٿيندي.
پر ڇا جيڪڏهن توهان YAML جو جائزو وٺڻ ۽ ٽيگ وانگر خلاف ورزين جي نشاندهي ڪرڻ چاهيو ٿا latest؟ مان بهترين عملن جي خلاف YAML فائل ڪيئن چيڪ ڪري سگهان ٿو؟
2. ڪوبي-اسڪور
ڪوبي-اسڪور YAML منشور کي پارس ڪري ٿو ۽ بلٽ ان ٽيسٽن جي خلاف ان جو جائزو وٺي ٿو. اهي تجربا حفاظتي هدايتن ۽ بهترين طريقن جي بنياد تي چونڊيا ويا آهن، جهڙوڪ:
ڪنٽينر کي روٽ وانگر نه هلائڻ.
پوڊ جي صحت جي چڪاس جي دستيابي.
وسيلن لاء درخواستون ۽ حدون ترتيب ڏيڻ.
امتحان جي نتيجن جي بنياد تي، ٽي نتيجا ڏنا ويا آهن: OK, خبردار и ڪريٽو.
توھان ڪوشش ڪري سگھو ٿا ڪوبي-اسڪور آن لائن يا ان کي مقامي طور تي انسٽال ڪريو.
اصل مضمون لکڻ جي وقت، ڪوبي-اسڪور جو جديد نسخو 1.7.0 هو.
اچو ته ان کي اسان جي منشور تي آزمائي base-valid.yaml:
$ kube-score score base-valid.yaml
apps/v1/Deployment http-echo
[CRITICAL] Container Image Tag
· http-echo -> Image with latest tag
Using a fixed tag is recommended to avoid accidental upgrades
[CRITICAL] Pod NetworkPolicy
· The pod does not have a matching network policy
Create a NetworkPolicy that targets this pod
[CRITICAL] Pod Probes
· Container is missing a readinessProbe
A readinessProbe should be used to indicate when the service is ready to receive traffic.
Without it, the Pod is risking to receive traffic before it has booted. It is also used during
rollouts, and can prevent downtime if a new version of the application is failing.
More information: https://github.com/zegl/kube-score/blob/master/README_PROBES.md
[CRITICAL] Container Security Context
· http-echo -> Container has no configured security context
Set securityContext to run the container in a more secure context.
[CRITICAL] Container Resources
· http-echo -> CPU limit is not set
Resource limits are recommended to avoid resource DDOS. Set resources.limits.cpu
· http-echo -> Memory limit is not set
Resource limits are recommended to avoid resource DDOS. Set resources.limits.memory
· http-echo -> CPU request is not set
Resource requests are recommended to make sure that the application can start and run without
crashing. Set resources.requests.cpu
· http-echo -> Memory request is not set
Resource requests are recommended to make sure that the application can start and run without crashing.
Set resources.requests.memory
[CRITICAL] Deployment has PodDisruptionBudget
· No matching PodDisruptionBudget was found
It is recommended to define a PodDisruptionBudget to avoid unexpected downtime during Kubernetes
maintenance operations, such as when draining a node.
[WARNING] Deployment has host PodAntiAffinity
· Deployment does not have a host podAntiAffinity set
It is recommended to set a podAntiAffinity that stops multiple pods from a deployment from
being scheduled on the same node. This increases availability in case the node becomes unavailable.
سي پي يو وسيلن ۽ ياداشت لاءِ ڪي به درخواستون يا حدون نه آهن.
پوڊ جي رڪاوٽ جي بجيٽ بيان نه ڪئي وئي آهي.
جدا ٿيڻ جا ڪي به ضابطا نه آهن (مخالف تعلق) دستيابي کي وڌائڻ لاء.
ڪنٽينر روٽ وانگر هلندو آهي.
اهي سڀ صحيح نقطا آهن نقص جي باري ۾ جن کي حل ڪرڻ جي ضرورت آهي ڊيپلائيمينٽ کي وڌيڪ موثر ۽ قابل اعتماد بڻائڻ لاءِ.
ٽيم kube-score معلومات ڏيکاري ٿو انساني پڙهڻ جي قابل فارم ۾ سڀني قسمن جي خلاف ورزي سميت خبردار и ڪريٽو، جيڪو ترقي دوران تمام گهڻو مدد ڪري ٿو.
جيڪي هن اوزار کي استعمال ڪرڻ چاهيندا سي آئي پائپ لائن اندر پرچم استعمال ڪندي وڌيڪ ڪمپريسر آئوٽ کي فعال ڪري سگھن ٿا --output-format ci (هن حالت ۾، نتيجن سان گڏ ٽيسٽ پڻ ڏيکاريا ويا آهن OK):
$ kube-score score base-valid.yaml --output-format ci
[OK] http-echo apps/v1/Deployment
[OK] http-echo apps/v1/Deployment
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) CPU limit is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Memory limit is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) CPU request is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Memory request is not set
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Image with latest tag
[OK] http-echo apps/v1/Deployment
[CRITICAL] http-echo apps/v1/Deployment: The pod does not have a matching network policy
[CRITICAL] http-echo apps/v1/Deployment: Container is missing a readinessProbe
[CRITICAL] http-echo apps/v1/Deployment: (http-echo) Container has no configured security context
[CRITICAL] http-echo apps/v1/Deployment: No matching PodDisruptionBudget was found
[WARNING] http-echo apps/v1/Deployment: Deployment does not have a host podAntiAffinity set
[OK] http-echo v1/Service
[OK] http-echo v1/Service
[OK] http-echo v1/Service
[OK] http-echo v1/Service
kubeval سان ملندڙ جلندڙ، ڪوبي-اسڪور هڪ غير صفر نڪرڻ واري ڪوڊ کي واپس ڪري ٿو جڏهن ڪو امتحان آهي جيڪو ناڪام ٿئي ٿو ڪريٽو. توھان پڻ ساڳيو پروسيسنگ کي چالو ڪري سگھو ٿا خبردار.
ان کان علاوه، اهو ممڪن آهي ته مختلف API نسخن جي تعميل لاء وسيلن جي جانچ ڪرڻ (جيئن ته ڪبيوال ۾). بهرحال، هي معلومات خود ڪبي-اسڪور ۾ هارڊ ڪوڊ ٿيل آهي: توهان ڪبرنيٽس جو مختلف ورزن نه چونڊي سگهو ٿا. اها حد هڪ وڏو مسئلو ٿي سگهي ٿي جيڪڏهن توهان پنهنجي ڪلستر کي اپڊيٽ ڪرڻ جو ارادو رکو ٿا يا جيڪڏهن توهان وٽ K8s جي مختلف ورزن سان ڪيترائي ڪلستر آهن.
ڪبي-اسڪور ٽيسٽ بهترين عملن کي لاڳو ڪرڻ لاءِ هڪ بهترين اوزار آهن، پر جيڪڏهن توهان کي ٽيسٽ ۾ تبديليون آڻڻ يا پنهنجا ضابطا شامل ڪرڻ گهرجن؟ افسوس، اهو نه ٿو ڪري سگهجي.
Kube-score extensible نه آهي: توهان ان ۾ پاليسيون شامل نه ٿا ڪري سگهو يا انهن کي ترتيب ڏئي سگهو ٿا.
جيڪڏهن توهان کي ڪمپني جي پاليسين جي تعميل جي تصديق ڪرڻ لاءِ ڪسٽم ٽيسٽ لکڻ جي ضرورت آهي، توهان هيٺ ڏنل چار اوزارن مان هڪ استعمال ڪري سگهو ٿا: config-lint، copper، confest، or polaris.
Config-lint هڪ واعدو ڪندڙ فريم ورڪ آهي جيڪو توهان کي اجازت ڏئي ٿو توهان جا پنهنجا ٽيسٽ ٺاهڻ جي تصديق ڪرڻ لاءِ ڪبرنيٽس YAML منشور YAML DSL استعمال ڪندي.
پر جيڪڏهن توهان کي وڌيڪ پيچيده منطق ۽ تجربن جي ضرورت آهي؟ ڇا YAML ان لاءِ تمام محدود ناهي؟ ڇا جيڪڏهن توهان مڪمل پروگرامنگ ٻولي ۾ ٽيسٽ ٺاهي سگهو ٿا؟
4. ٽوپي
ڪاپر V2 ڪسٽم ٽيسٽ استعمال ڪندي منشور جي تصديق لاءِ هڪ فريم ورڪ آهي (جيئن config-lint).
بهرحال، اهو بعد ۾ مختلف آهي ته اهو YAML استعمال نه ڪندو آهي ٽيسٽ بيان ڪرڻ لاء. ٽيسٽ بدران JavaScript ۾ لکي سگهجن ٿيون. ڪاپر ڪيترن ئي بنيادي اوزارن سان گڏ لائبريري مهيا ڪري ٿو، جيڪو توهان کي ڪبرنيٽس شين جي باري ۾ معلومات پڙهڻ ۽ غلطين جي رپورٽ ڪرڻ ۾ مدد ڪري ٿو.
ڪاپر کي انسٽال ڪرڻ جا مرحلا ڳولي سگهجن ٿا سرڪاري دستاويز.
2.0.1 اصل مضمون لکڻ جي وقت هن افاديت جو تازو رليز آهي.
config-lint وانگر، ڪاپر ۾ تعمير ٿيل ٽيسٽ نه آهن. اچو ته هڪ لکون. ان کي چيڪ ڪرڻ ڏيو ته ڊيپلائيزيشن ڪنٽينر تصويرون استعمال ڪن ٿيون خاص طور تي قابل اعتماد ريپوزٽريز مان my-company.com.
ھڪڙي فائل ٺاھيو check_image_repo.js هيٺين مواد سان:
$$.forEach(function($){
if ($.kind === 'Deployment') {
$.spec.template.spec.containers.forEach(function(container) {
var image = new DockerImage(container.image);
if (image.registry.lastIndexOf('my-company.com/') != 0) {
errors.add_error('no_company_repo',"Image " + $.metadata.name + " is not from my-company.com repo", 1)
}
});
}
});
ھاڻي اسان جي پڌرنامي کي جانچڻ لاءِ base-valid.yaml، حڪم استعمال ڪريو copper validate:
$ copper validate --in=base-valid.yaml --validator=check_image_tag.js
Check no_company_repo failed with severity 1 due to Image http-echo is not from my-company.com repo
Validation failed
اهو واضح آهي ته ٽامي جي مدد سان توهان وڌيڪ پيچيده ٽيسٽ انجام ڏئي سگهو ٿا - مثال طور، Ingress manifests ۾ ڊومين جا نالا چيڪ ڪرڻ يا مراعات يافته موڊ ۾ هلندڙ پوڊ کي رد ڪرڻ.
ٽامي ۾ مختلف افاديت جا ڪم شامل آهن:
DockerImage بيان ڪيل ان پٽ فائل کي پڙهي ٿو ۽ هيٺ ڏنل خاصيتن سان هڪ اعتراض ٺاهي ٿو:
ڊفالٽ طور اهو لوڊ ڪري ٿو پوري ان پٽ YAML فائل کي متغير ۾ $$ ۽ ان کي اسڪرپٽنگ لاءِ دستياب بڻائي ٿو (جيڪي جو تجربو رکندڙ ماڻهن لاءِ هڪ واقف ٽيڪنڪ).
Copper جو بنيادي فائدو واضح آهي: توهان کي ڪنهن خاص ٻوليءَ ۾ مهارت حاصل ڪرڻ جي ضرورت نه آهي ۽ توهان جاوا اسڪرپٽ جون مختلف خاصيتون استعمال ڪري سگهو ٿا پنهنجا ٽيسٽ ٺاهڻ لاءِ، جهڙوڪ اسٽرنگ انٽرپوليشن، افعال وغيره.
اهو پڻ ياد رکڻ گهرجي ته Copper جو موجوده نسخو جاوا اسڪرپٽ انجڻ جي ES5 ورزن سان ڪم ڪري ٿو، نه ES6.
تنهن هوندي، جيڪڏهن توهان واقعي جاوا اسڪرپٽ پسند نٿا ڪريو ۽ خاص طور تي سوالن ٺاهڻ ۽ پاليسين کي بيان ڪرڻ لاءِ ٺهيل ٻولي کي ترجيح ڏيو، توهان کي مقابلي تي ڌيان ڏيڻ گهرجي.
5. Conftest
Confest هڪ فريم ورڪ آهي ترتيب ڏيڻ واري ڊيٽا کي جانچڻ لاءِ. Kubernetes manifests جي جانچ/تصديق ڪرڻ لاءِ پڻ موزون. ٽيسٽ هڪ خاص سوال جي ٻولي استعمال ڪندي بيان ڪيا ويا آهن ريگو.
توهان استعمال ڪندي conftest انسٽال ڪري سگهو ٿا هدايتونمنصوبي جي ويب سائيٽ تي درج ٿيل.
اصل مضمون لکڻ وقت، جديد نسخو موجود هو 0.18.2.
config-lint ۽ copper سان ملندڙ جلندڙ، مقابلو بغير ڪنهن بلٽ ان ٽيسٽ جي اچي ٿو. اچو ته ڪوشش ڪريون ۽ پنهنجي پاليسي لکون. جيئن اڳئين مثالن ۾، اسان چيڪ ڪنداسين ته ڇا ڪنٽينر جون تصويرون ڪنهن قابل اعتماد ذريعن کان ورتيون ويون آهن.
ڊاريڪٽري ٺاھيو conftest-checks، ۽ ان ۾ نالي هڪ فائل آهي check_image_registry.rego هيٺين مواد سان:
package main
deny[msg] {
input.kind == "Deployment"
image := input.spec.template.spec.containers[_].image
not startswith(image, "my-company.com/")
msg := sprintf("image '%v' doesn't come from my-company.com repository", [image])
}
هاڻي اچو ته امتحان base-valid.yaml через conftest:
$ conftest test --policy ./conftest-checks base-valid.yaml
FAIL - base-valid.yaml - image 'hashicorp/http-echo' doesn't come from my-company.com repository
1 tests, 1 passed, 0 warnings, 1 failure
امتحان ممڪن طور تي ناڪام ٿيو ڇو ته تصويرون هڪ ناقابل اعتبار ذريعن کان آيا آهن.
ريگو فائل ۾ اسان بلاڪ کي بيان ڪريون ٿا deny. ان جي سچائي جي خلاف ورزي سمجهي ويندي آهي. جيڪڏهن بلاڪ deny ڪيترائي، مقابلو انهن کي هڪ ٻئي کان آزاد طور تي چيڪ ڪري ٿو، ۽ ڪنهن به بلاڪ جي سچائي کي خلاف ورزي سمجهيو ويندو آهي.
ڊفالٽ آئوٽ جي اضافي ۾، مقابلي ۾ JSON، TAP ۽ ٽيبل فارميٽ کي سپورٽ ڪري ٿو - هڪ انتهائي مفيد خصوصيت جيڪڏهن توهان کي موجوده CI پائپ لائن ۾ رپورٽون شامل ڪرڻ جي ضرورت آهي. توھان جھنڊو استعمال ڪندي گھربل فارميٽ سيٽ ڪري سگھو ٿا --output.
ان کي آسان بڻائڻ لاءِ پاليسين کي ڊيبگ ڪرڻ لاءِ، مقابلي ۾ هڪ پرچم آهي --trace. اهو نتيجو ڪڍي ٿو ته ڪيئن تضاد بيان ڪيل پاليسي فائلن کي پارس ڪري ٿو.
مقابلي جون پاليسيون شايع ڪري سگھجن ٿيون ۽ شيئر ڪري سگھجن ٿيون OCI (Open Container Initiative) رجسٽري ۾ آرٽيڪلز جي طور تي.
Команды push и pull توهان کي هڪ آرٽيڪل شايع ڪرڻ جي اجازت ڏئي ٿي يا ريموٽ رجسٽري مان موجوده آرٽيڪل ٻيهر حاصل ڪرڻ. اچو ته اها پاليسي شايع ڪرڻ جي ڪوشش ڪريون جيڪا اسان ٺاهي مقامي ڊاڪر رجسٽري کي استعمال ڪندي conftest push.
جيترو سکور 100 جي ويجهو آهي، اوترو وڌيڪ معاهدي جو درجو. جيڪڏهن توهان حڪم جي نڪرڻ واري ڪوڊ کي چيڪ ڪريو polaris audit، اهو ظاهر ٿئي ٿو ته اهو 0 جي برابر آهي.
زور polaris audit توھان ٻن جھنڊن کي استعمال ڪندي غير صفر ڪوڊ سان ڪم ختم ڪري سگھو ٿا:
پرچم --set-exit-code-below-score 1-100 جي حد ۾ هڪ دليل جي طور تي هڪ حد جي قيمت وٺندو آهي. انهي صورت ۾، حڪم نڪرڻ واري ڪوڊ 4 سان نڪرندو جيڪڏهن سکور حد کان هيٺ آهي. اهو تمام مفيد آهي جڏهن توهان وٽ هڪ خاص حد جي قيمت آهي (چئو 75) ۽ توهان کي خبرداري حاصل ڪرڻ جي ضرورت آهي جيڪڏهن سکور هيٺ ٿي وڃي.
پرچم --set-exit-code-on-danger ڪوڊ 3 سان ناڪام ٿيڻ جي حڪم جو سبب بڻائيندو جيڪڏهن خطري جي تجربن مان هڪ ناڪام ٿي.
failureMessage - هي پيغام ناڪامي جي صورت ۾ ڏيکاريو ويندو؛
category - ظاھر ڪري ٿو ھڪڙي ڀاڱن مان: Images, Health Checks, Security, Networking и Resources;
target--- طئي ڪري ٿو ڪهڙي قسم جو اعتراض (spec) ٽيسٽ لاڳو ڪئي وئي آهي. ممڪن قدر: Container, Pod يا Controller;
امتحان پاڻ کي اعتراض ۾ بيان ڪيو ويو آهي schema JSON اسڪيما استعمال ڪندي. هن امتحان ۾ اهم لفظ آهي pattern گھربل ھڪڙي سان تصوير جي ماخذ کي موازنہ ڪرڻ لاء استعمال ڪيو ويو.
مٿين ٽيسٽ کي هلائڻ لاءِ، توھان کي ھيٺ ڏنل پولارس ٺاھڻ جي ضرورت آھي:
جي ميدان ۾ checks ٽيسٽ ۽ انهن جي تنقيد جي سطح مقرر ڪئي وئي آهي. جيئن ته هڪ ڊيڄاريندڙ حاصل ڪرڻ ضروري آهي جڏهن هڪ تصوير هڪ ناقابل اعتبار ذريعن کان ورتو وڃي، اسان هتي سطح مقرر ڪريون ٿا danger.
ٽيم polaris audit مٿي بيان ڪيل صرف استعمال ڪندڙ ٽيسٽ هلائي ۽ اهو ناڪام ٿيو.
جيڪڏھن توھان تصوير کي درست ڪريو my-company.com/http-echo:1.0، پولارس ڪاميابي سان مڪمل ڪندو. تبديلين سان گڏ منشور اڳ ۾ ئي آهي ذخيروتنهن ڪري توهان پڌري تي پوئين حڪم چيڪ ڪري سگهو ٿا image-valid-mycompany.yaml.
هاڻي سوال پيدا ٿئي ٿو: ڪسٽم وارن سان گڏ بلٽ ان ٽيسٽ کي ڪيئن هلائڻ؟ آساني سان! توهان کي صرف شامل ڪرڻ جي ضرورت آهي تعمير ٿيل ٽيسٽ سڃاڻپ ڪندڙ کي ترتيب ڏيڻ واري فائل ۾. نتيجي طور، اهو هيٺ ڏنل فارم وٺي ويندو:
انهن لاءِ جن کي پيچيده گهرجون آهن ۽ ٽيسٽ کي تفصيل سان ترتيب ڏيڻ جي ضرورت آهي، ٽامي، ترتيب-لنٽ ۽ مقابلو مناسب هوندا.
Conftest ۽ config-lint استعمال ڪري ٿو YAML ڪسٽم ٽيسٽ کي بيان ڪرڻ لاءِ، ۽ ڪاپر توهان کي مڪمل پروگرامنگ ٻولي تائين رسائي ڏئي ٿي، ان کي هڪ خوبصورت پرڪشش پسند بڻائيندي.
ٻئي طرف، ڇا اهو انهن اوزارن مان هڪ کي استعمال ڪرڻ جي قابل آهي، ۽ تنهن ڪري، دستي طور تي سڀني ٽيسٽ ٺاهڻ، يا پولارس کي ترجيح ڏيو ۽ صرف ان کي شامل ڪريو جيڪي ان جي ضرورت آهي؟ هن سوال جو ڪو به واضح جواب نه آهي.
هيٺ ڏنل جدول هر اوزار جي مختصر وضاحت مهيا ڪري ٿو:
ساز
مقصد
shortcomings
استعمال ڪندڙ ٽيسٽ
ڪبيوال
تصديق ڪري ٿو YAML ظاهر ڪري ٿو API اسڪيما جي مخصوص ورزن جي خلاف
CRD سان ڪم نٿو ڪري سگھجي
نه
ڪوبي-اسڪور
YAML جو تجزيو ڪيو بهترين عملن جي خلاف ظاهر ٿئي ٿو
وسيلا چيڪ ڪرڻ لاءِ توهان جو ڪبرنيٽس API ورزن نه چونڊيو
نه
ٽامي
YAML manifests لاءِ ڪسٽم جاوا اسڪرپٽ ٽيسٽ ٺاهڻ لاءِ هڪ عام فريم ورڪ
نه بلٽ ان ٽيسٽ. ناقص دستاويز
ته
config-lint
YAML ۾ شامل ٿيل ڊومين-مخصوص ٻولي ۾ ٽيسٽ ٺاهڻ لاءِ هڪ عام فريم ورڪ. مختلف ترتيبن جي فارميٽ کي سپورٽ ڪري ٿو (مثال طور Terraform)
تيار ٿيل ٽيسٽ نه آهن. بلٽ-ان دعويٰ ۽ افعال ڪافي نه هوندا
ته
مقابلو
ريگو (هڪ خاص سوال جي ٻولي) استعمال ڪندي پنهنجون ٽيسٽون ٺاهڻ لاءِ هڪ فريم ورڪ. OCI بنڊل ذريعي پاليسين جي حصيداري جي اجازت ڏئي ٿي
نه بلٽ ان ٽيسٽ. مون کي ريگو سکڻو آهي. Docker Hub سپورٽ نه آهي جڏهن پاليسين شايع ڪري ٿي
ته
پولارس
جائزو YAML معياري بهترين عملن جي خلاف ظاهر ڪري ٿو. توهان کي اجازت ڏئي ٿي توهان جي پنهنجي ٽيسٽ ٺاهڻ جي JSON اسڪيما استعمال ڪندي
JSON اسڪيما جي بنياد تي ٽيسٽ صلاحيتون ڪافي نه هجن
ته
ڇاڪاڻ ته اهي اوزار ڪبرنيٽس ڪلستر تائين رسائي تي ڀروسو نٿا ڪن، اهي انسٽال ڪرڻ آسان آهن. اهي توهان کي ماخذ فائلن کي فلٽر ڪرڻ جي اجازت ڏين ٿا ۽ منصوبن ۾ پل درخواستن جي ليکڪن کي تڪڙو موٽ ڏيو.