Kubernetes ได้กลายเป็นแพลตฟอร์มที่โดดเด่นสำหรับการปรับใช้คอนเทนเนอร์อย่างไม่ต้องสงสัย โดยให้ความสามารถในการควบคุมเกือบทุกอย่างโดยใช้ API และตัวควบคุมแบบกำหนดเองที่ขยาย API ด้วยทรัพยากรแบบกำหนดเอง
อย่างไรก็ตาม ผู้ใช้ยังคงต้องทำการตัดสินใจโดยละเอียดเกี่ยวกับวิธีการปรับใช้ กำหนดค่า จัดการ และปรับขนาดแอปพลิเคชัน ปัญหาของการปรับขนาดแอปพลิเคชัน การป้องกัน และการรับส่งข้อมูลยังคงอยู่ที่ดุลยพินิจของผู้ใช้ สิ่งนี้ทำให้ Kubernetes แตกต่างจากแพลตฟอร์มการบริการ (PaaS) ทั่วไป เช่น Cloud Foundry และ Heroku
แพลตฟอร์มเหล่านี้มีส่วนติดต่อผู้ใช้ที่เรียบง่ายและมุ่งเป้าไปที่นักพัฒนาแอปพลิเคชันที่ส่วนใหญ่มักเกี่ยวข้องกับการตั้งค่าแอปพลิเคชันแต่ละรายการ การกำหนดเส้นทาง การปรับใช้ และตัววัดได้รับการจัดการอย่างโปร่งใสให้กับผู้ใช้โดยระบบ PaaS พื้นฐาน
PaaS จัดการเวิร์กโฟลว์ต้นทางถึงการจัดส่งโดยการสร้างอิมเมจคอนเทนเนอร์แบบกำหนดเอง ปรับใช้ ตั้งค่าเส้นทางใหม่และโดเมนย่อย DNS สำหรับการรับส่งข้อมูลขาเข้า ทั้งหมดนี้เปิดตัวตามคำสั่ง git push
.
Kubernetes (โดยเจตนา) จัดเตรียมเฉพาะส่วนประกอบหลักสำหรับแพลตฟอร์มดังกล่าวเท่านั้น ทำให้ชุมชนมีอิสระในการทำงานด้วยตนเอง ยังไง
Kubernetes เป็นแพลตฟอร์มสำหรับการสร้างแพลตฟอร์ม ตำแหน่งที่ดีที่สุดสำหรับการเริ่มต้นแต่ไม่สิ้นสุด
ด้วยเหตุนี้ เราจึงเห็นการสร้าง Kubernetes จำนวนมาก รวมถึงบริษัทโฮสติ้งที่พยายามสร้าง PaaS สำหรับ Kubernetes เช่น OpenShift และ Rancher ท่ามกลางตลาด Kube-PaaS ที่กำลังเติบโต Knative ซึ่งก่อตั้งขึ้นในเดือนกรกฎาคม 2018 โดย Google และ Pivotal กำลังเข้าสู่วงแหวน
Knative เป็นความร่วมมือระหว่าง Google และ Pivotal โดยได้รับความช่วยเหลือเล็กน้อยจากบริษัทอื่นๆ เช่น IBM, RedHat และ Solo.im นำเสนอสิ่ง PaaS ที่คล้ายกันกับ Kubernetes พร้อมการสนับสนุนระดับแนวหน้าสำหรับแอปพลิเคชันที่ใช้การประมวลผลแบบไร้เซิร์ฟเวอร์ Knative ต่างจากรุ่น Kubernetes ตรงที่ได้รับการติดตั้งเป็นส่วนเสริมบนคลัสเตอร์ Kubernetes ที่เข้ากันได้ และกำหนดค่าผ่านทรัพยากรผู้ใช้
Kative คืออะไร?
Knative ได้รับการอธิบายว่าเป็น “แพลตฟอร์มที่ใช้ Kubernetes สำหรับการส่งมอบและจัดการปริมาณงานโดยใช้การประมวลผลแบบไร้เซิร์ฟเวอร์สมัยใหม่” ในขณะที่ Knative เรียกเก็บเงินตัวเองเป็นแพลตฟอร์มดังกล่าว จะปรับขนาดคอนเทนเนอร์อัตโนมัติตามสัดส่วนคำขอ HTTP ที่เกิดขึ้นพร้อมกัน บริการที่ไม่ได้ใช้จะลดขนาดลงจนเหลือศูนย์ในที่สุด โดยให้การปรับขนาดตามความต้องการแบบไร้เซิร์ฟเวอร์
Knative ประกอบด้วยชุดตัวควบคุมที่ติดตั้งในคลัสเตอร์ Kubernetes และมีความสามารถดังต่อไปนี้:
- การสร้างแอปพลิเคชันแบบคอนเทนเนอร์จากซอร์สโค้ด (จัดทำโดยส่วนประกอบ สร้าง),
- ให้การเข้าถึงการรับส่งข้อมูลขาเข้าไปยังแอปพลิเคชัน (จัดทำโดยส่วนประกอบ ที่ให้บริการ),
- การส่งมอบและการปรับขนาดอัตโนมัติของแอปพลิเคชันตามความต้องการ (มีให้โดยส่วนประกอบด้วย ที่ให้บริการ),
- การระบุแหล่งที่มาของเหตุการณ์ที่นำไปสู่การเปิดตัวแอปพลิเคชัน (จัดทำโดยส่วนประกอบ เหตุการณ์).
องค์ประกอบหลักคือการให้บริการ ซึ่งจัดให้มีการจัดเตรียม การปรับขนาดอัตโนมัติ และการจัดการการรับส่งข้อมูลสำหรับแอปพลิเคชันที่มีการจัดการ หลังจากติดตั้ง Knative คุณยังคงมีสิทธิ์เข้าถึง Kubernetes API ได้อย่างสมบูรณ์ ทำให้ผู้ใช้สามารถจัดการแอปพลิเคชันได้ สามัญ และยังทำหน้าที่แก้ไขจุดบกพร่องของบริการ Knative โดยทำงานร่วมกับ API พื้นฐานแบบเดียวกับที่บริการเหล่านี้ใช้ (โมดูล บริการ ฯลฯ)
ด้วยความช่วยเหลือของ Serving การกำหนดเส้นทางการรับส่งข้อมูลสีน้ำเงิน-เขียวยังเป็นแบบอัตโนมัติ ทำให้มั่นใจได้ว่าจะมีการแยกการรับส่งข้อมูลระหว่างแอปพลิเคชันเวอร์ชันใหม่และเก่าเมื่อผู้ใช้ส่งมอบแอปพลิเคชันเวอร์ชันที่อัปเดต
Knative นั้นขึ้นอยู่กับการติดตั้งตัวควบคุมทางเข้าที่เข้ากันได้ ในขณะที่เขียนบทความนี้ได้รับการสนับสนุน
Istio Service Mesh อาจพึ่งพาอย่างมากสำหรับผู้ใช้ Knative ที่ต้องการทดลองใช้โดยไม่ต้องติดตั้งแผงควบคุม Istio เนื่องจาก Knative ขึ้นอยู่กับเกตเวย์เท่านั้น
ด้วยเหตุนี้ ผู้ใช้ส่วนใหญ่จึงชอบ Gloo เป็นประตูสู่ Knative โดยให้ชุดความสามารถที่คล้ายกันกับ Istio (เพื่อวัตถุประสงค์ในการใช้ Knative เท่านั้น) ในขณะเดียวกันก็ใช้ทรัพยากรน้อยลงอย่างมากและมีต้นทุนการดำเนินงานที่ต่ำกว่า
มาทดสอบการทำงานของ Knative บนขาตั้งกัน ฉันจะใช้คลัสเตอร์ที่ติดตั้งใหม่ที่ทำงานใน GKE:
kubectl get namespace
NAME STATUS AGE
default Active 21h
kube-public Active 21h
kube-system Active 21h
มาเริ่มการติดตั้ง Knative และ Gloo กัน สามารถทำได้ในลำดับใดก็ได้:
# ставим Knative-Serving
kubectl apply -f
https://github.com/knative/serving/releases/download/v0.8.0/serving-core.yaml
namespace/knative-serving created
# ...
# ставим Gloo
kubectl apply -f
https://github.com/solo-io/gloo/releases/download/v0.18.22/gloo-knative.yaml
namespace/gloo-system created
# ...
เราตรวจสอบว่าพ็อดทั้งหมดอยู่ในสถานะ "กำลังทำงาน":
kubectl get pod -n knative-serving
NAME READY STATUS RESTARTS AGE
activator-5dd55958cc-fkp7r 1/1 Running 0 7m32s
autoscaler-fd66459b7-7d5s2 1/1 Running 0 7m31s
autoscaler-hpa-85b5667df4-mdjch 1/1 Running 0 7m32s
controller-85c8bb7ffd-nj9cs 1/1 Running 0 7m29s
webhook-5bd79b5c8b-7czrm 1/1 Running 0 7m29s
kubectl get pod -n gloo-system
NAME READY STATUS RESTARTS AGE
discovery-69548c8475-fvh7q 1/1 Running 0 44s
gloo-5b6954d7c7-7rfk9 1/1 Running 0 45s
ingress-6c46cdf6f6-jwj7m 1/1 Running 0 44s
knative-external-proxy-7dd7665869-x9xkg 1/1 Running 0 44s
knative-internal-proxy-7775476875-9xvdg 1/1 Running 0 44s
Gloo พร้อมสำหรับการกำหนดเส้นทาง มาสร้างบริการ Knative ที่ปรับขนาดอัตโนมัติ (เรียกว่า kservice) และกำหนดเส้นทางการรับส่งข้อมูลไปยังบริการนั้น
บริการ Knative มอบเส้นทางที่ง่ายกว่าในการส่งมอบแอปพลิเคชันไปยัง Kubernetes มากกว่าโมเดล Deployment+Service+Ingress ทั่วไป เราจะทำงานกับตัวอย่างนี้:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
spec:
containers:
- image: gcr.io/knative-samples/helloworld-go
env:
- name: TARGET
Value: Knative user
ฉันคัดลอกสิ่งนี้ไปยังไฟล์ จากนั้นนำไปใช้กับคลัสเตอร์ Kubernetes ของฉันด้วยวิธีนี้:
kubectl apply -f ksvc.yaml -n default
เราสามารถดูทรัพยากรที่สร้างโดย Knative ในคลัสเตอร์หลังจากส่งมอบ 'helloworld-go' ของเรา เคเซอร์วิส:
kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
helloworld-go-fjp75-deployment-678b965ccb-sfpn8 2/2 Running 0 68s
พ็อดที่มีอิมเมจ 'helloworld-go' ของเราจะเปิดตัวเมื่อมีการปรับใช้ kservice หากไม่มีการจราจร จำนวนพ็อดจะลดลงเหลือศูนย์ และในทางกลับกัน หากจำนวนคำขอพร้อมกันเกินเกณฑ์ที่กำหนดได้ จำนวนพ็อดก็จะเพิ่มขึ้น
kubectl get ingresses.networking.internal.knative.dev -n default
NAME READY REASON
helloworld-go True
Knative กำหนดค่าทางเข้าโดยใช้ทรัพยากร 'ทางเข้า' พิเศษใน Knative API ภายใน Gloo ใช้ API นี้เป็นการกำหนดค่าเพื่อมอบฟีเจอร์ที่คล้ายกับ PaaS รวมถึงโมเดลการใช้งานสีน้ำเงิน-เขียว การบังคับใช้ TLS อัตโนมัติ การหมดเวลา และฟีเจอร์การกำหนดเส้นทางขั้นสูงอื่นๆ
หลังจากนั้นสักพักเราจะเห็นว่าพ็อดของเราหายไป (เพราะไม่มีการจราจรเข้ามา):
kubectl get pod -n default
No resources found.
kubectl get deployment -n default
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
helloworld-go-fjp75-deployment 0 0 0 0 9m46s
ในที่สุดเราจะพยายามเข้าถึงพวกเขา คุณสามารถรับ URL สำหรับ Knative Proxy ได้อย่างง่ายดายและง่ายดาย glooctl
:
glooctl proxy url --name knative-external-proxy
http://35.190.151.188:80
โดยไม่ต้องติดตั้ง glooctl
คุณสามารถดูที่อยู่และพอร์ตในบริการ kube:
kubectl get svc -n gloo-system knative-external-proxy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
knative-external-proxy LoadBalancer 10.16.11.157 35.190.151.188 80:32168/TCP,443:30729/TCP 77m
มาเรียกใช้ข้อมูลโดยใช้ cURL:
curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188
Hello Knative user!
Knative มอบ PaaS เกือบทั้งหมดสำหรับนักพัฒนา นอกเหนือจาก Kubernetes ที่ใช้งานได้ทันที โดยใช้เกตเวย์ API แบบเต็มสแต็กประสิทธิภาพสูงของ Gloo โพสต์นี้เป็นเพียงการกล่าวถึงตัวเลือกการปรับแต่งที่ครอบคลุมและคุณสมบัติเพิ่มเติมของ Knative เท่านั้น เช่นเดียวกับกลู!
แม้ว่า Knative จะยังเป็นโปรเจ็กต์ใหม่ แต่ทีมงานก็ออกเวอร์ชันใหม่ทุก ๆ หกสัปดาห์ และการใช้งานฟีเจอร์ขั้นสูงได้เริ่มขึ้นแล้ว เช่น การใช้งาน TLS อัตโนมัติ การปรับขนาดแผงควบคุมอัตโนมัติ มีโอกาสที่ดีที่เป็นผลมาจากการทำงานร่วมกันระหว่างบริษัทคลาวด์หลายแห่ง และจากพื้นฐานของข้อเสนอ Cloud Run ใหม่ของ Google Knative อาจกลายเป็นตัวเลือกหลักสำหรับการประมวลผลแบบไร้เซิร์ฟเวอร์และ PaaS บน Kubernetes ติดตามข่าว!
จากบรรณาธิการ SouthBridge
ความคิดเห็นของผู้อ่านมีความสำคัญสำหรับเรา ดังนั้นเราจึงขอให้คุณมีส่วนร่วมในการสำรวจสั้นๆ ที่เกี่ยวข้องกับบทความในอนาคตเกี่ยวกับ Knative, Kubernetes, การประมวลผลแบบไร้เซิร์ฟเวอร์:
เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้
ฉันควรเขียนบทความและคำแนะนำเกี่ยวกับ Knative และการประมวลผลแบบไร้เซิร์ฟเวอร์ต่อไปหรือไม่
-
ได้โปรด
-
ไม่เป็นไรขอบคุณ.
ผู้ใช้ 28 คนโหวต ผู้ใช้ 4 รายงดออกเสียง
ที่มา: will.com