5 วิธีในการทำแบบไร้เซิร์ฟเวอร์บน Kubernetes

เรียกมันว่า "ไร้เซิร์ฟเวอร์" เรียกว่า "การประมวลผลที่ขับเคลื่อนด้วยเหตุการณ์" หรือเรียกว่า "ฟังก์ชั่นเป็นบริการ (FaaS)" แนวคิดจะเหมือนกัน: จัดสรรทรัพยากรแบบไดนามิกเพื่อเรียกใช้ฟังก์ชันแต่ละฟังก์ชันโดยพื้นฐานเป็นไมโครเซอร์วิสที่เรียกใช้ในการตอบสนอง ไปยังเหตุการณ์ต่างๆ แพลตฟอร์มการประมวลผลแบบไร้เซิร์ฟเวอร์ช่วยให้นักพัฒนาแอปพลิเคชันให้ความสำคัญกับแอปไม่ใช่โครงสร้างพื้นฐานและรายละเอียดการจัดการทั้งหมด

ผู้ให้บริการระบบคลาวด์ส่วนใหญ่เสนอแพลตฟอร์มแบบไร้เซิร์ฟเวอร์ แต่คุณสามารถสร้างได้ด้วยตัวเองด้วยส่วนผสมเพียงสองอย่าง หนึ่งคือ Kubernetes ซึ่งเป็นระบบการจัดระเบียบตู้คอนเทนเนอร์ที่กลายเป็นแพลตฟอร์มมาตรฐานสำหรับการสร้างแอปพลิเคชันที่มีส่วนประกอบและยืดหยุ่นได้ อย่างที่สองคือระบบจำนวนหนึ่งที่ใช้สร้างรูปแบบแอปพลิเคชันแบบไร้เซิร์ฟเวอร์ใน Kubernetes

เฟรมเวิร์กแบบไร้เซิร์ฟเวอร์ส่วนใหญ่สำหรับ Kubernetes มีคุณสมบัติเหล่านี้เหมือนกัน:

  • ปรับใช้กับสภาพแวดล้อมใด ๆ ที่รองรับ Kubernetes ในเครื่องหรือจากระยะไกลรวมถึงสภาพแวดล้อมเช่น OpenShift
  • รองรับการรันโค้ดที่เขียนในภาษาใด ๆ โดยมีรันไทม์ทั่วไปบางส่วนที่จัดเตรียมไว้ล่วงหน้าด้วยเฟรมเวิร์ก
  • ทริกเกอร์การเรียกใช้โค้ดตามเหตุการณ์หลายประเภทเช่นปลายทาง HTTP ข้อความคิวหรือ hook อื่น ๆ

ข้อได้เปรียบที่สำคัญอย่างหนึ่งของการสร้างแบบไร้เซิร์ฟเวอร์บน Kubernetes คือการได้รับการควบคุมที่ดีกว่าสำหรับแพลตฟอร์มพื้นฐาน ข้อเสนอแบบไม่ใช้เซิร์ฟเวอร์จำนวนมาก จำกัด พฤติกรรมของฟังก์ชันที่เรียกใช้บางครั้งทำให้คลาสของแอปพลิเคชันบางอย่างใช้ไม่ได้ ด้วย Kubernetes คุณสามารถสร้างแพลตฟอร์มแบบไร้เซิร์ฟเวอร์ที่ตรงกับความต้องการของคุณโดยปล่อยโครงสร้างพื้นฐานให้กับผู้ให้บริการ Kubernetes และให้นักพัฒนาของคุณมุ่งเน้นไปที่การเขียนโค้ดที่จำเป็น

ต่อไปนี้คือโครงการหลัก 5 โครงการที่นำฟังก์ชันแบบไร้เซิร์ฟเวอร์มาสู่ Kubernetes

ฟิชชัน

Fission ถูกสร้างและดูแลโดย Platform 9 ของ บริษัท ที่มีการจัดการ - Kubernetes การอ้างสิทธิ์หลักของชื่อเสียงคือช่วยให้คุณสร้างแอปพลิเคชัน FaaS ได้โดยไม่ต้องสร้างคอนเทนเนอร์เพียงแค่ส่งไฟล์ข้อกำหนด

