Skip to content

Kubernetes

  • Kubernetes là một nền tảng mã nguồn mở giúp tự động hóa quá trình triển khai, quản lý và mở rộng ứng dụng dưới dạng container, đóng vai trò như một công cụ điều phối container (Container Orchestration Engine).

  • Trong Kubernetes, Cluster là một tập hợp các máy chủ (node) hoạt động cùng nhau để chạy các ứng dụng container hóa. Một cluster bao gồm ít nhất một Master Node (điều phối và quản lý) và nhiều Worker Node (thực thi workload). Cluster giúp đảm bảo tính sẵn sàng, mở rộng linh hoạt và quản lý tài nguyên hiệu quả.

Khởi tạo Cluster

  • Bước 1: Chọn Cluster trên thanh Sidebar
K8S cluster
  • Bước 2: Chọn chức năng tạo Cluster bên phải màn hình. Hãy click vào nút "Create"
K8S cluster button create
  • Bước 3: Tại trang tạo Cluster hãy điền đầy đủ thông tin cơ bản sao cho hợp lệ

    • Lựa chọn "Location"

      K8S location
    • Tại mục "Config Cluster": nhập tên mô tả, lựa chọn version và lựa chọn CNI Plugin

      K8S Config
    • Tại mục "Config network": người dùng có thể lựa chọn public hoặc private

      K8S Network
      • Với lựa chọn public, người dùng sẽ được cung cấp một ip tự động

      • Với lựa chọn private, người dùng sẽ phải chọn subnet muốn kết nối

      • Khi lựa chọn "Specify Custom Pod CIDR", đồng nghĩa với việc chỉ định một dải địa chỉ IP (CIDR) tùy chỉnh cho các Pod trong một Kubernetes cluster. Điều này giúp cho người dùng có thể kiểm soát tốt không gian IP mà Pod có thể sử dụng. Khi sử dụng, bạn người dùng hãy điền ip chỉ định vào ô nhập.

  • Bước 4: Với mục "Config cluster capacity" người dùng hoàn toàn có thể config pool, số lượng pool muốn khởi tạo trong K8S theo mong muốn

    K8S Pool
    • Nhập name
    • Lựa chọn node type và package đi kèm
    • Nhập storage type
    • Lựa chọn enable autoscale
      • Nếu không tích vào lựa chọn thì người dùng cần nhập số node mong muốn
      • Nếu tích vào lựa chọn thì người dùng cần nhập min, max số node
  • Bước 5: Kiểm tra tóm tắt thông tin config bao gồm thông tin K8S và các node pool

    K8S Billing Summary
  • Bước 6: Xác thực thanh toán và ấn lưu thông tin để tạo K8S tại "Create Kubernetes Cluster"

    K8S Submit Create
  • Bước 7: Sau khi tạo thành công, K8S vừa tạo sẽ được hiển thị

Xóa K8S

  • Chọn xóa K8S mong muốn từ action icon "Delete", bấm vào xóa. Lưu ý, hành động xóa không thể khôi phục, hãy chắc chắn cho hành động này
K8S List - Sau khi pop-up mở ra, hãy confirm bằng cách nhập tên của K8S và bấm nút "Delete"
<img src="/resources/static/images_k8s/k8s_delete_popup.png" alt="K8S Delete">

Hướng dẫn kết nối Kubernetes cluster

Sau khi tạo xong K8S với trạng thái "Provisioned", người dùng hoàn toàn có thể kết nối đến K8S để kiểm tra và quản lý.

  • Bước 1: Tải xuống file cấu hình của K8S: file chứa thông tin API endpoint, thông tin xác thực. Bấm download để tải file cấu hình về máy
K8S Config
  • Bước 2: Thiết lập môi trường của kubeconfig - sử dụng file cấu hình vừa tải

  • Bước 3: Kiểm tra trạng thái kết nối bằng câu lệnh

kubectl --kubeconfig=test.kubeconfig get pods -A

Giao diện sẽ hiển thị như hình

K8S Terminal

Hướng dẫn tích hợp với LoadBalancer

Gói LB

STT Loại LB Tên của flavor LB
1 ACTIVE_STANDBY 10000rps-300Mbps-10TBdatatransfer-active-standby
2 ACTIVE_STANDBY 4000rps-300Mbps-10TBdatatransfer-active-standby
3 ACTIVE_STANDBY 2000rps-300Mbps-5TBdatatransfer-active-standby
4 ACTIVE_STANDBY 1500rps-300Mbps-5TBdatatransfer-active-standby
5 SINGLE 10000rps-300Mbps-10TBdatatransfer-standalone
6 SINGLE 4000rps-300Mbps-10TBdatatransfer-standalone
7 SINGLE 2000rps-300Mbps-5TBdatatransfer-standalone
8 SINGLE 1500rps-300Mbps-5TBdatatransfer-standalone

Annotation

