CI/CD DevOps

Hướng dẫn cài đặt FluxCD

FluxCD

Mở đầu

FluxCD là một công cụ mạnh mẽ trong hệ sinh thái GitOps, giúp tự động hóa việc triển khai và quản lý cấu hình cho các cụm Kubernetes. Trong thời đại công nghệ phát triển nhanh như hiện nay, việc duy trì sự ổn định và nhất quán giữa mã nguồn và môi trường triển khai là điều hết sức quan trọng.

Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết từng bước cài đặt FluxCD, từ việc chuẩn bị môi trường cho đến quá trình bootstrap và kiểm tra hệ thống.

Hãy cùng khám phá cách thức tận dụng FluxCD để tối ưu hóa quy trình triển khai và quản lý cụm Kubernetes một cách hiệu quả!

GitOps đang dần trở nên phổ biến trong cloud native space. Trong bài đăng trên blog này, chúng ta sẽ đi qua các mục như sau:

  • Cách bắt đầu với Flux
  • Cài đặt Starboard Helm Chart thông qua best practicest của GitOps
  • Quản lý application thông qua Flux
  • Thiết lập thông báo và giám sát với Flux

GitOps & Fluxcd là gì

Trước hết, chúng ta cần thiết lập bối cảnh. GitOps đã tồn tại được một thời gian và bản thân quy trình này không nhất thiết phải mới. Tuy nhiên, điều mới là các công cụ có thể được sử dụng để quản lý quy trình làm việc GitOps của bạn; cụ thể là ArgoCD và FluxCD.

Sử dụng bất kỳ công cụ cloud native nào, chỉ vì mục đích sử dụng nó sẽ phản tác dụng rất nhiều, vì các ứng dụng cloud native cần rất nhiều sự quan tâm. Bạn không thể chỉ triển khai rồi quên chúng đi. Vậy tại sao bạn lại muốn bắt đầu với GitOps và Fluxcd ngay từ đầu?

Trường hợp sử dụng GitOps

Có hai trường hợp chính mà tôi thấy việc áp dụng các biện pháp thực hành tốt nhất của GitOps là rất hữu ích:

Trong một đội nhóm lớn

Nếu bạn đang làm việc trong một nhóm lớn, bạn không muốn cấp cho mọi người quyền truy cập vào tài nguyên Kubernetes của mình và quản lý các lần deploy. Thay vào đó, bạn có thể liên kết một công cụ GitOps như Fluxcd hoặc ArgoCD với một trong các kho lưu trữ của mình.

Bất cứ khi nào có thay đổi trong manifests Kubernetes của bạn hoặc nhánh được chỉ định, các công cụ GitOps sẽ chịu trách nhiệm đẩy bản cập nhật lên cụm Kubernetes của bạn.

Với tư cách cá nhân hoặc hợp tác với một số người

Nhiều lần, việc sử dụng các cloud native tools để quản lý triển khai được coi là quá mức cần thiết. Tuy nhiên, nếu bạn có một ứng dụng có tính linh hoạt cao, mà bạn muốn quản lý lâu dài, thì việc quản lý quy trình cập nhật tự động là vô cùng hữu ích, điều này có thể thực hiện thông qua ArgoCD hoặc Flux. Nó sẽ cung cấp cho bạn thông tin chi tiết hơn về các triển khai của mình.

Nếu bạn muốn tìm hiểu thêm về các chi tiết cụ thể của Flux, GitOps và quy trình đối chiếu, tôi thực sự khuyên bạn nên tham khảo  tài liệu về Flux.

Sơ đồ Fluxcd

PS. Tài liệu giải thích rất toàn diện với sơ đồ luồng người dùng. Ví dụ, sơ đồ sau phác thảo cách flux lấy các bản cập nhật từ Git.

Bắt đầu với Flux

Flux  là một dự án của CNCF. Trong phần này, tôi sẽ chỉ cho bạn cách bắt đầu với Flux.

Đầu tiên, chúng ta sẽ cài đặt Flux

brew install fluxcd/tap/flux

Để biết các phương pháp cài đặt khác, vui lòng tham khảo  tài liệu Flux.

Tiếp theo, chúng ta muốn thêm  lệnh bash-completion  vào hồ sơ thiết bị đầu cuối của mình:

. <(flux completion bash)

Hãy đảm bảo bạn có thông tin đăng nhập Git:

export GITHUB_TOKEN=<your-token>
export GITHUB_USER=<your-username>

Bạn có thể tìm thấy mã thông báo trong đường dẫn sau  https://github.com/settings/tokens

Tiếp theo, hãy đảm bảo rằng bạn có quyền truy cập vào cụm Kubernetes của mình thông qua CLI. Tôi thường chỉ kiểm tra xem mình có quyền truy cập vào các nút hay không:

