46
Kyle bai R&D @ inwinSTACK www.inwinstack.com Build your own Kubernetes apiserver and resource type

Build your own kubernetes apiserver and resource type

Embed Size (px)

Citation preview

  1. 1. Kyle bai R&D @ inwinSTACK www.inwinstack.com Build your own Kubernetes apiserver and resource type
  2. 2. Job R&D @ inwinSTACK Description java objc iOS Mobile Hadoop Spark Linux OpenStackCeph Kubernetes GitHub GitBook Drink Coffee Good! Phone #7727 Love Buttocks kairen([email protected]) https://kairen.github.io/ About Me Kyle Bai
  3. 3. Kubernetes 47% Containers remain the top emerging technology of interest to users. Among those currently deploying container orchestration or platform services on OpenStack, 47% are using Kubernetes. Why Kubernetes? Kubernetes API Server Extend the Kubernetes with CRD Extend the Kubernetes with apiserver-builder Agenda Today I will talk about
  4. 4. Why Kubernetes?
  5. 5. Kubernetes Kubernetes Google (Container) Google Brog Container(OCI) K8s( ) CNCF(Cloud Native Computing Foundation) Stars 25,830+ Commits 52,905+ Contributors 1,331+
  6. 6. CNCF Landscape
  7. 7. CNCF Members
  8. 8. Container Management Platforms Preferences
  9. 9. Kubernetes Pros Monitoring Rolling-update High-availability Self-healing Cloud Provider Persistent Volumes Configmap Secret Kubernetes
  10. 10. Microservices Kubernetes (Microservices) (Container)
  11. 11. Kubernetes Distributions
  12. 12. Kubernetes API Server
  13. 13. Kubernetes Architecture(1/2) Kubernetes Masters API Nodes(Minions)
  14. 14. Kubernetes Architecture(2/2)
  15. 15. Kubernetes API driven Kubernetes API JSON HTTP API API CRUD Kubernetes API OpenAPI gRPC Remote Procedure Call API CRD(Custom Resource Definitions) API server aggregation Custom resources and controllers
  16. 16. HTTP API spaces Kubernetes API /api/v1/apis/ extensions/v1beta1
  17. 17. API Levels Kubernetes API Alpha level: Example: v1alpha1 Beta level: Example: v1beta2 Stable level: Example: v1
  18. 18. API Terminology(1/2) Kind:(Entity) Kubernetes Kind 1. Pod Namespace 2. PodLists, NodeLists 3. /binding, /status API Group Resource
  19. 19. API Terminology(2/2) API Group: Job CronJob Version: API Group v1alpha1 v1beta1 v1 Resource: HTTP JSON
  20. 20. Request Flow and Processing(1/4) https://github.com/kubernetes/apiserver/blob/master/pkg/server/config.go DefaultBuildHandlerChain() Multiplexer HTTP Handlers Routes HTTP Handlers Handlers HTTP ( User, Auth )
  21. 21. Request Flow and Processing(2/4) https://www.slideshare.net/sttts/kubernetes-api-deep-dive-into-the-kubeapiserver
  22. 22. Request Flow and Processing(3/4) https://www.slideshare.net/sttts/kubernetes-api-deep-dive-into-the-kubeapiserver
  23. 23. Request Flow and Processing(4/4) https://www.slideshare.net/sttts/kubernetes-api-deep-dive-into-the-kubeapiserver
  24. 24. Cluster state in Etcd
  25. 25. Validation and Admission Admission: API Kubernetes NamespaceLifecycle: ResourceQuota: Validation:()
  26. 26. YAML file to define resource Example resource:
  27. 27. Extend the Kubernetes with CRD
  28. 28. CustomResourceDefinitions(CRD) CustomResourceDefinition(CRD) v1.7+ Kubernetes API Kubernetes CRD ThirdPartyResources(TPR) Kubernetes API. CRDs UX ex: kubectl. Controllers . SubResources(v1.9). P.S. TPR v1.8
  29. 29. CRD Example(1/2)
  30. 30. CRD Example(2/2)
  31. 31. Add Controller to Handle events
  32. 32. How CRD works internally(1/2) Creating a CRD
  33. 33. How CRD works internally(2/2) Creating a CustomResource
  34. 34. Use case - rook.io(1/2) rook.io: (Ceph on Kubenretes)
  35. 35. Use case - rook.io (2/2) Rook CRD Pool Filesystem Rook operator
  36. 36. Use case - TensorFlow(1/3) https://github.com/tensorflow/k8s Kubernetes Custom Resource and Operator For TensorFlow jobs.
  37. 37. Use case - TensorFlow(2/3)
  38. 38. Use case - TensorFlow(3/3)
  39. 39. Refer projects code-generator crd-code-generation apiextensions-apiserver sample-apiserver sample-controller apimachinery
  40. 40. Extend the Kubernetes API with apiserver-builder
  41. 41. apiserver-builder apiserver-builder Kubernetes apiserver Standalone, Minikube (Controller) Kubernetes API
  42. 42. apiserver-builder cmd # $ cd GOPATH/src/github.com/my-org/my-project $ apiserver-boot init repo --domain # $ apiserver-boot create group version resource --group --version --kind # $ apiserver-boot build executables $ apiserver-boot build docs # local $ apiserver-boot run local # $ apiserver-boot run in-cluster --name nameofservicetorun --namespace default --image gcr.io/myrepo/ myimage:mytag $ kubectl create -f sample/.yaml
  43. 43. apiserver-builder storage operations
  44. 44. Demo
  45. 45. Refer projects apiserver-builder/example kube-openapi service-catalog
  46. 46. 46 Thank You!!