All pages
Powered by GitBook
1 of 7

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

5. Triển khai ứng dụng demo với persistence volume và public app qua ingress controller

Tổng quan

Hướng dẫn từng bước về cách triển khai ứng dụng demo trên HI GIO Kubernetes.

  • Cài đặt nginx ingress controller vào cluster Kubernetes của bạn. Việc cài đặt nginx ingress controller sẽ tự động tạo 2 Virtual services (80, 443) trong HI GIO LB.

  • Triển khai ứng dụng demo với persistent volume vào Kubernetes cluster và public app qua ingress nginx.

Quy trình

  • Helm (v3 trở lên)

  • Đảm bảo có ít nhất 1 IP public khả dụng

  • Có một Storage Class mặc định

  • Có quyền truy cập vào cluster Kubernetes của bạn

1

Bước 1: Cài đặt nginx ingress controller vào cluster Kubernetes của bạn

  • Xác minh trạng thái của pod là Running và service ingress-nginx-controller đã thành công lấy được EXTERNAL IP

2

Bước 2: Triển khai ứng dụng demo với persistent volume vào Kubernetes cluster và public ứng dụng qua nginx ingress

  • Cấu trúc thư mục ứng dụng demo

demoapp 
├── 01-demoapp-namespace.yaml
├── 02-demoapp-pvc.yaml
├── 03-demoapp-deployment.yaml
├── 04-demoapp-service.yaml
└── 05-demoapp-ingress.yaml
  • Tạo file 01-demoapp-namespace.yaml để tạo namespace cho demoapp

apiVersion: v1
kind: Namespace
metadata:
  name: demoapp
  • Tạo file 02-demoapp-pvc.yaml để tạo Persistent Volume Claim

  • Tạo file 03-demoapp-deployment.yaml để tạo deployment cho demoapp

  • Tạo file 04-demoapp-service.yaml để tạo service cho demoapp

  • Tạo file 05-demoapp-ingress.yaml để tạo ingress cho demoapp

  • Áp dụng tất cả các manifests

  • Tạo bản ghi DNS cho demoapp

  • Nếu tất cả các cấu hình là chính xác, bạn có thể truy cập ứng dụng của mình qua tên miền

http://<ingress-host>

#Add repo ingress-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx 
helm repo update ingress-nginx
#Install ingress nginx
helm install ingress-nginx ingress-nginx/ingress-nginx \
		--namespace ingress-nginx \
		--set controller.service.appProtocol=false \
		--create-namespace
kubectl get all -n ingress-nginx

CNI driver trên Kubernetes tự động tạo Virtual services trên HI GIO LB và 2 DNAT rules (80, 443) trên vCD.

Vui lòng thay đổi firewall của VPC để cho phép truy cập vào các dịch vụ ảo của ingress. Điều này cung cấp quyền truy cập vào ứng dụng của bạn được publish qua nginx ingress.

Tham khảo: Sử dụng Edge Gateway Firewall

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: demoapp-pvc
  namespace: demoapp
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: default-storage-class-1 #adjust to use your storage class
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demoapp
  namespace: demoapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demoapp
  template:
    metadata:
      labels:
        app: demoapp
    spec:
      containers:
      - name: demoapp
        image: paulbouwer/hello-kubernetes:1.8
        ports:
        - containerPort: 8080
        volumeMounts:
        - mountPath: /data
          name: demoapp-storage
      volumes:
      - name: demoapp-storage
        persistentVolumeClaim:
          claimName: demoapp-pvc
apiVersion: v1
kind: Service
metadata:
  name: demoapp
  namespace: demoapp
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: demoapp
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demoapp-ingress
  namespace: demoapp
spec:
  ingressClassName: nginx
  rules:
  - host: demoapp.cloud.net.vn #adjust to use your domain
    http:
      paths:
      - backend:
          service:
            name: demoapp
            port:
              number: 80
        path: /
        pathType: Prefix
cd demoapp
kubectl apply -f .
Name: <ingress-host>
Address: 42.113.xx.xx  (EXTERNAL-IP của ingress nginx)