สามารถติดตั้งฟิชชันได้โดยมีหรือไม่มีแผนภูมิ Helm และสามารถติดตั้งได้ในสองรุ่น มีเวอร์ชันเต็มพร้อมคิวข้อความและการสนับสนุน InfluxDB สำหรับการบันทึกและรุ่นแบบถอดลงพร้อมฟังก์ชันพื้นฐานที่ให้บริการ รุ่นก่อนออกแบบมาสำหรับการใช้งานจริงและรุ่นหลังสำหรับการทำให้เท้าเปียก

ในการเพิ่มโค้ดในการปรับใช้ฟิชชันคุณใช้ไฟล์ข้อมูลจำเพาะที่ใช้ YAML เครื่องมือบรรทัดคำสั่งของ Fission ช่วยให้คุณสร้างไฟล์ YAML สำหรับฟังก์ชันของคุณและเส้นทางที่ใช้ในการเรียกใช้จุดเริ่มต้น ไฟล์ข้อมูลจำเพาะยังช่วยให้คุณสามารถระบุตัวแปรสภาพแวดล้อมคอนเทนเนอร์เสริมไดรฟ์ข้อมูลและ Kubernetes การควบคุมการปนเปื้อน / ความทนทานสำหรับโค้ด

ฟิชชันยังมี "เวิร์กโฟลว์" ติดตั้งโดยแผนภูมิ Helm เวิร์กโฟลว์จะส่งเอาต์พุตของฟังก์ชันหนึ่งไปยังฟังก์ชันอื่น ฟังก์ชั่นไม่จำเป็นต้องเป็นภาษาเดียวกัน โปรดทราบว่าสิ่งนี้มาพร้อมกับต้นทุนประสิทธิภาพเนื่องจากเอาต์พุตของแต่ละฟังก์ชันจะแสดงผลในรูปแบบการแลกเปลี่ยนแม้ว่าระบบเวิร์กโฟลว์จะรองรับไบนารีแบบดั้งเดิมหลายประเภทเพื่อไม่ให้ค่าใช้จ่ายลดลง (เช่นจำนวนเต็มหรือสตรีมไบต์ทั่วไป)

ข้อเสียประการหนึ่งเดิมที่เกี่ยวข้องกับ FaaS คือในครั้งแรกที่มีการเรียกใช้ฟังก์ชันมีความล่าช้าในการเปิดใช้งานคอนเทนเนอร์ที่เกี่ยวข้องกับมัน ฟิชชันช่วยให้คอนเทนเนอร์อุ่นไว้ล่วงหน้าเพื่อลดเวลาแฝงในครั้งแรกที่ฟังก์ชันทำงาน

Fission นำเสนอสิ่งอำนวยความสะดวกอื่น ๆ สำหรับทั้งนักพัฒนาและผู้ดูแลระบบ บริการสามารถปรับใช้ในคลัสเตอร์ที่ไม่มีการเข้าถึงอินเทอร์เน็ตภายนอกและสามารถโหลดโค้ดใหม่ลงในคลัสเตอร์ได้ตามต้องการ นอกจากนี้ยังสามารถบันทึกกิจกรรมฟังก์ชันและเล่นซ้ำเพื่อช่วยในการดีบัก

โครงการฟิชชันมีให้บริการภายใต้ใบอนุญาต Apache แบบเสรีสูงดังนั้นจึงสามารถทำใหม่ได้อย่างอิสระตามต้องการ

Knative

เดิมที Google สร้างขึ้นเพื่อเรียกใช้แอปแบบไร้เซิร์ฟเวอร์บน Kubernetes โดย Knative มุ่งเน้นไปที่รูปแบบที่ใช้กันทั่วไปในการปรับใช้แบบไร้เซิร์ฟเวอร์ในการใช้งานจริง Knative ต้องการความเชี่ยวชาญโดยตรงในการจัดการองค์ประกอบ Kubernetes จำนวนมากเพื่อให้ใช้งานได้อย่างมีประสิทธิภาพ

นอกจาก Kubernetes แล้ว Knative ยังต้องการระบบเส้นทางหรือโครงข่ายบริการเช่น Istio แต่ก็สามารถใช้ตัวเลือกอื่น ๆ เช่น Ambassador และ Gloo ได้เช่นกัน ซึ่งหมายถึงการตั้งค่างานเพิ่มเติมเล็กน้อย แต่โครงการมีคำแนะนำโดยละเอียดเกี่ยวกับการใช้แต่ละตัวเลือกในบริการคลาวด์ที่หลากหลายและสภาพแวดล้อม Kubernetes รวมถึง vanilla Kubernetes

