No menu items!
No menu items!
More

    [Kubernetes] Deploy Prometheus trên cụm Kubernetes sử dụng Kustomize

    Trong bài này này, mình sẽ hướng dẫn bạn cách sử dụng Kustomize với Argo CD để triển khai ứng dụng từ kho lưu trữ Github.

    Đầu tiên bạn hãy tạo 1 kho chứa như hình dưới. Chúng ta sẽ làm việc với thư mục kustomize-prometheus và file application-prometheus.yaml nên các bạn đừng quan tâm đến thư mục và file khác nhé.

    Trong thư mục kustomize-prometheus chúng ta có các file với tên như dưới. Ở thư mục này các bạn đừng quan tâm đến file prometheus.sh nhé vì nó chỉ là file note của mình.

    Dưới đây là nội dung chi tiết các file.

    cat > ./kustomization.yaml << OEF
    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    namePrefix: kustomize-
    
    resources:
    - prometheus-deployment.yaml
    - prometheus-svc.yaml
    - prometheus-ingress.yaml
    OEF

    Chỗ namePrefix với kustomize- sẽ là tên của file tính từ dấu gạch ngang trở về trước, ví dụ kustomize- sẽ map với kustomize-<tên phía sau dấu gạch ngang>

    Chỗ resources sẽ là danh sách các file name được Kustomize thực thi.

    cat > ./prometheus-deployment.yaml << OEF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: prometheus
    spec:
      selector:
        matchLabels:
          run: prometheus
      replicas: 5
      template:
        metadata:
          labels:
            run: prometheus
        spec:
          containers:
            - name: prometheus
              image: prom/prometheus
              ports:
                - containerPort: 9090
    OEF

    Chúng ta sẽ triển khai ứng dụng Prometheus.

    cat > ./prometheus-ingress.yaml << OEF
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: prometheus
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      ingressClassName: nginx
      rules:
        - host: prometheus.hoanghd.fun
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: prometheus
                    port:
                      number: 80
    OEF

    Sử dụng ingress với domain là prometheus.hoanghd.fun

    cat > ./prometheus-svc.yaml << OEF
    apiVersion: v1
    kind: Service
    metadata:
      name: prometheus
      labels:
        run: prometheus
    spec:
      ports:
        - name: prometheus
          port: 80
          targetPort: 9090
      type: LoadBalancer
      selector:
        run: prometheus
    OEF

    Service sử dụng type LoadBalancer (tùy bạn nhé), map port 80.

    cat > ./application-prometheus.yaml << OEF
    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: prometheus-application
      namespace: argocd
    
    spec:
      project: default
    
      source:
        repoURL: https://github.com/hoanghd164/argocd.git
        targetRevision: HEAD
        path: kustomize-prometheus
      destination:
        server: https://kubernetes.default.svc
        namespace: monitor
        
      syncPolicy:
        syncOptions:
        - CreateNamespace=true
        automated:
          selfHeal: true
          prune: true
    OEF
    • Metadata Namespace phải là argocd
    • Source repoURL: là kho lưu trữ file manifest
    • Source Path: là thư mục chứa manifest
    • Source targetRevision: HEAD là thư mục gốc của Source Path
    • Destination Server: là cụm k8s, nơi mà mình cần triển khai ứng dụng lên đó
    • Destination namespace: là namespace ứng dụng

    Sau khi tạo xong file application-prometheus.yaml, chúng ta bắt đầu triển khai ứng dụng bằng command dưới.

    kubectl apply -f ./application-prometheus.yaml

    Triển khai xong, verify lại các thành phần của ứng dụng.

    Hình ảnh cho ta thấy ứng ựng đã được triển khai xong, nhưng vẫn còn tiến trình progressing. Lý do là trong type của service mình đang để LoadBalancer nhưng service chưa được cấp ip address. Ta thấy chỗ external-ip đang pending.

    root@loadbalancer3:~# kubectl get svc -n monitor
    NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    kustomize-prometheus   LoadBalancer   10.97.220.73   pending       80:30557/TCP   8m21s

    Note: Do mình đang sử dụng ingress nên tiến trình progressing trên không ảnh hưởng gì đến ứng dụng nhé hoặc chúng ta có thể fix theo cách dưới đây.

    Tạo ta 1 file cm.yaml như dưới, với 192.168.13.230/28 là dải là ip sẽ được cấp cho dịch vụ.

    cat >  ./cm.yaml << OEF
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: production
      namespace: metallb-system
    spec:
      addresses:
      - 192.168.13.230/28
    OEF

    Chúng ta triển khai nó

    kubectl apply -f ./cm.yaml

    Xác minh lại config map đã được áp dụng thành công.

    root@loadbalancer3:~# kubectl get svc -n monitor
    NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
    kustomize-prometheus   LoadBalancer   10.97.220.73   192.168.13.224   80:30557/TCP   23m

    Như vậy đã có 1 ip address đã được cấp cho service này.

    Trạng thái progressing không còn nữa, quá trình deploy app thành công.

    Truy cập theo domain đã khai báo ở trên ta có kết quả như hình trên.

    kubectl delete -f ./application-prometheus.yaml

    Để xóa app chúng ta có thể xóa namespace để nó tự động xóa hết các thành phần liên quan đến app nhé.

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email