4. Cách nâng cấp Kubernetes Cluster trên HI GIO Portal

Tổng quan

Đây là tài liệu hướng dẫn cách nâng cấp HI GIO Kubernetes Cluster.

Các bước thực hiện nâng cấp:

  • Các phiên bản phần mềm trong hướng dẫn này như sau:

  • Nâng cấp Kubernetes Cluster.

  • Xác minh Kubernetes Cluster sau khi nâng cấp.

  • Kubernetes Version: 1.23.17+vmware.1

  • TKG Product Version: 2.2.0

  • Service running on the cluster: Voting web app

  • Thành phần chạy dịch vụ::

Bước 1: Từ vCD portal, chọn More → Kubernetes Container Clusters.

Bước 2: Chọn cluster bạn muốn nâng cấp.

Bước 3: Chọn UPGRADE.

Bước 4: Xác minh rằng phiên bản Kubernetes và TKG Product hiện tại được sử dụng là chính xác.

Bước 5: Sau đó, chọn Available upgrade options → UPGRADE.

Bước 6: Chờ đến khi cluster thực hiện nâng cấp hoàn tất.

Bước 1: Sau khi hoàn tất, phiên bản cluster sẽ thay đổi thành phiên bản bạn đã chọn ở bước trên.

Bước 2: Kiểm tra các thành phần sau khi thực hiện nâng cấp và đảm bảo mọi thứ hoạt động bình thường

Bước 3: Kiểm tra dịch vụ sau khi nâng cấp và đảm bảo rằng nó vẫn hoạt động bình thường.

Nâng cấp đã hoàn tất.

Phiên bản phần mềm trong tài liệu này như sau:

Quy trình

HI GIO Kubernetes

Thông tin

Tài liệu này được thiết kế nhằm giúp bạn tận dụng tối đa các tính năng và chức năng mạnh mẽ của dịch vụ managed-Kubernetes trên hạ tầng HI GIO Cloud. Hướng dẫn cung cấp từng bước thực hiện, các thực tiễn tốt nhất, và ví dụ thực tế để nâng cao trải nghiệm Kubernetes của bạn.

Với HI GIO Kubernetes, bạn có thể quản lý hiệu quả các ứng dụng container, mở rộng quy mô dễ dàng, và đảm bảo tính khả dụng cao trên toàn bộ cơ sở hạ tầng.

Tổng quan

HI GIO Kubernetes - Dịch vụ quản lý & điều phối container

Dịch vụ quản lý cụm Kubernetes dựa trên mã nguồn mở được chạy trên hạ tầng HI GIO Cloud (Công nghệ VMware). Bằng cách tự động hoá quản lý triển khai phần mềm và đơn giản hóa việc quản lý các ứng dụng dưới dạng container, nhà phát triển phần mềm có thể tập trung vào phát triển và vận hành ứng dụng trên Cloud.

Mở rộng liền mạch. Quản lý đơn giản.

Hướng Dẫn

  • 1. Các bước tạo Kubernetes Cluster trên HI GIO Portal

  • 2. Cách thay đổi kích thước Kubernetes Cluster trên HI GIO Portal

  • 6.

3. Mở rộng dung lượng đĩa cho các node trong Kubernetes Cluster trên HI GIO Portal

  • Hướng dẫn từng bước để tăng dung lượng đĩa của mỗi node trong cluster nhằm đáp ứng nhu cầu lưu trữ ngày càng tăng.

  • Không cần downtime.

  • Đảm bảo oVDC có đủ dung lượng lưu trữ khả dụng.

Đảm bảo bạn có quyền truy cập vào node (ssh, node-shell…).

1

Bước 1: Đăng nhập vào HI GIO portal > Virtual Machines > Chọn node bạn muốn mở rộng dung lượng đĩa > Hard Disks > EDIT

2

Bước 2: Nhập dung lượng đĩa mới > SAVE

3