kubectl get nodes

Sau đó, hãy kiểm tra xem cụm của bạn có tương thích và sẵn sàng cho Flux không:

flux check --pre

Tiếp theo, chúng ta muốn cài đặt Flux vào cụm Kubernetes của mình, điều này được thực hiện bằng lệnh khởi động Flux:

flux bootstrap github \\
  --owner=$GITHUB_USER \\
  --repository=flux-example \\
  --branch=main \\
  --path=./clusters/my-cluster \\
  --personal

Thao tác này sẽ tạo một không gian tên bên trong cụm Kubernetes của bạn, nơi tất cả các tài nguyên Flux sẽ được cài đặt. Ngoài ra, một  kho lưu trữ Git  sẽ được tạo trong tài khoản được liên kết của bạn.

Bộ công cụ Flux

“Flux được xây dựng bằng các thành phần của GitOps Toolkit, đây là một tập hợp các

  • công cụ chuyên dụng và Bộ điều khiển Flux
  • API có thể cấu hình
  • các gói Go có thể tái sử dụng cho GitOps theo  tổ chức GitHub fluxcd

để xây dựng Giao hàng liên tục trên Kubernetes.” (Nguồn: Trích từ tài liệu Flux)

Dưới đây là sơ đồ nêu bật cách thức mọi thứ hoạt động cùng nhau:

Cài đặt Starboard Helm Chart thông qua Flux

Bình luận nhanh: 1 điều tôi thực sự thích về tài liệu Flux là nó sẽ chỉ cho bạn cách  known way thực hiện mọi thứ — ví dụ, nếu bạn muốn triển khai Biểu đồ Helm, bạn có thể sẽ biết cách triển khai Biểu đồ Helm mà không cần Flux.

Vì vậy, họ chỉ cho bạn phần đó trước VÀ SAU ĐÓ họ chỉ cho bạn  the new way cách triển khai Biểu đồ Helm với Flux. Theo cách này, họ xây dựng trên các lược đồ đã có sẵn của bạn.

Đầu tiên, chúng ta cần tạo namespace cho Starboard

kubectl create ns starboard-system

Sau đó, chúng ta sử dụng ứng dụng Flux client bên dưới, không phải ứng dụng client Helm — ứng dụng client Helm chỉ được cung cấp để tham khảo trong trường hợp bạn muốn triển khai Biểu đồ Helm khác.

client Helm:

helm install starboard-operator aqua/starboard-operator \\
  --namespace starboard-system \\
  --create-namespace \\
  --set="trivy.ignoreUnfixed=true" \\
  --version 0.10.3

client Flux:

flux create source helm starboard-operator --url <https://aquasecurity.github.io/helm-charts> --namespace starboard-system
flux create helmrelease starboard-operator --chart starboard-operator **\\**
  --source HelmRepository/starboard-operator **\\**
  --chart-version 0.10.3 **\\**
  --namespace starboard-system

Tuy nhiên, chúng ta cũng có thể cài đặt Starboard thông qua Flux bằng cách triển khai các manifests Kubernetes sau:


apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
  name: starboard-operator
  namespace: flux-system
spec:
  interval: 1m0s
  url: <https://aquasecurity.github.io/helm-charts/>

---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: starboard-operator
  namespace: starboard-system
spec:
  chart:
    spec:
      chart: starboard-operator
      sourceRef:
        kind: HelmRepository
        name: starboard-operator
				namespace: flux-system
      version: 0.10.3
  interval: 1m0s

và sau đó chúng ta có thể áp dụng manifest thông qua kubectl:

kubectl apply -f helm-starboard.yaml

Tiếp theo, chúng ta sẽ triển khai một Ứng dụng thông qua Flux mà Starboard Operator của chúng ta sẽ giám sát.

Tạo ứng dụng thông qua Flux

Tương tự như cách chúng ta cài đặt ứng dụng thông qua ArgoCD, chúng ta có thể yêu cầu Flux quản lý ứng dụng của mình. Điều này có thể được thực hiện thông qua một số tùy chọn, tuy nhiên, trong bài đăng trên blog này, tôi sẽ chỉ cho bạn cách bắt buộc và cách khai báo.

Cách khai báo

Cách bắt buộc để yêu cầu Flux cài đặt tài nguyên của chúng ta là thông qua lệnh bootstrap:

apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: GitRepository
metadata:
  name: react-app
  namespace: flux-system