Tên annotation Require Các giá trị Mô tả
kubernetes.omzcloud.vn/load-balancer-flavor true Gói LB Tên của flavor lb trên CMP service
kubernetes.omzcloud.vn/load-balancer-network-type true internal, external Loại network
kubernetes.omzcloud.vn/listener-protocol true TERMINATED_HTTPS, HTTPS, HTTP, TCP, UDP Giao thức mà listener của lb sẽ lắng nghe
kubernetes.omzcloud.vn/load-balancer-algorithm true LEAST_CONNECTIONS, ROUND_ROBIN, SOURCE_IP Thuật toán của lb
kubernetes.omzcloud.vn/load-balancer-session-persistence false SOURCE_IP, HTTP_COOKIE, APP_COOKIE Session persistence của pool
kubernetes.omzcloud.vn/load-balancer-cookie-name false SOURCE_IP, HTTP_COOKIE, APP_COOKIE Nếu có annotation session-persistence và giá trị của nó là APP_COOKIE thì mới cần điền cookie name
kubernetes.omzcloud.vn/vpc-subnet-id true ID cmp của Subnet mà lb sẽ được tạo
kubernetes.omzcloud.vn/tls-certificate-id true Nếu chọn Listener là TERMINATED_HTTPS thì bắt buộc
kubernetes.omzcloud.vn/terminated-ssl false Giá trị: boolean value, true - nếu enable terminated SSL, false - nếu offload https. Dùng terminated-ssl: "true" thì bắt buộc kubernetes.omzcloud.vn/listener-protocol: "TERMINATED_HTTPS"
kubernetes.omzcloud.vn/listener-client-data-timeout

kubernetes.omzcloud.vn/listner-tcp-inspect-timeout

kubernetes.omzcloud.vn/listener-member-connect-timeout

kubernetes.omzcloud.vn/listener-member-data-timeout

kubernetes.omzcloud.vn/listener-connection-limit
true Các tham số cấu hình cho listener, nếu listener sử dụng protocol là UDP thì ko cần các trường này
kubernetes.omzcloud.vn/listener-allowed-cidr false 10.0.0.0/8, 172.16.0.0/16, 192.168.0.0/16 Dải ip cho phép của listener
kubernetes.omzcloud.vn/listener-tls-cipher Khi báo tls cipher khi kubernetes.omzcloud.vn/terminated-ssl là "true"
kubernetes.omzcloud.vn/listener-x-forwarded-for

kubernetes.omzcloud.vn/listener-x-forwarded-proto

kubernetes.omzcloud.vn/listener-x-forwarded-port
true Các trường boolean value, khi listener là terminated SSL hoặc HTTP (require condition)
kubernetes.omzcloud.vn/pool-protocol false - Cấu hình protocol cho pool: HTTP, HTTPS, TCP, UDP
- Listener protocol: HTTP ⇔ Pool protocol: HTTP
- Listener protocol: HTTPS ⇔ Pool protocol: HTTPS, TCP
- Listener protocol: TCP ⇔ Pool protocol: HTTP, HTTPS, TCP
- Listener protocol: UDP ⇔ Pool protocol: UDP
- Listener protocol: TERMINATED_HTTPS ⇔ Pool protocol: HTTP

Tích hợp

Ví dụ: Tạo Loadbalancer

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx-deployment
    spec:
    replicas: 2
    selector:
        matchLabels:
        app: nginx
    template:
        metadata:
        labels:
            app: nginx
        spec:
        containers:
        - name: nginx
            image: nginx:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
    name: nginx-service-2
    annotations:
        kubernetes.omzcloud.vn/load-balancer-flavor: "10000rps-300Mbps-10TBdatatransfer-active-standby"
    spec:
    type: LoadBalancer
    selector:
        app: nginx
    ports:
    - protocol: TCP
        port: 80        # Cổng bên ngoài
        targetPort: 80  # Cổng của container
        name: test-80
  • Bước 3: Apply cấu hình bằng lệnh, từ đó sẽ xuất hiện loadbalancer bạn vừa tạo trên hệ thống

    kubectl --kubeconfig=/root/quyen/test.kubeconfig create -f /root/quyen/test_lb.yaml
    

    Lưu ý, bạn hoàn toàn có thể kiểm tra trạng thái hoạt động của con Loadbalancer vừa tạo trên giao diện của OMZ Cloud. Chi tiết hướng dẫn tại Loadbalancer.

Hướng dẫn tích hợp với volume

Bước 1: Tạo cluster, chờ cluster provisioned

Bước 2: Tạo volume trên có size mong muốn, lấy volume_id, ví dụ volume_id là aaaaa(size và id có thể thay đổi)

Bước 3: Tạo file test_pv.yaml có nội dung như sau: thay đổi trường volumeHandle bằng id của volume trên cmp

    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: omzcloudpv
    spec:
    accessModes:
        - ReadWriteOnce
    capacity:
        storage: "20" # bằng với size của volume
    claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        name: testpvc
        namespace: default
    csi:
        driver: volume.csi.omzcloud.vn
        fsType: ext4
        volumeHandle: aaaaa # id của volume trên cmp
    storageClassName: ssd
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: testpvc
    namespace: default
    spec:
    storageClassName: ssd
    accessModes:
        - ReadWriteOnce
    resources:
        requests:
        storage: "20"  # bằng với size của volume
    ---
    apiVersion: v1
    kind: Pod
    metadata:
    name: simple-pod
    labels:
        app: simple-app
    spec:
    containers:
        - name: simple-container
        image: nginx:latest
        volumeMounts:
            - mountPath: "/usr/share/nginx/html" # Nơi gắn PVC vào trong container
            name: storage-volume
    volumes:
        - name: storage-volume
        persistentVolumeClaim:
            claimName: testpvc # Tên PVC đã được tạo trước

Bước 4: Chạy cấu hình trên với lệnh để có thể attach volume

kubectl --kubeconfig=test.kubeconfig apply -f /root/test_pv.yaml

Bước 5: Kiểm tra kết quả xem trạng thái của pod có tên simple-pod đã running hay chưa

kubectl --kubeconfig=test.kubeconfig get pods -A

Detach Volume

Sau khi đã attach volume theo hướng dẫn, người dùng có thể dùng câu lệnh để detach như sau:

kubectl --kubeconfig=test.kubeconfig delete -f /root/test_pv.yaml