Catatan perev. A: Artikel asli ditulis oleh perwakilan BlueData, sebuah perusahaan yang didirikan oleh orang-orang dari VMware. Dia berspesialisasi dalam membuatnya lebih mudah (lebih mudah, lebih cepat, lebih murah) untuk menyebarkan solusi untuk analitik Big Data dan pembelajaran mesin di berbagai lingkungan. Inisiatif baru-baru ini dari perusahaan bernama BlueK8s , di mana penulis ingin merakit galaksi perangkat Open Source "untuk menyebarkan aplikasi stateful dan mengelolanya di Kubernetes," juga diminta untuk berkontribusi dalam hal ini. Artikel ini didedikasikan untuk yang pertama - KubeDirector, yang, menurut penulis, membantu penggemar di bidang Big Data, yang tidak memiliki pelatihan khusus di Kubernetes, menyebarkan aplikasi seperti Spark, Cassandra atau Hadoop di K8s. Instruksi singkat tentang cara melakukan ini disediakan dalam artikel. Namun, perlu diingat bahwa proyek ini memiliki status kesiapan awal - pra-alfa.
KubeDirector adalah proyek Open Source yang dirancang untuk menyederhanakan peluncuran cluster dari aplikasi stateful scalable yang kompleks di Kubernetes. KubeDirector diimplementasikan menggunakan kerangka kerja 
Custom Resource Definition (CRD), menggunakan kemampuan ekstensi API Kubernetes asli dan mengandalkan filosofi mereka. Pendekatan ini memberikan integrasi transparan dengan manajemen pengguna dan sumber daya di Kubernetes, serta dengan klien dan utilitas yang ada. 
Proyek KubeDirector yang 
baru-baru ini diumumkan adalah bagian dari inisiatif Open Source yang lebih besar untuk Kubernet yang disebut BlueK8s. Sekarang saya senang mengumumkan ketersediaan kode 
KubeDirector awal (pra-alfa). Posting ini akan menunjukkan cara kerjanya.
KubeDirector menawarkan fitur-fitur berikut:
- Tidak perlu memodifikasi kode untuk menjalankan aplikasi stateful selain cloud asli dari Kubernetes. Dengan kata lain, tidak perlu menguraikan aplikasi yang ada agar sesuai dengan pola arsitektur layanan microser.
- Dukungan asli untuk menyimpan konfigurasi dan status khusus aplikasi.
- Pola penyebaran aplikasi-independen yang meminimalkan waktu startup aplikasi stateful baru di Kubernetes.
KubeDirector memungkinkan para ilmuwan data, terbiasa dengan aplikasi terdistribusi dengan pemrosesan data intensif, seperti Hadoop, Spark, Cassandra, TensorFlow, Caffe2, dll., Untuk menjalankannya di Kubernetes dengan kurva belajar minimal dan tanpa perlu menulis kode saat Go. Ketika aplikasi ini dikendalikan oleh KubeDirector, mereka ditentukan oleh metadata sederhana dan set konfigurasi yang terkait. Metadata aplikasi didefinisikan sebagai sumber daya 
KubeDirectorApp .
Untuk memahami komponen KubeDirector, klon repositori di 
GitHub dengan perintah seperti berikut:
 git clone http://<userid>@github.com/bluek8s/kubedirector. 