Bước 3: SSH vào node và thực hiện các lệnh dưới đây để mở rộng dung lượng đĩa trên hệ điều hành.

  • Kiểm tra điểm mount của root:

Ví dụ /dev/sda4

  • Chạy các lệnh dưới đây để mở rộng dung lượng cho /dev/sda4:

Tổng quan

Quy trình

3. Mở rộng dung lượng đĩa cho các node trong Kubernetes Cluster trên HI GIO Portal
4. Cách nâng cấp Kubernetes Cluster trên HI GIO Portal
5. Triển khai ứng dụng demo với persistence volume và public app qua ingress controller
Cách cấu hình autoscale Kubernetes Cluster trên HI GIO Portal

1. Các bước tạo Kubernetes Cluster trên HI GIO Portal

Tài liệu này giải thích cách tạo một Kubernetes Cluster trên HI GIO, bao gồm việc lựa chọn cấu hình, triển khai các node và khởi tạo control plane.

  • Tạo mạng cho Cluster với các Static IP Pools khả dụng.

  • Tạo các quy tắc Firewall và SNAT để đảm bảo các VM trong Cluster có thể truy cập internet.

  • Chạy lệnh để xác minh dung lượng đĩa sau khi mở rộng:

df -h
echo 1 > /sys/block/sda/device/rescan 
growpart /dev/sda 4 
resize2fs /dev/sda4
fdisk -l

