Successfully reported this slideshow.
Your SlideShare is downloading. ×

Kubernetes Operator for vSphere VM

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 13 Ad

More Related Content

Slideshows for you (20)

Similar to Kubernetes Operator for vSphere VM (20)

Advertisement

Recently uploaded (20)

Kubernetes Operator for vSphere VM

  1. 1. Kubernetes Operator for vSphere VM KubernetesからvSphereのVMを作成してみる VMware DevOps Meetup #3
  2. 2. 今日のお話 KubernetesのOperatorを利用して、Kubernetes APIからvSphere上に仮想マシンを作 ります。 紹介するOperatorはPoC向けでありプロダクション向けのものではありません。 VMworld 2019 Session: Kubernetes Operators for VMware Enterprise PKS and VMware Cloud PKS [CODE1360U] の内容をベースにしています。 ● Streaming : https://videos.vmworld.com/global/2019/videoplayer/27913 ● Presentation : https://cms.vmworldonline.com/event_data/12/session_notes/CODE1360U.pdf ● Github : https://github.com/embano1/kopf-operator-vmworld
  3. 3. Master3 Master2 Node Node Master1 Node Client (kubectl) API Server Cluster State Store (etcd) kubelet Container Runtime Pod (Container) Controller Manager Controllers Scheduler Kubernetesのアーキテクチャ
  4. 4. KubernetesのReconciliation Loop Observe Analyze Act 期待する状態を現在 の状態を比較 状態の差異を 埋める API Serverへ 現在の状態を 問い合わせる ● Deployment ● ReplicaSet ● StatefulSet ● ...etc
  5. 5. Operatorとは Operatorは”Custom Resource Defnition”と”Custom Controller”の組み合わせ。 ステートフルなアプリケーション等に対する運用のナレッジをコード化し、Kubernetes API上でアプリケーションライフサイクルの管理を実現する。 Operator CRD (Custom Resource Definition) Controller (Custom Controller) += ● Custom Resource Definition : KubernetesのAPI上に任意のリソースを追加する ● Custom Controller : CRDによって定義されたカスタムリソースのライフサイクルを管理する https://coreos.com/blog/introducing-operators.html Introducing Operators: Putting Operational Knowledge into Software 2016/11/3 Brandon Philips
  6. 6. Operatorの例 ● MySQL ● Elasticsearch ● Kafka ● Istio ● Sysdig Agent ● Velero ● Amazon RDS ● etc... https://operatorhub.io/
  7. 7. Master3 Master2 Node Node Master1 Node Client (kubectl) API Server Cluster State Store (etcd) kubelet Container Runtime Pod (Container) Controller Manager Controllers Scheduler vSphereへの対応 Custom Controller CRD
  8. 8. VmGroup(vg)をCRDとして定義する。 Custom Resource Definition(CRD) apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: vmgroups.vsphere.vmware.com spec: scope: Namespaced group: vsphere.vmware.com versions: - name: v1alpha1 served: true storage: true names: kind: VmGroup plural: vmgroups singular: vmgroup shortNames: - vg additionalPrinterColumns: - name: Template type: string priority: 0 JSONPath: .spec.template description: Template this VM group is based on - name: Desired type: integer priority: 0 JSONPath: .spec.replicas description: The number of configured replicas in this VM group - name: Available type: string priority: 0 JSONPath: .status.vm_operator.currentReplicas description: The number of available replicas in this VM group - name: Phase type: string priority: 0 JSONPath: .status.vm_operator.phase description: Deployment status of this VM group
  9. 9. Controllerの作成 - Operator Frameworkの利用 ● kopf : Kubernetes Operator Pythonic Framework ○ https://github.com/zalando-incubator/kopf ○ Kubernetes APIの詳細を知らなくても Reconsilication Logicが実装可能 ○ Supported Language : Python ● その他のFramework ○ Operator Framework - https://github.com/operator-framework ■ Supported Languanges : Golang (HelmチャートやAnsible Playbookの再利用が可能) ○ Kubebuilder - https://github.com/kubernetes-sigs/kubebuilder ■ Supported Languages: Golang ○ Google Metacontroller - https://metacontroller.app ■ Supported Languages: Python, JavaScript,
  10. 10. Kopfを使って、Kubernetes API上でVmGroup(vg)をCRDのライフサイクルを管理する ためのコントローラーを作成する。 Custom Controller import kopf from pyVim.connect import Disconnect from pyVmomi import vim @kopf.on.event('vsphere.vmware.com', 'v1alpha1', 'vmgroups') def vm_operator(event, spec, meta, status, logger, **_): sleep(3) if event_type == "DELETED": delete_vm_group(vmgroup, logger) return try: phase = status['vm_operator']['phase'] except KeyError: phase = "PENDING" if phase == "PENDING": exists = vm_group_exists(vmgroup) ... https://github.com/embano1/kopf-operator-vmworld/blob/master/controller.py ... def create_vm_group(vmgroup_name: str, vmgroup_spec: Dict[str, str], logger: logging.Logger) -> int: try: vsphere.create_folder(dc, vmgroup_name) except vsphere.ObjectAlreadyExists as e: logger.warn(str(e)) return try: created = vsphere.clone_vm(content, dc, CLUSTER, DATASTORE, vmgroup_name, vmgroup_spec, logger) except vsphere.CloneError as e: logger.warn(str(e)) return -1 return created Reconciliation Loopの実装
  11. 11. Custom Resourceの作成 CRDとして作成した VmGroup リソースを作成する。 apiVersion: vsphere.vmware.com/v1alpha1 kind: VmGroup metadata: name: kopf-example labels: vmdevops: "0918" spec: cpu: 1 memory: 1 template: kopf-vm-template replicas: 3 # kubectl apply -f demo.yaml vmgroup.vsphere.vmware.com/kopf-example created # kubectl get vmgroup NAME TEMPLATE DESIRED AVAILABLE PHASE kopf-example kopf-vm-template 3 3 READY
  12. 12. デモ
  13. 13. Project Pacific ここ Project Pacific – Technical Overview : https://blogs.vmware.com/vsphere/2019/08/project-pacific-technical-overview.html

×