Knative - แพลตฟอร์มตามบริการ k8s พร้อมการสนับสนุนแบบไร้เซิร์ฟเวอร์

Knative - แพลตฟอร์มตามบริการ k8s พร้อมการสนับสนุนแบบไร้เซิร์ฟเวอร์

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 นั้นขึ้นอยู่กับการติดตั้งตัวควบคุมทางเข้าที่เข้ากันได้ ในขณะที่เขียนบทความนี้ได้รับการสนับสนุน เกตเวย์ Gloo API и Istio บริการตาข่าย. โดยจะกำหนดค่าทางเข้าที่มีอยู่เพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยังแอปพลิเคชันที่จัดการโดย 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

เพิ่มความคิดเห็น