Knative ทำงานโดยการใช้ประโยชน์หรือขยายเครื่องมือและฟังก์ชันการทำงานของ Kubernetes ที่มีอยู่เป็นหลัก แอปหรือฟังก์ชันได้รับการกำหนดค่าโดยใช้ไฟล์ YAML และจัดส่งเป็นคอนเทนเนอร์ Docker ที่คุณสร้างขึ้น การเพิ่มแก้ไขหรือลบคำจำกัดความทำได้ผ่านkubectlแอพบรรทัดคำสั่ง สำหรับเมตริกในแอป Knative ให้ใช้ Grafana การปรับขนาดทำได้โดยใช้ตัวปรับขนาดอัตโนมัติของ Knative หรือด้วยเครื่องชั่งที่เข้ากันได้กับ Kubernetes อื่น ๆ รวมทั้งเครื่องปรับขนาดที่เขียนขึ้นเอง

Knative อยู่ระหว่างการพัฒนาอย่างหนักและเครื่องมือเฉพาะหลายอย่างยังคงอยู่ในสภาพที่ไม่เอื้ออำนวย ซึ่งรวมถึง  knctlCLI โดยเฉพาะสำหรับ Knative ซึ่งช่วยให้คุณไม่ต้องยุ่งยากกับการใช้เครื่องมืออื่น ๆ ของ Kubernetes เพื่อจัดการ Knative หากคุณต้องการเน้นที่ Knative เท่านั้น และkoเป็นเครื่องมือสำหรับสร้างแอป Go บน Knative โดยการกำจัดขั้นตอนการสร้างคอนเทนเนอร์

Kubeless

Kubeless ถูกสร้างขึ้นโดย Bitnami ผู้พัฒนาโปรแกรมติดตั้งง่ายสำหรับสแต็กแอปพลิเคชันบนเว็บทั่วไป Kubeless ใช้คำจำกัดความทรัพยากรที่กำหนดเองของ Kubernetes เพื่อจัดการกับฟังก์ชันดังนั้นจึงมีนามธรรมน้อยกว่าเล็กน้อยระหว่างอุปลักษณ์ Kubernetes และฟังก์ชัน Kubeless

เวลาทำงานของภาษาทั่วไปส่วนใหญ่มาพร้อมกับแพลตฟอร์ม: .NET, Java, Python, Node.js, PHP, Ruby, Go และแม้แต่ภาษา Ballerina ใหม่สำหรับการพัฒนาบนคลาวด์ Runtimes เป็นเพียงอิมเมจ Docker แม้ว่า Kubeless จะมีรูปแบบบรรจุภัณฑ์เฉพาะสำหรับการใช้ Dockerfiles เพื่อสร้างรันไทม์ที่กำหนดเอง

คุณสมบัติ Kubeless ที่มีประโยชน์อีกอย่างหนึ่งคือ CLI ซึ่งเป็นคำสั่งที่เหมือนกับ AWS Lambda CLI สิ่งนี้สะดวกมากหากคุณต้องการย้ายออกจาก AWS Lambda แต่คุณต้องการเก็บสคริปต์การจัดการที่มีอยู่บางส่วนหรือไม่ต้องเรียนรู้ชุดคำสั่งใหม่ทั้งหมด

Kubeless ยังทำงานเป็นปลั๊กอินสำหรับ Serverless Framework ซึ่งเป็นระบบสำหรับสร้างแอปพลิเคชันแบบไร้เซิร์ฟเวอร์บนสถาปัตยกรรมที่หลากหลาย หากคุณใช้ Serverless หรือ Kubeless อยู่แล้วคุณจะเพิ่มเวลาได้ง่ายกว่าการใช้อย่างอื่น

OpenFaaS

ระยะห่างสำหรับ OpenFaaS คือ“ ฟังก์ชันไร้เซิร์ฟเวอร์ที่ทำให้ง่าย” พูดง่ายๆก็คือนักพัฒนาหมายถึง“ ไม่ยากไปกว่าการปรับใช้คอนเทนเนอร์ Docker”

