digitalocean-cloud-controller-manager
คือการใช้งาน Kubernetes Cloud Controller Manager สำหรับ DigitalOcean อ่านเพิ่มเติมเกี่ยวกับผู้จัดการคลาวด์คอนโทรลเลอร์ที่นี่ การใช้งาน digitalocean-cloud-controller-manager
ช่วยให้คุณสามารถใช้ประโยชน์จากคุณสมบัติของผู้ให้บริการคลาวด์จำนวนมากที่นำเสนอโดย DigitalOcean ในกลุ่ม Kubernetes ของคุณ
Cloud Controller Manager ติดตามการกำหนดเวอร์ชันความหมาย แม้ว่าเวอร์ชันจะยังคงต่ำกว่า V1 แต่โครงการนี้ก็ถือว่าพร้อมใช้งาน
เนื่องจากวงจรการปล่อย Kubernetes ที่รวดเร็ว CCM (Cloud Controller Manager) จะรองรับรุ่นที่รองรับ กับ ผลิตภัณฑ์ DigitalOcean Kubernetes เท่านั้น การเผยแพร่อื่น ๆ จะไม่ได้รับการสนับสนุนอย่างเป็นทางการจากเรา
เรียนรู้เพิ่มเติมเกี่ยวกับการเรียกใช้ DigitalOcean Cloud Controller Manager ที่นี่!
โปรดทราบว่า CCM นี้ติดตั้งโดยค่าเริ่มต้นบน DOKS (Kubernetes ที่จัดการ DigitalOcean) คุณไม่ต้องทำด้วยตัวเอง
นี่คือตัวอย่างของวิธีที่คุณสามารถใช้ประโยชน์จาก digitalocean-cloud-controller-manager
:
เมื่อคุณกำลังสร้างโหลดบาลานซ์ผ่าน CCM (ผ่านบริการ LoadBalancer
-typed) เป็นสิ่งสำคัญมากที่คุณ ต้องไม่เปลี่ยนการกำหนดค่าโหลดแบลันเกอร์ด้วยตนเอง การเปลี่ยนแปลงดังกล่าวในที่สุดจะได้รับการฟื้นฟูโดยห่วงการกระทบยอดที่สร้างขึ้นใน CCM มีข้อยกเว้นหนึ่งข้อในชื่อ Load-Balancer ซึ่งสามารถเปลี่ยนแปลงได้ (ดูเอกสารเกี่ยวกับคำอธิบายประกอบ ID Load-Balancer)
นอกเหนือจากนั้นสถานที่ที่ปลอดภัยเพียงแห่งเดียวในการเปลี่ยนแปลงการกำหนดค่าโหลด-แบลันเซอร์คือผ่านวัตถุบริการ
ด้วยเหตุผลทางเทคนิคพอร์ต 50053, 50054 และ 50055 ไม่สามารถใช้เป็นพอร์ตรายการโหลดบัลแลนเซอร์ (เช่นพอร์ตที่โหลด-บัลแลนซ์รับฟังการร้องขอ) การพยายามใช้หนึ่งในพอร์ตที่ได้รับผลกระทบเป็นพอร์ตบริการทำให้ พอร์ตรายการ 422 ไม่ถูกต้อง ตอบกลับข้อผิดพลาด HTTP ที่ไม่ถูกต้องโดย DO API (และโผล่ขึ้นมาเป็นเหตุการณ์ Kubernetes)
วิธีแก้ปัญหาคือการเปลี่ยนพอร์ตบริการเป็นช่องทางที่แตกต่างกัน
v1.17.x
โครงการนี้ใช้โมดูล GO สำหรับการจัดการการพึ่งพาและมีการจัดจำหน่าย โปรดตรวจสอบให้แน่ใจว่าได้ดำเนินการ make vendor
หลังจากการปรับเปลี่ยนการพึ่งพา
หลังจากทำการเปลี่ยนแปลงรหัสของคุณให้เรียกใช้การทดสอบและตรวจสอบ CI:
make ci
หากคุณต้องการเรียกใช้ digitalocean-cloud-controller-manager
ในพื้นที่กับคลัสเตอร์เฉพาะให้ Kubeconfig ของคุณให้พร้อมและเริ่มต้นไบนารีในไดเรกทอรีหลักที่โฮสต์แพ็คเกจหลักเช่นนี้:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
REGION=fra1 DO_ACCESS_TOKEN=your_access_token go run main.go
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
ตัวแปรสภาพแวดล้อม REGION
ใช้พื้นที่ดิจิตอลที่ถูกต้อง สามารถตั้งค่าให้เป็นตัวควบคุม digitalocean-cloud-controller-manager
จากการพยายามเข้าถึงบริการข้อมูลเมตา DigitalOcean ซึ่งมีเฉพาะในหยดเท่านั้น หากตั้งค่าตัวแปรภูมิภาคจะใช้บริการภูมิภาค DO เพื่อตรวจสอบความถูกต้องของภูมิภาคที่ระบุ นอกจากนี้ยังสามารถตั้งค่าเพื่อวัตถุประสงค์ในการพัฒนาในท้องถิ่น โดยรวมแล้วภูมิภาคใดที่คุณเลือกไม่ควรสำคัญตราบใดที่คุณเลือก
คุณอาจต้องให้โทเค็นการเข้าถึง DigitalOcean ของคุณในตัวแปรสภาพแวดล้อม DO_ACCESS_TOKEN
โทเค็นไม่จำเป็นต้องใช้งานได้สำหรับตัวควบคุมคลาวด์ที่จะเริ่มต้น แต่ในกรณีนั้นคุณจะไม่สามารถตรวจสอบการรวมเข้ากับ DigitalOcean API ได้
โปรดทราบว่าหากคุณใช้คลัสเตอร์ Kubernetes ที่สร้างขึ้นบน DigitalOcean จะมีตัวจัดการคลาวด์คอนโทรลเลอร์ที่ทำงานอยู่ในคลัสเตอร์แล้วดังนั้นท้องถิ่นของคุณจะแข่งขันเพื่อเข้าถึง API ด้วย
คุณสามารถมี digitalocean-cloud-controller-manager
จัดการไฟร์วอลล์ DigitalOcean ที่จะปรับกฎแบบไดนามิกสำหรับการเข้าถึง NODEPORTS: เมื่อบริการประเภท NodePort
ถูกสร้างขึ้นคอนโทรลเลอร์ไฟร์วอลล์จะอัปเดตไฟร์วอลล์เพื่อการเข้าถึงสาธารณะ ในทำนองเดียวกันการเข้าถึงจะถูกดึงกลับโดยอัตโนมัติหากบริการถูกลบหรือเปลี่ยนเป็นประเภทอื่น
ตัวอย่างการเรียก:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN= < your_access_token >
PUBLIC_ACCESS_FIREWALL_NAME=firewall_name
PUBLIC_ACCESS_FIREWALL_TAGS=worker-droplet
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
ตัวแปรสภาพแวดล้อม PUBLIC_ACCESS_FIREWALL_NAME
กำหนดชื่อของไฟร์วอลล์ ไฟร์วอลล์ถูกสร้างขึ้นหากไม่พบไฟร์วอลล์ด้วยชื่อนั้น
ตัวแปรสภาพแวดล้อม PUBLIC_ACCESS_FIREWALL_TAGS
หมายถึงแท็กที่เกี่ยวข้องกับหยดที่ไฟร์วอลล์ควรใช้กับ โดยปกติแล้วนี่คือแท็กที่แนบมากับหยดโหนดคนงาน แท็กหลายแท็กถูกนำไปใช้ในตรรกะหรือแฟชั่น
ในบางกรณีการจัดการไฟร์วอลล์สำหรับบริการเฉพาะอาจไม่เป็นที่ต้องการ ตัวอย่างหนึ่งคือ NodePort ควรจะสามารถเข้าถึงได้ผ่าน VPC เท่านั้น ในกรณีเช่นนี้คำอธิบายประกอบการบริการ kubernetes.digitalocean.com/firewall-managed
สามารถใช้เพื่อคัดเลือกบริการที่กำหนดจากการจัดการไฟร์วอลล์ หากตั้งค่าเป็น "false"
จะไม่มีการสร้างกฎขาเข้าสำหรับบริการโดยปิดการใช้งานการเข้าถึงสาธารณะอย่างมีประสิทธิภาพ (หมายเหตุคำพูดที่ต้องรวมอยู่ในค่าคำอธิบายประกอบ "บูลีน") พฤติกรรมเริ่มต้นใช้งานหากมีการละเว้นคำอธิบายประกอบเป็น "true
" หรือมีค่าที่ไม่ถูกต้อง
ไม่มีการจัดการไฟร์วอลล์หากตัวแปรสภาพแวดล้อมหายไปหรือว่างเปล่า เมื่อสร้างไฟร์วอลล์แล้วจะไม่อนุญาตให้เข้าถึงสาธารณะนอกเหนือจาก Nodeports ผู้ใช้ควรสร้างไฟร์วอลล์เพิ่มเติมเพื่อขยายการเข้าถึงเพิ่มเติม
หากคุณสนใจที่จะเปิดเผยตัวชี้วัดของโพรคุณสามารถผ่านจุดสิ้นสุดการวัดที่จะเปิดเผยพวกเขา คำสั่งจะมีลักษณะคล้ายกับสิ่งนี้:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN=your_access_token
METRICS_ADDR= < host > : < port >
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
ตัวแปรสภาพแวดล้อม METRICS_ADDR
ใช้จุดสิ้นสุดที่ถูกต้องซึ่งคุณต้องการใช้เพื่อให้บริการตัวชี้วัด Prometheus ของคุณ เพื่อให้ถูกต้องมันควรอยู่ในรูปแบบ <host>:<port>
หลังจากที่คุณเริ่มต้น digitalocean-cloud-controller-manager
ให้เรียกใช้คำสั่ง CURL ต่อไปนี้เพื่อดูเอาท์พุท Prometheus Metrics:
curl < host > : < port > /metrics
เซิร์ฟเวอร์การรับสมัครเป็นส่วนประกอบเสริมโดยมีจุดประสงค์เพื่อลดการเปลี่ยนแปลงการกำหนดค่าที่ไม่ดีสำหรับวัตถุที่มีการจัดการ (LBS ฯลฯ ) หากคุณต้องการทราบข้อมูลเพิ่มเติมให้อ่านเอกสาร
การใช้ API นั้นอยู่ภายใต้ขีด จำกัด อัตราที่แน่นอน เพื่อป้องกันการหมดโควต้าสำหรับการใช้งานปกติหรือกรณีทางพยาธิวิทยาที่หนักมาก (เช่นข้อบกพร่องหรือ API thrashing เนื่องจากคอนโทรลเลอร์ของบุคคลที่สามรบกวน) ขีด จำกัด อัตราที่กำหนดเองสามารถกำหนดค่าได้ผ่านตัวแปรสภาพแวดล้อม DO_API_RATE_LIMIT_QPS
ยอมรับค่าลอยเช่น DO_API_RATE_LIMIT_QPS=3.5
เพื่อ จำกัด การใช้ API เป็น 3.5 แบบสอบถามต่อวินาที
หากคุณต้องการทดสอบการเปลี่ยนแปลงของคุณในสภาพแวดล้อมคอนเทนเนอร์ให้สร้างภาพใหม่ด้วยเวอร์ชันที่ตั้งค่าเป็น dev
:
VERSION=dev make publish
สิ่งนี้จะสร้างไบนารีด้วยภาพ dev
และ Docker ที่ผลักดันไปยัง digitalocean/digitalocean-cloud-controller-manager:dev
go get -u ./...
go mod tidy
go mod vendor
ในการสร้างอิมเมจนักเทียบท่าและสร้างรายการให้ไปที่หน้าการกระทำบน GitHub และคลิก "เรียกใช้เวิร์กโฟลว์" ระบุ GitHub <tag>
ที่คุณต้องการสร้างตรวจสอบให้แน่ใจว่าได้รับการแก้ไขด้วย v
การรันเวิร์กโฟลว์ยังต้องการให้คุณปิดชั่วคราว "ต้องมีคำขอดึงก่อนที่จะรวม" ในการตั้งค่ากฎการป้องกันสาขาหลัก อย่าลืมเปิดมันอีกครั้งเมื่อการเปิดตัวเสร็จสิ้น!
เวิร์กโฟลว์ทำดังต่อไปนี้:
make bump-version
ด้วย <tag>
<tag>.yaml
releases/
ไดเรกทอรีใน repo<tag>
ที่ระบุเมื่อเวิร์กโฟลว์ถูกทริกเกอร์digitalocean/digitalocean-cloud-controller-manager:<tag>
digitalocean/digitalocean-cloud-controller-manager:<tag>
ไปยัง DockerHubหมายเหตุ: เวิร์กโฟลว์นี้เลิกใช้แล้วโปรดเลือกเวิร์กโฟลว์การกระทำของ GitHub ที่อธิบายไว้ข้างต้น
หากต้องการปล่อยเวอร์ชันใหม่ด้วยตนเองให้ชนเวอร์ชันแรก:
make NEW_VERSION=v1.0.0 bump-version
ตรวจสอบให้แน่ใจว่าทุกอย่างดูดี สร้างสาขาใหม่ที่มีการเปลี่ยนแปลงทั้งหมด:
git checkout -b release- < new version > origin/master
git commit -a -v
git push origin release- < new version >
หลังจากรวมเข้ากับมาสเตอร์แล้วให้ติดแท็กการกระทำและผลักดัน:
git checkout master
git pull
git tag < new version >
git push origin < new version >
ในที่สุดสร้างรุ่น GitHub จาก Master ด้วยเวอร์ชันใหม่และเผยแพร่:
make publish
สิ่งนี้จะรวบรวมไบนารีที่มีเวอร์ชันใหม่ที่รวมอยู่ในอิมเมจนักเทียบท่าที่ส่งไปยัง digitalocean/digitalocean-cloud-controller-manager:<new version>
ที่ DigitalOcean เราให้ความสำคัญกับชุมชนของเรา! หากคุณมีปัญหาใด ๆ หรือต้องการมีส่วนร่วมอย่าลังเลที่จะเปิดปัญหา/PR และ CC ผู้ดูแลด้านล่าง