Đảm bảo tính năng HI GIO Load Balancing đã được kích hoạt.

  • Đảm bảo có ít nhất một địa chỉ Public IP khả dụng.

  • Bước 1: Đăng nhập vào HI GIO portal bằng tài khoản tenant > Click More > Kubernetes Container Clusters

    Bước 2: Bấm vào NEW và làm theo các bước tạo để hoàn tất quá trình tạo mới HI GIO Kubernetes cluster.

    • Nhấn NEXT

    • Nhập tên của Cluster và chọn phiên bản Kubernetes. > NEXT.

    • Chọn NEXT ở bước 3.

    • Chọn oVDC và Network cho các node, sau đó nhấn NEXT

    • Trong cửa sổ Control Plane, chọn số lượng node và dung lượng đĩa và tùy chọn (optional) Chọn sizing policy, placement policy và storage profile sau đó nhấn NEXT.

    • Cấu hình cài đặt Worker Pools và nhấn NEXT.

    • Cấu hình Storage Class > NEXT

    • Cấu hình Kubernetes Network > NEXT

    • Bật Auto Repair on Errors and Node Health Check > NEXT

    • Kiểm tra lại toàn bộ thông tin Cluster và nhấn FINISH để tạo Cluster.

    Bước 3: Chờ trạng thái Cluster chuyển thành Available sau đó nhấn DOWNLOAD KUBE CONFIG để tải file kubeconfig.

    Tổng quan

    Quy trình

    Placement Policy

    Để trống, chúng tôi không áp dụng placement policy cho HI GIO Kubernetes cluster.

    Storage Policy

    Chọn một storage policy có sẵn.

    Sizing Policy

    • TKG small: Small VM sizing policy for a Kubernetes cluster node (2 CPU, 4GB memory)

    • TKG medium: Medium VM sizing policy for a Kubernetes cluster node (2 CPU, 8GB memory)

    • TKG large​: Large VM sizing policy for a Kubernetes cluster node (4 CPU, 16GB memory)

    Placement Policy

    Để trống. HI GIO không áp dụng placement policy cho HI GIO Kubernetes cluster.

    Storage Policy

    Chọn storage policy sẵn có

    Filesystem

    • xfs

    • ext4: Đây là filesystem mặc định được sử dụng cho storage class.

    Virtual IP Subnet

    Bạn có thể chỉ định CIDR subnet mà từ đó một địa chỉ IP không sử dụng được chỉ định làm Control Plane Endpoint. Subnet phải đại diện cho một tập hợp các địa chỉ trong gateway. CIDR tương tự cũng được truyền bá dưới dạng CIDR subnet cho các ingress services trong cluster

    Các trường cài đặt

    Mô tả

    Số lượng Nodes

    • Non-HA: 1

    • HA: 3

    Dung lượng đĩa (GB)

    Tối thiểu là 20 GB

    Sizing Policy

    • TKG medium: Nếu số lượng của Worker node nhỏ hơn hoặc bằng 10 nodes.

    • TKG large​: NNếu số lượng của Worker node lớn hơn 10 nodes.

    Trường

    Mô tả

    Name

    Nhập tên Worker Pool.

    Number of Nodes

    Nhập số lượng node cho Worker Pool.

    Disk Size (GB)

    Dung lượng tối thiểu là 20 GB.

    Trường

    Mô tả

    Select a Storage Profile

    Chọn một Storage Profile có sẵn.

    Storage Class Name

    Tên của Storage Class. Tên phải tuân thủ các quy định sau:

    • Tối đa 63 ký tự.

    • Chỉ chứa ký tự thường, số hoặc dấu gạch ngang (-).

    • Bắt đầu bằng ký tự chữ cái.

    • Kết thúc bằng ký tự chữ hoặc số.

    Reclaim Policy

    • Delete policy: Xóa PersistentVolume khi PersistentVolumeClaim bị xóa.

    • Retain policy: Giữ PersistentVolume khi PersistentVolumeClaim bị xóa (cần reclaim thủ công)..

    Tùy chọn

    Mô tả

    Pods CIDR

    Phạm vi địa chỉ IP sử dụng cho Pods. Mặc định: 100.96.0.0/11 (kích thước tối thiểu: /24).

    Services CIDR

    Phạm vi địa chỉ IP sử dụng cho Services. Mặc định: 100.64.0.0/13..

    Control Plane IP

    Bạn có thể chỉ định địa chỉ IP của chính mình làm control plane endpoint. Nhập địa chỉ IP Public khả dụng từ Gateway hoặc địa chỉ IP nội bộ từ subnet khác.

    Lưu ý: Hiện tại, tính năng liên kết các Cluster với Tanzu Mission Control không được hỗ trợ.

    (Tùy chọn): Nếu cần thêm Worker Node Pool, nhấn Add New Worker Node Pool và cấu hình các trường tương tự.

    Bạn nên nhập một Public IP có sẵn vào Control Plane IP

    Auto Repair on Errors: Nếu lỗi xảy ra trước khi Cluster khả dụng,CSE Server sẽ cố gắng tự động sửa lỗi.

    Node Health Check: Các node không ổn định sẽ được xử lý theo điều kiện và quy tắc khắc phục lỗi.

    Vui lòng cấu hình VPC firewall để cho phép truy cập Control Plane IP qua cổng 6443.

    TKG extra-large: Extra-large VM sizing policy for a Kubernetes cluster node (8 CPU, 32GB memory)

    2. Cách thay đổi kích thước Kubernetes Cluster trên HI GIO Portal

    Tổng quan

    Tài liệu này được sử dụng khi bạn muốn thay đổi kích thước các node của cluster trên HI GIO Cloud (giảm hoặc tăng số lượng node).

    Quy trình

    I. Yêu cầu

    • Bạn đã có một Kubernetes cluster trên HI GIO Cloud.

    • Tài nguyên khả dụng nếu bạn tăng số lượng node.

    • Bạn có quyền quản lý Kubernetes cluster.

    II. Các bước thực hiện

    1

    Bước 1: Đăng nhập vào HI GIO Cloud bằng tài khoản IAM --> Mở vCD Portal --> More --> Kubernetes Container Clusters

    2

    Bước 2: Chọn Node Pool của cluster của bạn.

    Hệ thống sẽ hiển thị thông tin về loại node, số lượng node, và chính sách kích thước (sizing policy)...

    3

    Bước 3: Chọn biểu tượng ở bên cạnh node bạn muốn thay đổi kích thước --> Resize

    4

    Bước 4: Nhập số lượng node bạn muốn thay đổi và nhấn SUBMIT

    Hãy cẩn thận khi thay đổi kích thước của các node pool xuống 0 worker node. Cluster luôn cần có ít nhất 1 worker node đang chạy, nếu không cluster sẽ rơi vào trạng thái lỗi không thể phục hồi.

    5

    Bước 5: Chờ đợi quá trình thay đổi kích thước node hoàn tất.

    6

    Bước 6: Trong tab Monitor, hệ thống sẽ hiển thị nhiều task được cập nhật trên cluster của bạn.

    7

    Bước 7: Khi hoàn tất, số lượng node sẽ hiển thị số lượng node hiện tại/số lượng node mong muốn của bạn.

    8

    Bước 8: Bạn có thể xác minh bằng lệnh bên trong cluster của mình.

    6. Cách cấu hình autoscale Kubernetes Cluster trên HI GIO Portal

    Tổng quan

    Hướng dẫn từng bước về cách cấu hình tự động mở rộng cluster Kubernetes HI GIO.

    • Cài đặt tanzu-cli

    • Tạo cluster-autoscaler deployment từ tanzu package sử dụng tanzu-cli

    • Kích hoạt tự động mở rộng cho cluster của bạn

    • kiểm tra tự động mở rộng cluster

    • Xóa cluster-autoscaler deployment và dọn dẹp tài nguyên thử nghiệm.

    • Bastion Ubuntu có thể kết nối với Kubernetes cluster của bạn.

    • Có quyền truy cập vào Kubernetes cluster của bạn.

    1

    Bước 1: Cài đặt tanzu-cli

    2

    Bước 2: Tạo deployment cluster-autoscaler từ gói tanzu bằng tanzu-cli

    Chuyển sang context Kubernetes của bạn
    • Liệt kê các phiên bản cluster-autoscaler có sẵn trong gói tanzu và ghi lại tên phiên bản

    • Tạo secret kubeconfig có tên cluster-autoscaler-mgmt-config-secret trong namespace kube-system

    • Tạo file cluster-autoscaler-values.yaml

    • Cài đặt cluster-autoscaler

    • Cấu hình số lượng node tối thiểu và tối đa trong cluster

      • Lấy tên và namespace của machinedeployments

    • Cấu hình cluster-api-autoscaler-node-group-min-size and cluster-api-autoscaler-node-group-max-size

    • Bật cluster autoscale cho cluster của bạn

    3

    Bước 3: Kiểm tra tự động mở rộng cluster

    • Lấy số lượng node hiện tại

    kubectl get nodes

    Hiện tại chỉ có một worker node.

    • Tạo file test-autoscale.yaml

    • Áp dụng file test-autoscale.yaml để triển khai 2 replicas nginx pod trong namespace default (lệnh này sẽ kích hoạt tạo một worker node mới)

    • Kiểm tra deployment nginx

    • Chờ một chút và bạn sẽ thấy một worker node mới đã được cấp phát và nginx pod mới có trạng thái Running.

    • Dọn dẹp tài nguyên thử nghiệm

    • Xóa deployment cluster-autoscaler (Tùy chọn)

    #Install tanzu-cli to ubuntu
    sudo apt update
    sudo apt install -y ca-certificates curl gpg
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://storage.googleapis.com/tanzu-cli-installer-packages/keys/TANZU-PACKAGING-GPG-RSA-KEY.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/tanzu-archive-keyring.gpg
    echo "deb [signed-by=/etc/apt/keyrings/tanzu-archive-keyring.gpg] https://storage.googleapis.com/tanzu-cli-installer-packages/apt tanzu-cli-jessie main" | sudo tee /etc/apt/sources.list.d/tanzu.list
    sudo apt update
    sudo apt install -y tanzu-cli
    #Verify tanzu-cli installation
    tanzu version

    Quy trình

    Để cài đặt tanzu-cli trên môi trường khác, tham khảo tài liệu dưới đây:

    Installing and Using VMware Tanzu CLI v1.5.x

    (Tùy chọn) Nếu bạn muốn định cấu hình hoàn thành tanzu, vui lòng chạy lệnh bên dưới và làm theo hướng dẫn đầu ra

    tanzu completion --help

    kubectl config use-context <your context name>
    tanzu package available list cluster-autoscaler.tanzu.vmware.com
    kubectl create secret generic cluster-autoscaler-mgmt-config-secret \
    --from-file=value=<path to your kubeconfig file> \
    -n kube-system
    arguments:
      ignoreDaemonsetsUtilization: true
      maxNodeProvisionTime: 15m
      maxNodesTotal: 0 #Leave this value as 0. We will define the max and min number of nodes later.
      metricsPort: 8085
      scaleDownDelayAfterAdd: 10m
      scaleDownDelayAfterDelete: 10s
      scaleDownDelayAfterFailure: 3m
      scaleDownUnneededTime: 10m
    clusterConfig:
      clusterName: "demo-autoscale-tkg" #adjust here
      clusterNamespace: "demo-autoscale-tkg-ns" #adjust here
    paused: false
    tanzu package install cluster-autoscaler \
    --package cluster-autoscaler.tanzu.vmware.com \
    --version <version available> \ #adjust the version listed above to match your kubernetes version
    --values-file 'cluster-autoscaler-values.yaml' \
    --namespace tkg-system #please do not change, this is default namespace for tanzu package
    kubectl get machinedeployments.cluster.x-k8s.io -A
    kubectl annotate machinedeployment <machinedeployment name> cluster.x-k8s.io/cluster-api-autoscaler-node-group-min-size=<number min> -n <machinedeployment namespace>
    kubectl annotate machinedeployment <machinedeployment name> cluster.x-k8s.io/cluster-api-autoscaler-node-group-max-size=<number max> -n <machinedeployment namespace>

    Không thay đổi tên secret (cluster-autoscaler-mgmt-config-secret) và namespace (kube-system).

    Giá trị bắt buộc:

    • clusterName: Tên cluster của bạn

    Cluster-autoscaler sẽ được triển khai vào namespace kube-system.

    Chạy lệnh dưới đây để xác minh việc triển khai cluster-autoscaler:

    kubectl get deployments.apps -n kube-system cluster-autoscaler

    Vì bước này cần có sự cho phép của nhà cung cấp để thực hiện nên vui lòng thông báo cho cloud provider để thực hiện bước này.

    clusterNamespace: Tên cluster namespace của bạn
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
          topologySpreadConstraints: #Spreads pods across different nodes (ensures no node has more pods than others)
          - maxSkew: 1 
            topologyKey: kubernetes.io/hostname
            whenUnsatisfiable: DoNotSchedule
            labelSelector:
              matchLabels:
                app: nginx
    kubectl apply -f test-autoscale.yaml
    kubectl get pods
    kubectl describe pod nginx-589656b9b5-mcm5j | grep -A 10 Events
    Warning  FailedScheduling  2m53s  default-scheduler   0/2 nodes are available: 1 node(s) didn't match pod topology spread constraints, 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/2 nodes are available: 1 No preemption victims found for incoming pod, 1 Preemption is not helpful for scheduling.
    Normal   TriggeredScaleUp  2m43s  cluster-autoscaler  pod triggered scale-up: [{MachineDeployment/demo-autoscale-tkg-ns/demo-autoscale-tkg-worker-node-pool-1 1->2 (max: 5)}]
    kubectl delete -f test-autoscale.yaml

    Bạn sẽ thấy một nginx pod mới với trạng thái Pending và các sự kiện hiển thị FailedScheduling và TriggeredScaleUp:

    Sau khi xóa deployment nginx thử nghiệm, cluster sẽ chờ vài phút để xóa node không cần thiết (tham khảo giá trị scaleDownUnneededTime trong file cluster-autoscaler-values.yaml).

    Nếu bạn không muốn cluster của mình tự động mở rộng nữa, có thể xóa deployment cluster-autoscaler bằng tanzu-cli:

    tanzu package installed delete cluster-autoscaler -n tkg-system -y