spec:
  interval: 1m
  url: <https://github.com/AnaisUrlichs/react-article-display>
  ref:
    branch: main
  ignore: |
    # exclude all
    /*
    # include charts directory
    !/manifests/
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
  name: react-app
  namespace: flux-system
spec:
  interval: 5m0s
  path: ./manifests
  prune: true
  sourceRef:
    kind: GitRepository
    name: react-app
  targetNamespace: app

Sau đó, tệp kê khai YAML này có thể được triển khai giống như bất kỳ tài nguyên Kubernetes nào khác:

kubectl apply -f ./application.yaml

declarative way

Theo cách bắt buộc, trước tiên chúng ta sẽ thiết lập kho lưu trữ cho Flux:

flux create source git react \\
    --url=https://github.com/AnaisUrlichs/react-article-display \\
    --branch=main

và sau đó chúng ta sẽ triển khai ứng dụng bằng cách cho Flux biết đường dẫn đến manifest Kubernetes của chúng ta bên trong kho lưu trữ và cách chúng ta muốn Flux quản lý kho lưu trữ:

flux create kustomization react-app \\
  --target-namespace=app \\
  --source=react \\
  --path="./manifests" \\
  --prune=true \\
  --interval=5m \\

Sau khi thiết lập, Starboard sẽ liên tục quét ứng dụng và tất cả các tài nguyên liên quan đến Flux để tìm lỗ hổng:

Trong trường hợp ứng dụng của tôi, chỉ có một lỗ hổng cao. Điều này giúp tôi tự tin hơn khi sử dụng Flux.

Thiết lập cảnh báo với Flux

Trong phần này, chúng ta muốn thiết lập cảnh báo về việc triển khai trên Slack:

Đầu tiên, chúng ta sẽ phải tạo một bí mật với webhook Slack của mình:

kubectl -n flux-system create secret generic slack-url \\
--from-literal=address=https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK

Bạn có thể tìm thấy Slack Webhook trong cài đặt API của Kênh Slack.

Sau đó, chúng ta sẽ thiết lập nhà cung cấp thông báo:

apiVersion: notification.toolkit.fluxcd.io/v1beta1
kind: Provider
metadata:
  name: slack
  namespace: flux-system
spec:
  type: slack
  channel: general
  secretRef:
    name: slack-url

và áp dụng nó vào cụm Kubernetes của chúng tôi:

kubectl apply -f notification-provider.yaml

Và sau đó triển khai Alert. Đầu tiên, lưu nội dung sau vào một tệp riêng:

apiVersion: notification.toolkit.fluxcd.io/v1beta1
  kind: Alert
  metadata:
    generation: 2
    name: helm-info
    namespace: flux-system
  spec:
    providerRef:
      name: slack
    eventSeverity: info
    eventSources:
    - kind: HelmRepository
      name: podinfo
    - kind: HelmChart
      name: default-podinfo
    - kind: HelmRelease
      name: podinfo
      namespace: default

Sau khi đã cam kết với Git, chúng ta có thể thông báo cho Flux về điều đó thông qua lệnh sau:

kubectl apply -f alert.yaml

Bây giờ, chúng ta sẽ thực hiện thay đổi đối với kho lưu trữ ứng dụng được liên kết và xem liệu Flux có phát hiện ra thay đổi và thực hiện cập nhật phù hợp hay không, đồng thời liệu Flux có thông báo cho chúng ta về thay đổi đó hay không.

Ôi trời ơi, nó hoạt động rồi, nó chỉ cập nhật ảnh container của tôi mà không cần tôi phải động vào bất cứ thứ gì:

Sau đây là chính sách cập nhật trong  Kustomization tài nguyên của tôi:

Sau đây là danh sách các sự kiện từ cuộc đối chiếu:

Báo cáo lỗ hổng cho Ứng dụng của tôi — tức là cho hình ảnh container cũ và mới:

Sau đây là các loại vỏ mới:

VÀ đây là thông báo trên Slack:

kết luận

Qua bài viết này, chúng ta đã cùng nhau khám phá quy trình cài đặt FluxCD từ khâu chuẩn bị môi trường đến bước bootstrap và kiểm tra hệ thống. Việc áp dụng FluxCD không chỉ giúp tự động hóa quy trình triển khai mà còn đảm bảo tính nhất quán giữa mã nguồn và môi trường Kubernetes.

Hy vọng với hướng dẫn chi tiết này, bạn có thể nhanh chóng triển khai và tận dụng được các tính năng mạnh mẽ của FluxCD để cải thiện quy trình vận hành hệ thống. Đừng ngần ngại thử nghiệm, tìm hiểu sâu hơn và áp dụng vào thực tiễn để đạt hiệu quả tối ưu cho dự án của mình. Chúc bạn thành công!

FluxCD là gì? Hướng dẫn chi tiết về GitOps với FluxCD

Add Comment

Click here to post a comment