OpenFaaS สามารถปรับใช้กับ Kubernetes หรือคลัสเตอร์ Docker Swarm (สำหรับการทดสอบในพื้นที่หรือการใช้งานที่มีความต้องการน้อย) คุณใช้ OpenFaaS CLI เพื่อสร้างพุชและปรับใช้อิมเมจ Docker ในคลัสเตอร์เพื่อเรียกใช้ฟังก์ชัน เทมเพลตที่มีอยู่ให้วิธีที่สร้างไว้ล่วงหน้าในการปรับใช้แอปที่เขียนใน Go, Python, Node.js, .NET, Ruby, Java หรือ PHP 7 แม้ว่าคุณจะสามารถหมุนได้เอง OpenFaaS CLI ยังมีวิธีจัดการความลับในคลัสเตอร์ของคุณในขณะที่เว็บ UI ในตัวช่วยให้คุณสร้างฟังก์ชันใหม่และจัดการได้

OpenFaaS รุ่นอื่น OpenFaaS Cloud บรรจุหีบห่อ OpenFaaS ใหม่พร้อมคุณสมบัติสำหรับนักพัฒนาหลายคนรวมถึงการรวมกับ Git (รวมถึง GitHub และ GitLab รุ่นที่โฮสต์ด้วยตนเอง), CI / CD, การจัดการความลับ, HTTPS และความสามารถในการฟีดเหตุการณ์ไปยัง Slack และอื่น ๆ อ่างล้างมือ OpenFaas Cloud มีให้บริการในรูปแบบผลิตภัณฑ์โอเพ่นซอร์สฟรีและในเวอร์ชันโฮสต์ที่ใช้งานได้ฟรี

OpenWhisk

Apache OpenWhisk ถูกเรียกเก็บเงินเป็นแพลตฟอร์มแบบไร้เซิร์ฟเวอร์ทั่วไป Kubernetes เป็นเพียงหนึ่งในหลาย ๆ ตัวเลือกสำหรับการเรียกใช้คอนเทนเนอร์ใน OpenWhisk เนื่องจาก OpenWhisk ยังรองรับ Mesos และ Docker Compose อย่างไรก็ตาม Kubernetes เป็นที่ต้องการเนื่องจากมีเครื่องมือสำหรับการปรับใช้แอปโดยเฉพาะ Helm charts IBM Cloud Functions อิงตามโปรเจ็กต์ OpenWhisk ดังนั้นจึงสามารถทำงานกับคำสั่ง OpenWhisk CLI ได้เช่นกัน

ซึ่งแตกต่างจากเฟรมเวิร์ก Kubernetes แบบไร้เซิร์ฟเวอร์ส่วนใหญ่ OpenWhisk เขียนด้วยภาษา Scala ไม่ใช่ Go (ซึ่งเขียนทั้ง Kubernetes และ Docker) ปัญหานี้น่าจะเป็นปัญหาเฉพาะในกรณีที่คุณต้องการแฮ็ก OpenWhisk และคุณมีประสบการณ์กับ Go เท่านั้น 

ตัวเลือกรันไทม์ของแอปพลิเคชันยอดนิยมส่วนใหญ่มาพร้อมกับ OpenWhisk: Java, Node.js, Python, Ruby, PHP และ. NET นอกจากนี้ยังมีตัวเลือกที่ลึกลับและล้ำสมัยมากมาย: Scala, Ballerina, Swift และ Rust Runtimes เป็นเพียงคอนเทนเนอร์ Docker ดังนั้นจึงเป็นเรื่องง่ายที่จะจัดหาของคุณเอง

คุณลักษณะการปรับใช้ OpenWhisk ที่สะดวกอย่างหนึ่งคือ "การดำเนินการ zip" ชี้ไฟล์. zip ของโค้ดและไฟล์เสริมไปที่ OpenWhisk โดยใช้ไฟล์ manifest สำหรับแพ็กเกจโค้ดจากนั้น OpenWhisk จะสร้างการดำเนินการจากไฟล์นั้น OpenWhisk CLI ยังมีเครื่องมือในการแปลงโครงสร้างไดเรกทอรีของรหัสให้เป็นไฟล์เก็บถาวร และแคตตาล็อกแพ็คเกจบริการทำให้ง่ายต่อการเชื่อมต่อแอปพลิเคชันของคุณเข้ากับข้อเสนอของบุคคลที่สามทั่วไปเช่น GitHub, Slack, Apache Kafka หรือ Jira