Definisi 
KubeDirectorApp untuk aplikasi Spark 2.2.1 terletak di 
kubedirector/deploy/example_catalog/cr-app-spark221e2.json :
  ~> cat kubedirector/deploy/example_catalog/cr-app-spark221e2.json 
  { "apiVersion": "kubedirector.bluedata.io/v1alpha1", "kind": "KubeDirectorApp", "metadata": { "name" : "spark221e2" }, "spec" : { "systemctlMounts": true, "config": { "node_services": [ { "service_ids": [ "ssh", "spark", "spark_master", "spark_worker" ], … 
Konfigurasi aplikasi cluster didefinisikan sebagai sumber daya 
KubeDirectorCluster .
Definisi 
KubeDirectorCluster untuk contoh cluster Spark 2.2.1 tersedia di 
kubedirector/deploy/example_clusters/cr-cluster-spark221.e1.yaml :
 ~> cat kubedirector/deploy/example_clusters/cr-cluster-spark221.e1.yaml 
 apiVersion: "kubedirector.bluedata.io/v1alpha1" kind: "KubeDirectorCluster" metadata: name: "spark221e2" spec: app: spark221e2 roles: - name: controller replicas: 1 resources: requests: memory: "4Gi" cpu: "2" limits: memory: "4Gi" cpu: "2" - name: worker replicas: 2 resources: requests: memory: "4Gi" cpu: "2" limits: memory: "4Gi" cpu: "2" - name: jupyter … 
Luncurkan Spark di Kubernetes dengan KubeDirector
Memulai cluster Spark di Kubernetes dengan KubeDirector mudah.
Pertama, pastikan Kubernetes berjalan (versi 1.9 atau lebih tinggi) menggunakan perintah 
kubectl version :
 ~> kubectl version Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T18:02:47Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T17:53:03Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"} 
Menyebarkan layanan KubeDirector dan sampel 
KubeDirectorApp sumber daya 
KubeDirectorApp menggunakan perintah berikut:
 cd kubedirector make deploy 
Akibatnya, ini akan dimulai dengan KubeDirector:
 ~> kubectl get pods NAME READY STATUS RESTARTS AGE kubedirector-58cf59869-qd9hb 1/1 Running 0 1m 
Lihat daftar aplikasi yang diinstal di KubeDirector dengan menjalankan 
kubectl get KubeDirectorApp :
 ~> kubectl get KubeDirectorApp NAME AGE cassandra311 30m spark211up 30m spark221e2 30m 
Sekarang Anda bisa memulai cluster Spark 2.2.1 menggunakan file sampel untuk 
KubeDirectorCluster dan 
kubectl create -f deploy/example_clusters/cr-cluster-spark211up.yaml . Periksa apakah sudah dimulai:
 ~> kubectl get pods NAME READY STATUS RESTARTS AGE kubedirector-58cf59869-djdwl 1/1 Running 0 19m spark221e2-controller-zbg4d-0 1/1 Running 0 23m spark221e2-jupyter-2km7q-0 1/1 Running 0 23m spark221e2-worker-4gzbz-0 1/1 Running 0 23m spark221e2-worker-4gzbz-1 1/1 Running 0 23m 
Spark juga muncul dalam daftar layanan yang berjalan:
 ~> kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubedirector ClusterIP 10.98.234.194 <none> 60000/TCP 1d kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d svc-spark221e2-5tg48 ClusterIP None <none> 8888/TCP 21s svc-spark221e2-controller-tq8d6-0 NodePort 10.104.181.123 <none> 22:30534/TCP,8080:31533/TCP,7077:32506/TCP,8081:32099/TCP 20s svc-spark221e2-jupyter-6989v-0 NodePort 10.105.227.249 <none> 22:30632/TCP,8888:30355/TCP 20s svc-spark221e2-worker-d9892-0 NodePort 10.107.131.165 <none> 22:30358/TCP,8081:32144/TCP 20s svc-spark221e2-worker-d9892-1 NodePort 10.110.88.221 <none> 22:30294/TCP,8081:31436/TCP 20s 
Jika Anda mengakses port 31533 di browser Anda, Anda dapat melihat Spark Master UI:

Itu saja! Dalam contoh di atas, selain cluster Spark, kami juga menggunakan 
Notebook Jupyter .
Untuk memulai aplikasi lain (misalnya, Cassandra) cukup tentukan file lain dengan 
KubeDirectorApp :
 kubectl create -f deploy/example_clusters/cr-cluster-cassandra311.yaml 
Verifikasi bahwa gugus Cassandra telah dimulai:
 ~> kubectl get pods NAME READY STATUS RESTARTS AGE cassandra311-seed-v24r6-0 1/1 Running 0 1m cassandra311-seed-v24r6-1 1/1 Running 0 1m cassandra311-worker-rqrhl-0 1/1 Running 0 1m cassandra311-worker-rqrhl-1 1/1 Running 0 1m kubedirector-58cf59869-djdwl 1/1 Running 0 1d spark221e2-controller-tq8d6-0 1/1 Running 0 22m spark221e2-jupyter-6989v-0 1/1 Running 0 22m spark221e2-worker-d9892-0 1/1 Running 0 22m spark221e2-worker-d9892-1 1/1 Running 0 22m 
Kubernetes sekarang menjalankan cluster Spark (dengan Jupyter Notebook) dan cluster Cassandra. Daftar layanan dapat dilihat dengan perintah 
kubectl get service :
 ~> kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubedirector ClusterIP 10.98.234.194 <none> 60000/TCP 1d kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d svc-cassandra311-seed-v24r6-0 NodePort 10.96.94.204 <none> 22:31131/TCP,9042:30739/TCP 3m svc-cassandra311-seed-v24r6-1 NodePort 10.106.144.52 <none> 22:30373/TCP,9042:32662/TCP 3m svc-cassandra311-vhh29 ClusterIP None <none> 8888/TCP 3m svc-cassandra311-worker-rqrhl-0 NodePort 10.109.61.194 <none> 22:31832/TCP,9042:31962/TCP 3m svc-cassandra311-worker-rqrhl-1 NodePort 10.97.147.131 <none> 22:31454/TCP,9042:31170/TCP 3m svc-spark221e2-5tg48 ClusterIP None <none> 8888/TCP 24m svc-spark221e2-controller-tq8d6-0 NodePort 10.104.181.123 <none> 22:30534/TCP,8080:31533/TCP,7077:32506/TCP,8081:32099/TCP 24m svc-spark221e2-jupyter-6989v-0 NodePort 10.105.227.249 <none> 22:30632/TCP,8888:30355/TCP 24m svc-spark221e2-worker-d9892-0 NodePort 10.107.131.165 <none> 22:30358/TCP,8081:32144/TCP 24m svc-spark221e2-worker-d9892-1 NodePort 10.110.88.221 <none> 22:30294/TCP,8081:31436/TCP 24m 
PS dari penerjemah
Jika Anda tertarik dengan proyek KubeDirector, Anda juga harus memperhatikan 
wiki-nya . Sayangnya, tidak mungkin untuk menemukan peta jalan umum, namun, 
isu-isu tentang GitHub menjelaskan kemajuan proyek dan pandangan pengembang utama. Selain itu, bagi mereka yang tertarik pada KubeDirector, penulis memberikan tautan ke 
Slack chat dan 
Twitter .
Baca juga di blog kami: