Skip to main content

Command Palette

Search for a command to run...

Bài 18: Kubernetes Operators

Published
7 min readView as Markdown

18.1 Giới thiệu về Kubernetes Operators

Kubernetes Operators là gì?

  • Operators là các ứng dụng Kubernetes đặc biệt, sử dụng Custom Resources (CR)Custom Controllers để tự động hóa quản lý ứng dụng hoặc hạ tầng phức tạp.

  • Operators hoạt động dựa trên mẫu thiết kế Control Loop:

    • Theo dõi trạng thái hiện tại của cluster.

    • So sánh với trạng thái mong muốn.

    • Tự động thực hiện các hành động để đạt được trạng thái mong muốn.

Lợi ích của Operators

  1. Tự động hóa:

    • Quản lý vòng đời ứng dụng: cài đặt, nâng cấp, sao lưu, khôi phục.
  2. Khả năng tùy chỉnh cao:

    • Xây dựng logic riêng phù hợp với ứng dụng cụ thể.
  3. Tích hợp với Kubernetes API:

    • Dễ dàng mở rộng bằng cách định nghĩa Custom Resource Definitions (CRDs).

Ví dụ thực tế

  • Database Operator: Tự động sao lưu và phục hồi cơ sở dữ liệu.

  • Monitoring Operator: Tự động triển khai Prometheus và Grafana.


18.2 Triển khai một Operator đơn giản để mở rộng chức năng của cluster

Bước 1: Định nghĩa Custom Resource (CR)

  1. Tạo CRD (Custom Resource Definition)

    • File: myapp-crd.yaml

        apiVersion: apiextensions.k8s.io/v1
        kind: CustomResourceDefinition
        metadata:
          name: myapps.example.com
        spec:
          group: example.com
          names:
            kind: MyApp
            listKind: MyAppList
            plural: myapps
            singular: myapp
          scope: Namespaced
          versions:
          - name: v1
            served: true
            storage: true
            schema:
              openAPIV3Schema:
                type: object
                properties:
                  spec:
                    type: object
                    properties:
                      replicas:
                        type: integer
                      image:
                        type: string
      
  2. Triển khai CRD

     kubectl apply -f myapp-crd.yaml
    

Bước 2: Tạo Custom Resource

  • File: myapp.yaml

      apiVersion: example.com/v1
      kind: MyApp
      metadata:
        name: myapp-sample
        namespace: default
      spec:
        replicas: 3
        image: nginx
    
  • Triển khai Custom Resource:

      kubectl apply -f myapp.yaml
    

Bước 3: Viết Controller cho Operator

  • Controller lắng nghe các sự kiện liên quan đến CR và thực hiện các hành động.

  • Dưới đây là mã Python sử dụng Kubernetes Python Client:

      from kubernetes import client, config, watch
    
      def create_deployment(name, replicas, image):
          apps_v1 = client.AppsV1Api()
          deployment = client.V1Deployment(
              metadata=client.V1ObjectMeta(name=name),
              spec=client.V1DeploymentSpec(
                  replicas=replicas,
                  selector={'matchLabels': {'app': name}},
                  template=client.V1PodTemplateSpec(
                      metadata={'labels': {'app': name}},
                      spec=client.V1PodSpec(containers=[
                          client.V1Container(name=name, image=image)
                      ])
                  )
              )
          )
          apps_v1.create_namespaced_deployment(namespace="default", body=deployment)
    
      def main():
          config.load_incluster_config()
          v1 = client.CustomObjectsApi()
          w = watch.Watch()
          for event in w.stream(v1.list_namespaced_custom_object,
                                group="example.com",
                                version="v1",
                                namespace="default",
                                plural="myapps"):
              cr = event['object']
              spec = cr['spec']
              create_deployment(cr['metadata']['name'], spec['replicas'], spec['image'])
    
      if __name__ == '__main__':
          main()
    
  • Xây dựng Docker Image cho Controller và triển khai dưới dạng Pod.

Bước 4: Triển khai Operator

  1. Tạo Deployment cho Operator:

    • File: operator-deployment.yaml

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: myapp-operator
          namespace: default
        spec:
          replicas: 1
          selector:
            matchLabels:
              app: myapp-operator
          template:
            metadata:
              labels:
                app: myapp-operator
            spec:
              containers:
              - name: myapp-operator
                image: <your-operator-image>
      
  2. Triển khai Operator:

     kubectl apply -f operator-deployment.yaml
    

18.3 Thực hành: Tạo và triển khai Operator cho ứng dụng Spring Boot

Mục tiêu

  • Tự động triển khai ứng dụng Spring Boot thông qua Operator.

Thực hiện

  1. Định nghĩa CRD cho Spring Boot.

  2. Viết Controller quản lý ứng dụng Spring Boot:

    • Tự động tạo Deployment, Service, và HPA.
  3. Triển khai Operator và thử nghiệm bằng cách tạo Custom Resource.


18.4 Bài tập mở rộng

  1. Tích hợp Prometheus Operator:

    • Tự động triển khai và cấu hình Prometheus, Grafana.
  2. Tự động quản lý backup với Database Operator:

    • Tích hợp các công cụ như Velero hoặc Kasten K10.
  3. Tùy chỉnh Operator Framework:

    • Sử dụng Operator SDK để xây dựng Operator một cách đơn giản và nhanh chóng.

Tổng kết

  • Operators là công cụ mạnh mẽ để tự động hóa quản lý ứng dụng và hạ tầng trong Kubernetes.

  • Việc sử dụng CRD và Custom Controllers giúp mở rộng chức năng của cluster theo nhu cầu cụ thể.

  • Tích hợp thêm các bài tập thực hành như xây dựng Operator cho ứng dụng Spring Boot hoặc các công cụ quản lý khác sẽ giúp nâng cao kỹ năng.


Bài tiếp theo sẽ hướng dẫn bạn cách triển khai Kubernetes cho các ứng dụng multi-tenancy, bao gồm namespace isolation và quản lý tài nguyên. 🚀


18.1 Giới thiệu về Kubernetes Operators

Kubernetes Operators là gì?

  • Operators là các ứng dụng Kubernetes đặc biệt, sử dụng Custom Resources (CR)Custom Controllers để tự động hóa quản lý ứng dụng hoặc hạ tầng phức tạp.

  • Operators hoạt động dựa trên mẫu thiết kế Control Loop:

    • Theo dõi trạng thái hiện tại của cluster.

    • So sánh với trạng thái mong muốn.

    • Tự động thực hiện các hành động để đạt được trạng thái mong muốn.

Lợi ích của Operators

  1. Tự động hóa:

    • Quản lý vòng đời ứng dụng: cài đặt, nâng cấp, sao lưu, khôi phục.
  2. Khả năng tùy chỉnh cao:

    • Xây dựng logic riêng phù hợp với ứng dụng cụ thể.
  3. Tích hợp với Kubernetes API:

    • Dễ dàng mở rộng bằng cách định nghĩa Custom Resource Definitions (CRDs).

Ví dụ thực tế

  • Database Operator: Tự động sao lưu và phục hồi cơ sở dữ liệu.

  • Monitoring Operator: Tự động triển khai Prometheus và Grafana.


18.2 Triển khai một Operator đơn giản để mở rộng chức năng của cluster

Bước 1: Định nghĩa Custom Resource (CR)

  1. Tạo CRD (Custom Resource Definition)

    • File: myapp-crd.yaml

        apiVersion: apiextensions.k8s.io/v1
        kind: CustomResourceDefinition
        metadata:
          name: myapps.example.com
        spec:
          group: example.com
          names:
            kind: MyApp
            listKind: MyAppList
            plural: myapps
            singular: myapp
          scope: Namespaced
          versions:
          - name: v1
            served: true
            storage: true
            schema:
              openAPIV3Schema:
                type: object
                properties:
                  spec:
                    type: object
                    properties:
                      replicas:
                        type: integer
                      image:
                        type: string
      
  2. Triển khai CRD

     kubectl apply -f myapp-crd.yaml
    

Bước 2: Tạo Custom Resource

  • File: myapp.yaml

      apiVersion: example.com/v1
      kind: MyApp
      metadata:
        name: myapp-sample
        namespace: default
      spec:
        replicas: 3
        image: nginx
    
  • Triển khai Custom Resource:

      kubectl apply -f myapp.yaml
    

Bước 3: Viết Controller cho Operator

  • Controller lắng nghe các sự kiện liên quan đến CR và thực hiện các hành động.

  • Dưới đây là mã Python sử dụng Kubernetes Python Client:

      from kubernetes import client, config, watch
    
      def create_deployment(name, replicas, image):
          apps_v1 = client.AppsV1Api()
          deployment = client.V1Deployment(
              metadata=client.V1ObjectMeta(name=name),
              spec=client.V1DeploymentSpec(
                  replicas=replicas,
                  selector={'matchLabels': {'app': name}},
                  template=client.V1PodTemplateSpec(
                      metadata={'labels': {'app': name}},
                      spec=client.V1PodSpec(containers=[
                          client.V1Container(name=name, image=image)
                      ])
                  )
              )
          )
          apps_v1.create_namespaced_deployment(namespace="default", body=deployment)
    
      def main():
          config.load_incluster_config()
          v1 = client.CustomObjectsApi()
          w = watch.Watch()
          for event in w.stream(v1.list_namespaced_custom_object,
                                group="example.com",
                                version="v1",
                                namespace="default",
                                plural="myapps"):
              cr = event['object']
              spec = cr['spec']
              create_deployment(cr['metadata']['name'], spec['replicas'], spec['image'])
    
      if __name__ == '__main__':
          main()
    
  • Xây dựng Docker Image cho Controller và triển khai dưới dạng Pod.

Bước 4: Triển khai Operator

  1. Tạo Deployment cho Operator:

    • File: operator-deployment.yaml

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: myapp-operator
          namespace: default
        spec:
          replicas: 1
          selector:
            matchLabels:
              app: myapp-operator
          template:
            metadata:
              labels:
                app: myapp-operator
            spec:
              containers:
              - name: myapp-operator
                image: <your-operator-image>
      
  2. Triển khai Operator:

     kubectl apply -f operator-deployment.yaml
    

18.3 Thực hành: Tạo và triển khai Operator cho ứng dụng Spring Boot

Mục tiêu

  • Tự động triển khai ứng dụng Spring Boot thông qua Operator.

Thực hiện

  1. Định nghĩa CRD cho Spring Boot.

  2. Viết Controller quản lý ứng dụng Spring Boot:

    • Tự động tạo Deployment, Service, và HPA.
  3. Triển khai Operator và thử nghiệm bằng cách tạo Custom Resource.


18.4 Bài tập mở rộng

  1. Tích hợp Prometheus Operator:

    • Tự động triển khai và cấu hình Prometheus, Grafana.
  2. Tự động quản lý backup với Database Operator:

    • Tích hợp các công cụ như Velero hoặc Kasten K10.
  3. Tùy chỉnh Operator Framework:

    • Sử dụng Operator SDK để xây dựng Operator một cách đơn giản và nhanh chóng.

Tổng kết

  • Operators là công cụ mạnh mẽ để tự động hóa quản lý ứng dụng và hạ tầng trong Kubernetes.

  • Việc sử dụng CRD và Custom Controllers giúp mở rộng chức năng của cluster theo nhu cầu cụ thể.

  • Tích hợp thêm các bài tập thực hành như xây dựng Operator cho ứng dụng Spring Boot hoặc các công cụ quản lý khác sẽ giúp nâng cao kỹ năng.


Bài tiếp theo sẽ hướng dẫn bạn cách triển khai Kubernetes cho các ứng dụng multi-tenancy, bao gồm namespace isolation và quản lý tài nguyên. 🚀

More from this blog

hoangkim

366 posts