kube-state-metrics (KSM) เป็นบริการง่ายๆ ที่รับฟังเซิร์ฟเวอร์ Kubernetes API และสร้างตัวชี้วัดเกี่ยวกับสถานะของออบเจ็กต์ (ดูตัวอย่างในส่วนเมตริกด้านล่าง) ไม่ได้มุ่งเน้นไปที่ความสมบูรณ์ของส่วนประกอบ Kubernetes แต่ละรายการ แต่เน้นที่ความสมบูรณ์ของออบเจ็กต์ต่างๆ ที่อยู่ภายใน เช่น การปรับใช้ โหนด และพ็อด
kube-state-metrics เป็นเรื่องเกี่ยวกับการสร้างตัวชี้วัดจากวัตถุ Kubernetes API โดยไม่มีการแก้ไข วิธีนี้ช่วยให้แน่ใจว่าฟีเจอร์ที่ kube-state-metrics มีระดับความเสถียรเท่ากันกับออบเจ็กต์ Kubernetes API ในทางกลับกัน ซึ่งหมายความว่า kube-state-metrics ในบางสถานการณ์อาจไม่แสดงค่าเดียวกันกับ kubectl เนื่องจาก kubectl ใช้การวิเคราะห์พฤติกรรมบางอย่างเพื่อแสดงข้อความที่เข้าใจได้ kube-state-metrics เปิดเผยข้อมูลดิบที่ไม่ได้แก้ไขจาก Kubernetes API วิธีนี้ทำให้ผู้ใช้มีข้อมูลทั้งหมดที่ต้องการและดำเนินการศึกษาพฤติกรรมตามที่เห็นสมควร
ตัววัดจะถูกส่งออกบนจุดสิ้นสุด HTTP /metrics
บนพอร์ตการฟัง (ค่าเริ่มต้น 8080) พวกเขาจะทำหน้าที่เป็นข้อความธรรมดา ได้รับการออกแบบมาให้ใช้งานโดย Prometheus เองหรือโดยเครื่องขูดที่เข้ากันได้กับการคัดลอกตำแหน่งข้อมูลไคลเอนต์ Prometheus คุณยังสามารถเปิด /metrics
ในเบราว์เซอร์เพื่อดูตัวชี้วัดดิบได้ โปรดทราบว่าเมตริกที่แสดงบนตำแหน่ง /metrics
สะท้อนถึงสถานะปัจจุบันของคลัสเตอร์ Kubernetes เมื่อลบออบเจ็กต์ Kubernetes ออบเจ็กต์จะไม่ปรากฏบนปลายทาง /metrics
อีกต่อไป
บันทึก
README นี้สร้างขึ้นจากเทมเพลต โปรดทำการเปลี่ยนแปลงที่นั่นและเรียกใช้ make generate-template
การกำหนดเวอร์ชัน
เวอร์ชัน Kubernetes
เมทริกซ์ความเข้ากันได้
ความเข้ากันได้ของเวอร์ชันกลุ่มทรัพยากร
ภาพคอนเทนเนอร์
เอกสารประกอบเมตริก
การแก้ไขข้อขัดแย้งในชื่อป้ายกำกับ
เมตริกตนเองของ Kube-state-metrics
คำแนะนำทรัพยากร
เวลาแฝง
หมายเหตุเกี่ยวกับการคิดต้นทุน
kube-state-metrics กับ metrics-server
การปรับขนาด kube-state-metrics
การแบ่งส่วนอัตโนมัติ
คำแนะนำทรัพยากร
การแบ่งส่วนแนวนอน
การแบ่งส่วน Daemonset สำหรับการวัดพ็อด
ตั้งค่า
การสร้างคอนเทนเนอร์นักเทียบท่า
การใช้งาน
การปรับใช้ Kubernetes
สภาพแวดล้อมสิทธิพิเศษที่จำกัด
แผนภูมิหางเสือ
การพัฒนา
การมีส่วนร่วมของนักพัฒนา
ชุมชน
kube-state-metrics ใช้ client-go
เพื่อพูดคุยกับคลัสเตอร์ Kubernetes เวอร์ชันคลัสเตอร์ Kubernetes ที่รองรับถูกกำหนดโดย client-go
คุณสามารถดูเมทริกซ์ความเข้ากันได้สำหรับคลัสเตอร์ client-go และ Kubernetes ได้ที่นี่ ความเข้ากันได้เพิ่มเติมทั้งหมดเป็นเพียงความพยายามอย่างดีที่สุดเท่านั้น หรือเกิดขึ้นว่ายังคง/ได้รับการสนับสนุนอยู่แล้ว
มากที่สุด 5 kube-state-metrics และ 5 kubernetes release จะถูกบันทึกไว้ด้านล่าง โดยทั่วไป ขอแนะนำให้ใช้ kube-state-metrics รุ่นล่าสุด หากคุณใช้งาน Kubernetes เวอร์ชันล่าสุด คุณอาจต้องการใช้เวอร์ชันที่ยังไม่เผยแพร่เพื่อให้มีทรัพยากรที่รองรับอย่างเต็มรูปแบบ หากคุณใช้ Kubernetes เวอร์ชันเก่า คุณอาจต้องเรียกใช้เวอร์ชันเก่ากว่าจึงจะได้รับการสนับสนุนอย่างเต็มที่สำหรับทรัพยากรทั้งหมด โปรดทราบว่าผู้ดูแลจะสนับสนุนเฉพาะรุ่นล่าสุดเท่านั้น เวอร์ชันเก่าอาจได้รับการสนับสนุนจากผู้ใช้ที่สนใจในชุมชน
kube-state-เมตริก | เวอร์ชันไคลเอ็นต์ Go ของ Kubernetes |
---|---|
เวอร์ชัน 2.10.1 | เวอร์ชัน 1.27 |
เวอร์ชัน 2.11.0 | เวอร์ชัน 1.28 |
เวอร์ชัน 2.12.0 | เวอร์ชัน 1.29 |
เวอร์ชัน 2.13.0 | เวอร์ชัน 1.30 |
เวอร์ชัน 2.14.0 | เวอร์ชัน 1.31 |
หลัก | เวอร์ชัน 1.31 |
ทรัพยากรใน Kubernetes สามารถพัฒนาได้ กล่าวคือ เวอร์ชันกลุ่มสำหรับทรัพยากรอาจเปลี่ยนจากอัลฟ่าเป็นเบต้า และสุดท้ายคือ GA ใน Kubernetes เวอร์ชันต่างๆ ในตอนนี้ kube-state-metrics จะใช้เฉพาะ API ที่เก่าที่สุดที่มีอยู่ในรุ่นล่าสุดเท่านั้น
สามารถดูคอนเทนเนอร์อิมเมจล่าสุดได้ที่:
registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.14.0
(ส่วนโค้ง: amd64
, arm
, arm64
, ppc64le
และ s390x
)
ดูภาพหลายสถาปัตยกรรมทั้งหมดได้ที่นี่
ทรัพยากรและตัวชี้วัดใดๆ ที่ใช้ alpha Kubernetes API จะไม่รวมอยู่ในการรับประกันความเสถียรใดๆ ซึ่งอาจมีการเปลี่ยนแปลงในรุ่นใดก็ตาม
ดูไดเรกทอรี docs
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเมตริกที่เปิดเผย
กลุ่มเมตริก *_labels
จะแสดงป้ายกำกับ Kubernetes เป็นป้ายกำกับ Prometheus เนื่องจาก Kubernetes มีความเสรีมากกว่า Prometheus ในแง่ของอักขระที่อนุญาตในชื่อป้ายกำกับ เราจึงแปลงอักขระที่ไม่รองรับเป็นขีดล่างโดยอัตโนมัติ ตัวอย่างเช่น app.kubernetes.io/name
จะกลายเป็น label_app_kubernetes_io_name
การแปลงนี้อาจทำให้เกิดความขัดแย้งได้เมื่อป้ายกำกับ Kubernetes หลายรายการ เช่น foo-bar
และ foo_bar
จะถูกแปลงเป็นป้ายกำกับ Prometheus label_foo_bar
เดียวกัน
Kube-state-metrics จะเพิ่มส่วนต่อท้าย _conflictN
โดยอัตโนมัติเพื่อแก้ไขข้อขัดแย้งนี้ ดังนั้นจึงแปลงป้ายกำกับด้านบนเป็น label_foo_bar_conflict1
และ label_foo_bar_conflict2
หากคุณต้องการควบคุมวิธีแก้ไขข้อขัดแย้งนี้ได้มากขึ้น คุณอาจต้องการพิจารณาแก้ไขปัญหานี้ในระดับอื่นของสแต็ก เช่น โดยการกำหนดป้ายกำกับ Kubernetes ให้เป็นมาตรฐานโดยใช้ Admission Webhook เพื่อให้แน่ใจว่าไม่มีข้อขัดแย้งที่อาจเกิดขึ้นได้
kube-state-metrics เปิดเผยการวัดกระบวนการทั่วไปของตัวเองภายใต้ --telemetry-host
และ --telemetry-port
(ค่าเริ่มต้น 8081)
kube-state-metrics ยังแสดงรายการและดูการวัดความสำเร็จและข้อผิดพลาด สิ่งเหล่านี้สามารถใช้เพื่อคำนวณอัตราข้อผิดพลาดของรายการหรือทรัพยากรการดู หากคุณพบข้อผิดพลาดเหล่านั้นในตัววัด อาจเป็นไปได้ว่าเป็นปัญหาเกี่ยวกับการกำหนดค่าหรือสิทธิ์ และสิ่งถัดไปที่ต้องตรวจสอบคือการดูบันทึกของตัววัด kube-state-
ตัวอย่างของตัวชี้วัดที่กล่าวถึงข้างต้น:
kube_state_metrics_list_total{resource="*v1.Node",result="success"} 1 kube_state_metrics_list_total{resource="*v1.Node",result="error"} 52 kube_state_metrics_watch_total{resource="*v1beta1.Ingress",result="success"} 1
kube-state-metrics ยังเปิดเผยเมตริกคำขอ http บางส่วนด้วย ตัวอย่างของสิ่งเหล่านั้นคือ:
http_request_duration_seconds_bucket{handler="metrics",method="get",le="2.5"} 30 http_request_duration_seconds_bucket{handler="metrics",method="get",le="5"} 30 http_request_duration_seconds_bucket{handler="metrics",method="get",le="10"} 30 http_request_duration_seconds_bucket{handler="metrics",method="get",le="+Inf"} 30 http_request_duration_seconds_sum{handler="metrics",method="get"} 0.021113919999999998 http_request_duration_seconds_count{handler="metrics",method="get"} 30
kube-state-metrics ยังเปิดเผยเมตริกการสร้างและการกำหนดค่าด้วย:
kube_state_metrics_build_info{branch="main",goversion="go1.15.3",revision="6c9d775d",version="v2.0.0-beta"} 1 kube_state_metrics_shard_ordinal{shard_ordinal="0"} 0 kube_state_metrics_total_shards 1
kube_state_metrics_build_info
ใช้เพื่อเปิดเผยเวอร์ชันและข้อมูลบิลด์อื่นๆ หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบข้อมูล โปรดตรวจสอบโพสต์ในบล็อกที่นี่ เมตริกการแบ่งส่วนจะแสดงแฟล็ก --shard
และ --total-shards
และสามารถใช้เพื่อตรวจสอบการกำหนดค่ารันไทม์ ดูที่ /examples/prometheus-alerting-rules
kube-state-metrics ยังเปิดเผยตัวชี้วัดเกี่ยวกับไฟล์กำหนดค่าและไฟล์กำหนดค่า Custom Resource State:
kube_state_metrics_config_hash{filename="crs.yml",type="customresourceconfig"} 2.38272279311849e+14 kube_state_metrics_config_hash{filename="config.yml",type="config"} 2.65285922340846e+14 kube_state_metrics_last_config_reload_success_timestamp_seconds{filename="crs.yml",type="customresourceconfig"} 1.6704882592037103e+09 kube_state_metrics_last_config_reload_success_timestamp_seconds{filename="config.yml",type="config"} 1.6704882592035313e+09 kube_state_metrics_last_config_reload_successful{filename="crs.yml",type="customresourceconfig"} 1 kube_state_metrics_last_config_reload_successful{filename="config.yml",type="config"} 1
การใช้ทรัพยากรสำหรับการเปลี่ยนแปลง kube-state-metrics ด้วยขนาดของออบเจ็กต์ Kubernetes (พ็อด/โหนด/การทำให้ใช้งานได้/ความลับ ฯลฯ) ของคลัสเตอร์ ในระดับหนึ่ง ออบเจ็กต์ Kubernetes ในคลัสเตอร์จะมีสัดส่วนโดยตรงกับหมายเลขโหนดของคลัสเตอร์
ตามกฎทั่วไป คุณควรจัดสรร:
หน่วยความจำ 250MiB
0.1 แกน
โปรดทราบว่าหากตั้งค่าขีดจำกัดของ CPU ต่ำเกินไป คิวภายในของ kube-state-metrics จะไม่สามารถทำงานได้เร็วเพียงพอ ส่งผลให้มีการใช้หน่วยความจำเพิ่มขึ้นเมื่อความยาวของคิวเพิ่มขึ้น หากคุณประสบปัญหาที่เกิดจากการจัดสรรหน่วยความจำสูงหรือการควบคุมปริมาณ CPU ให้ลองเพิ่มขีดจำกัดของ CPU
ในการทดสอบการปรับขนาดคลัสเตอร์ 100 โหนด หมายเลขเวลาแฝงมีดังนี้:
"Perc50": 259615384 ns, "Perc90": 475000000 ns, "Perc99": 906666666 ns.
โดยค่าเริ่มต้น kube-state-metrics เปิดเผยเมตริกหลายรายการสำหรับเหตุการณ์ทั่วทั้งคลัสเตอร์ของคุณ หากคุณมีทรัพยากรที่อัปเดตบ่อยครั้งจำนวนมากในคลัสเตอร์ของคุณ คุณอาจพบว่ามีการนำเข้าข้อมูลจำนวนมากเข้าไปในตัววัดเหล่านี้ สิ่งนี้อาจทำให้ผู้ให้บริการคลาวด์บางรายมีค่าใช้จ่ายสูง โปรดสละเวลาสักครู่เพื่อกำหนดค่าเมตริกที่คุณต้องการเปิดเผย รวมทั้งศึกษาเอกสารประกอบสำหรับสภาพแวดล้อม Kubernetes ของคุณเพื่อหลีกเลี่ยงค่าใช้จ่ายที่สูงเกินคาด
เซิร์ฟเวอร์ตัววัดเป็นโปรเจ็กต์ที่ได้รับแรงบันดาลใจจาก Heapster และนำไปใช้เพื่อตอบสนองเป้าหมายของไปป์ไลน์ตัววัดหลักในสถาปัตยกรรมการตรวจสอบของ Kubernetes เป็นองค์ประกอบระดับคลัสเตอร์ซึ่งจะรวบรวมตัววัดจากโหนด Kubernetes ทั้งหมดที่ให้บริการโดย Kubelet ผ่าน Metrics API เป็นระยะๆ ตัววัดจะถูกรวบรวม จัดเก็บในหน่วยความจำ และให้บริการในรูปแบบ Metrics API เซิร์ฟเวอร์ตัววัดจะเก็บค่าล่าสุดเท่านั้น และไม่รับผิดชอบในการส่งต่อตัววัดไปยังปลายทางของบุคคลที่สาม
kube-state-metrics มุ่งเน้นไปที่การสร้างตัววัดใหม่ทั้งหมดจากสถานะอ็อบเจ็กต์ของ Kubernetes (เช่น ตัววัดตามการใช้งาน ชุดแบบจำลอง ฯลฯ) โดยจะเก็บสแนปชอตทั้งหมดของสถานะ Kubernetes ไว้ในหน่วยความจำ และสร้างตัววัดใหม่อย่างต่อเนื่องตามสถานะนั้น และเช่นเดียวกับเซิร์ฟเวอร์หน่วยเมตริก ก็ไม่รับผิดชอบในการส่งออกหน่วยเมตริกไปทุกที่เช่นกัน
การมี kube-state-metrics เป็นโปรเจ็กต์แยกต่างหากยังช่วยให้สามารถเข้าถึงตัววัดเหล่านี้จากระบบการตรวจสอบ เช่น Prometheus
เพื่อที่จะแบ่งส่วนเมตริก kube-state-metric ในแนวนอน ได้มีการนำความสามารถในการแบ่งส่วนข้อมูลอัตโนมัติบางอย่างมาใช้ มีการกำหนดค่าด้วยแฟล็กต่อไปนี้:
--shard
(จัดทำดัชนีเป็นศูนย์)
--total-shards
การแบ่งส่วนทำได้โดยรับผลรวม md5 ของ UID ของ Kubernetes Object และดำเนินการแบบโมดูโลกับจำนวนส่วนแบ่งทั้งหมด แต่ละชาร์ดจะตัดสินใจว่าออบเจ็กต์ได้รับการจัดการโดยอินสแตนซ์ของ kube-state-metrics ตามลำดับหรือไม่ โปรดทราบว่านี่หมายความว่าอินสแตนซ์ทั้งหมดของ kube-state-metrics แม้ว่าจะถูกแบ่งส่วนก็ตาม ก็จะมีการรับส่งข้อมูลเครือข่ายและปริมาณการใช้ทรัพยากรสำหรับการแยกส่วนออบเจ็กต์สำหรับออบเจ็กต์ทั้งหมด ไม่ใช่แค่ออบเจ็กต์ที่รับผิดชอบเท่านั้น เพื่อเพิ่มประสิทธิภาพนี้ต่อไป Kubernetes API จะต้องรองรับความสามารถรายการชาร์ด/การดู ในกรณีที่เหมาะสมที่สุด ปริมาณการใช้หน่วยความจำสำหรับแต่ละส่วนแบ่งข้อมูลจะเท่ากับ 1/n เมื่อเทียบกับการตั้งค่าแบบไม่แบ่งส่วน โดยทั่วไปแล้ว ตัววัดสถานะ kube จะต้องได้รับการปรับให้เหมาะสมสำหรับหน่วยความจำและเวลาแฝงเพื่อให้สามารถส่งคืนตัววัดไปยัง Prometheus ได้อย่างรวดเร็ว วิธีหนึ่งในการลดเวลาแฝงระหว่าง kube-state-metrics และ kube-apiserver คือการรัน KSM ด้วยแฟล็ก --use-apiserver-cache
นอกเหนือจากการลดเวลาแฝงแล้ว ตัวเลือกนี้ยังช่วยลดภาระใน ฯลฯ อีกด้วย
ควรใช้ชาร์ดดิ้งอย่างระมัดระวังและควรตั้งค่าการตรวจสอบเพิ่มเติมเพื่อให้แน่ใจว่าชาร์ดดิ้งได้รับการตั้งค่าและทำงานตามที่คาดไว้ (เช่น มีการกำหนดค่าอินสแตนซ์สำหรับแต่ละชาร์ดจากชาร์ดทั้งหมด)
การแบ่งส่วนอัตโนมัติช่วยให้แต่ละส่วนค้นพบตำแหน่งที่ระบุเมื่อใช้งานใน StatefulSet ซึ่งมีประโยชน์สำหรับการกำหนดค่าการแบ่งส่วนโดยอัตโนมัติ นี่เป็นคุณลักษณะทดลองและอาจใช้งานไม่ได้หรือถูกลบออกโดยไม่ต้องแจ้งให้ทราบ
หากต้องการเปิดใช้งานการแบ่งส่วนอัตโนมัติ kube-state-metrics ต้องรันโดย StatefulSet
และชื่อพ็อดและเนมสเปซจะต้องถูกส่งไปยังกระบวนการ kube-state-metrics ผ่านทางแฟล็ก --pod
และ --pod-namespace
ตัวอย่างการแสดงฟังก์ชันการแบ่งส่วนอัตโนมัติสามารถพบได้ใน /examples/autosharding
วิธีการปรับใช้ชาร์ดนี้มีประโยชน์เมื่อคุณต้องการจัดการชาร์ด KSM ผ่านทรัพยากร Kubernetes เดียว (ในกรณีนี้ StatefulSet
เดียว) แทนที่จะมี Deployment
หนึ่งครั้งต่อชาร์ด ข้อได้เปรียบอาจมีนัยสำคัญอย่างยิ่งเมื่อปรับใช้ชาร์ดจำนวนมาก
ข้อเสียของการใช้การตั้งค่าการแบ่งส่วนอัตโนมัติมาจากกลยุทธ์การเปิดตัวที่รองรับโดย StatefulSet
เมื่อจัดการโดย StatefulSet
พ็อดจะถูกแทนที่ด้วยทีละพ็อด โดยแต่ละพ็อดจะถูกยกเลิกก่อน จากนั้นจึงสร้างขึ้นใหม่ นอกจากการเปิดตัวจะช้าลงแล้ว ยังส่งผลให้แต่ละชาร์ดมีเวลาหยุดทำงานสั้นลงด้วย หากการคัดลอก Prometheus เกิดขึ้นระหว่างการเปิดตัว อาจพลาดตัววัดบางตัวที่ส่งออกโดย kube-state-metrics
สำหรับเมตริกพ็อด สามารถแบ่งส่วนต่อโหนดได้โดยใช้แฟล็กต่อไปนี้
--node=$(NODE_NAME)
แต่ละพ็อด kube-state-metrics ใช้ FieldSelector (spec.nodeName) เพื่อรับชม/แสดงรายการเมตริกของพ็อดบนโหนดเดียวกันเท่านั้น
ตัวอย่าง daemonset kube-state-metrics:
apiVersion: apps/v1 kind: DaemonSet spec: template: spec: containers: - image: registry.k8s.io/kube-state-metrics/kube-state-metrics:IMAGE_TAG name: kube-state-metrics args: - --resource=pods - --node=$(NODE_NAME) env: - name: NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName
หากต้องการติดตามตัววัดสำหรับพ็อดที่ยังไม่ได้กำหนด คุณจะต้องเพิ่มการปรับใช้เพิ่มเติมและตั้งค่า --track-unscheduled-pods
ดังที่แสดงในตัวอย่างต่อไปนี้:
apiVersion: apps/v1 kind: Deployment spec: template: spec: containers: - image: registry.k8s.io/kube-state-metrics/kube-state-metrics:IMAGE_TAG name: kube-state-metrics args: - --resources=pods - --track-unscheduled-pods
เมตริกอื่นๆ สามารถแบ่งส่วนได้โดยใช้การแบ่งส่วนแนวนอน
ติดตั้งโปรเจ็กต์นี้ลงใน $GOPATH
ของคุณโดยใช้ go get
:
go get k8s.io/kube-state-metrics
เพียงรันคำสั่งต่อไปนี้ในโฟลเดอร์รูทนี้ ซึ่งจะสร้างไบนารี่ที่มีลิงก์แบบคงที่ในตัวเอง และสร้างอิมเมจ Docker:
make container
เพียงสร้างและเรียกใช้ kube-state-metrics ภายในพ็อด Kubernetes ซึ่งมีโทเค็นบัญชีบริการที่มีสิทธิ์เข้าถึงคลัสเตอร์ Kubernetes ระดับอ่านอย่างเดียว
สแต็ก ( kube-prometheus
) จะติดตั้ง kube-state-metrics เป็นหนึ่งในองค์ประกอบ คุณไม่จำเป็นต้องติดตั้ง kube-state-metrics หากคุณใช้สแต็ก kube-prometheus
หากคุณต้องการแก้ไขการกำหนดค่าเริ่มต้นสำหรับ kube-prometheus เช่น เพื่อเปิดใช้งานตัววัดที่ไม่ใช่ค่าเริ่มต้น โปรดดูที่การปรับแต่ง Kube-Prometheus
หากต้องการปรับใช้โปรเจ็กต์นี้ คุณสามารถเรียกใช้ kubectl apply -f examples/standard
แล้วบริการ Kubernetes และการปรับใช้จะถูกสร้างขึ้น (หมายเหตุ: ปรับ apiVersion ของทรัพยากรบางอย่างหากเวอร์ชันของคลัสเตอร์ kubernetes ไม่ใช่ 1.8+ ให้ตรวจสอบไฟล์ yaml เพื่อดูข้อมูลเพิ่มเติม)
หากต้องการให้ Prometheus ค้นหาอินสแตนซ์ kube-state-metrics ขอแนะนำให้สร้างการกำหนดค่า Prometheus scrape เฉพาะสำหรับ kube-state-metrics ที่รับตำแหน่งข้อมูลเมตริกทั้งสอง ไม่สนับสนุนการค้นพบโดยใช้คำอธิบายประกอบเนื่องจากสามารถเลือกปลายทางได้เพียงจุดเดียว นอกจากนี้ kube-state-metric ในกรณีส่วนใหญ่จะมีข้อกำหนดการตรวจสอบสิทธิ์และการอนุญาตพิเศษ เนื่องจากให้สิทธิ์การเข้าถึงแบบอ่านผ่านจุดสิ้นสุดของเมตริกแก่ข้อมูลส่วนใหญ่ที่มีอยู่
หมายเหตุ: ผู้ใช้ Google Kubernetes Engine (GKE) - GKE มีสิทธิ์ในบทบาทที่เข้มงวดซึ่งจะป้องกันไม่ให้มีการสร้างบทบาท kube-state-metrics และการเชื่อมโยงบทบาท หากต้องการแก้ไขปัญหานี้ คุณสามารถมอบบทบาทผู้ดูแลระบบคลัสเตอร์ให้กับข้อมูลประจำตัว GCP ของคุณได้โดยการเรียกใช้ one-liner ต่อไปนี้:
kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=$(gcloud info --format='value(config.account)')
โปรดทราบว่าข้อมูลประจำตัว GCP ของคุณคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่ gcloud info
ใน Google Cloud SDK 221.0.0 ไม่ได้เป็นเช่นนั้น ซึ่งหมายความว่าหากสมาชิก IAM ของคุณมีตัวพิมพ์ใหญ่ ตัวอักษรหนึ่งบรรทัดข้างต้นอาจไม่เหมาะกับคุณ หากคุณมีการตอบกลับที่ต้องห้าม 403 หลังจากรันคำสั่งด้านบนและ kubectl apply -f examples/standard
ให้ตรวจสอบสมาชิก IAM ที่เชื่อมโยงกับบัญชีของคุณที่ https://console.cloud.google.com/iam-admin/iam?project=PROJECT_ID . หากมีอักษรตัวพิมพ์ใหญ่ คุณอาจต้องตั้งค่าสถานะ --user ในคำสั่งด้านบนให้เป็นบทบาทที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ซึ่งแสดงอยู่ที่ https://console.cloud.google.com/iam-admin/iam?project=PROJECT_ID
หลังจากเรียกใช้ข้างต้น หากคุณเห็น Clusterrolebinding "cluster-admin-binding" created
คุณจะสามารถดำเนินการตั้งค่าบริการนี้ได้ต่อไป
จุดสิ้นสุดการตรวจสุขภาพต่อไปนี้พร้อมใช้งาน ( self
หมายถึงพอร์ตการตรวจวัดระยะไกล ในขณะที่ main
หมายถึงพอร์ต exposition):
/healthz
(เปิดเผยบน main
): ส่งคืนรหัสสถานะ 200 หากแอปพลิเคชันกำลังทำงานอยู่ เราแนะนำให้ใช้สิ่งนี้กับโพรบเริ่มต้น
/livez
(เปิดเผยบน main
): ส่งคืนรหัสสถานะ 200 หากแอปพลิเคชันไม่ได้รับผลกระทบจากการหยุดทำงานของเซิร์ฟเวอร์ Kubernetes API เราแนะนำให้ใช้สิ่งนี้กับโพรบความมีชีวิตชีวา
/readyz
(exposed on self
): ส่งคืนรหัสสถานะ 200 หากแอปพลิเคชันพร้อมที่จะยอมรับคำขอและเปิดเผยเมตริก เราขอแนะนำให้ใช้สิ่งนี้สำหรับการสอบสวนความพร้อม
โปรดทราบว่าเราไม่แนะนำให้ใช้ตำแหน่งข้อมูลการวัดและส่งข้อมูลทางไกลสำหรับโพรบใดๆ เมื่อทำการพร็อกซีข้อมูลการแสดง
หากต้องการเรียกใช้ kube-state-metrics ในสภาพแวดล้อมที่คุณไม่มีบทบาทผู้อ่านคลัสเตอร์ คุณจะทำสิ่งต่อไปนี้ได้
สร้างบัญชีบริการ
apiVersion: v1kind: ServiceAccountmetadata: ชื่อ: kube-state-metrics เนมสเปซ: your-namespace-where-kube-state-metrics-will-deployed
ให้สิทธิ์ view
เนมสเปซเฉพาะ (โดยใช้ RoleBinding) ( หมายเหตุ: คุณสามารถเพิ่ม RoleBinding นี้ให้กับ NS ทั้งหมดที่คุณต้องการให้บัญชีบริการของคุณเข้าถึงได้ )
apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata: ชื่อ: kube-state-metrics เนมสเปซ: project1roleRef: apiGroup: rbac.authorization.k8s.io ชนิด: ClusterRole ชื่อ: มุมมองหัวข้อ: - ชนิด: ServiceAccountname: kube-state-metricsnamespace: your-namespace-where-kube-state-metrics-will-deployed
จากนั้นระบุชุดของเนมสเปซ (โดยใช้ตัวเลือก --namespaces
) และชุดของวัตถุ kubernetes (โดยใช้ --resources
) ที่ serviceaccount ของคุณมีสิทธิ์เข้าถึงในการกำหนดค่าการปรับใช้ kube-state-metrics
ข้อมูลจำเพาะ: แม่แบบ:ข้อมูลจำเพาะ: คอนเทนเนอร์: - ชื่อ: kube-state-metricsargs: - '--ทรัพยากร = พ็อด' - '--namespaces=project1'
สำหรับรายการข้อโต้แย้งทั้งหมดที่มี โปรดดูเอกสารประกอบใน docs/developer/cli-arguments.md
เริ่มต้นจากแผนภูมิ kube-state-metrics v2.13.3
(อิมเมจ kube-state-metrics v1.9.8
) แผนภูมิ Helm อย่างเป็นทางการจะคงอยู่ใน prometheus-community/helm-charts เริ่มต้นจากแผนภูมิ kube-state-metrics เวอร์ชัน v3.0.0
รองรับเฉพาะอิมเมจ kube-state-metrics เวอร์ชัน v2.0.0 +
เท่านั้น
เมื่อพัฒนา ให้ทดสอบดัมพ์เมตริกกับคลัสเตอร์ Kubernetes ในเครื่องของคุณโดยเรียกใช้:
ผู้ใช้สามารถแทนที่ที่อยู่ apiserver ในไฟล์ KUBE-CONFIG ด้วยบรรทัดคำสั่ง
--apiserver
go install kube-state-metrics --port=8080 --telemetry-port=8081 --kubeconfig=--apiserver=
จากนั้นขดจุดสิ้นสุดของเมตริก
curl localhost:8080/metrics
หากต้องการรันการทดสอบ e2e ภายในเครื่อง โปรดดูเอกสารประกอบใน tests/README.md
เมื่อพัฒนา มีรูปแบบโค้ดบางอย่างที่ต้องปฏิบัติตามเพื่อให้คุณได้รับประสบการณ์ที่ดีขึ้น และโอกาสที่ e2e และการทดสอบ ci อื่นๆ จะผ่าน หากต้องการเรียนรู้เพิ่มเติม โปรดดูเอกสารประกอบใน docs/developer/guide.md
โครงการนี้ได้รับการสนับสนุนจาก SIG Instrumentation
นอกจากนี้ยังมีช่องทางสำหรับ #kube-state-metrics บน Slack ของ Kubernetes ด้วย
คุณยังสามารถเข้าร่วมรายชื่อผู้รับจดหมาย SIG Instrumentation ได้อีกด้วย โดยทั่วไปสิ่งนี้จะเพิ่มคำเชิญสำหรับการประชุมต่อไปนี้ลงในปฏิทินของคุณ ซึ่งสามารถพูดคุยหัวข้อเกี่ยวกับ kube-state-metrics ได้
การประชุม SIG ปกติ: วันพฤหัสบดี เวลา 9:30 น. PT (เวลาแปซิฟิก) (รายปักษ์) แปลงเป็นเขตเวลาของคุณ
การประชุม Triage ปกติ: วันพฤหัสบดี เวลา 9:30 น. PT (เวลาแปซิฟิก) (รายปักษ์ - สลับกับการประชุมปกติ) แปลงเป็นเขตเวลาของคุณ