Fleet in Single-Cluster Examples

Jeff Yen
7 min readSep 7, 2024

--

123

整個系統在同一個命名空間(工作空間)中運行。圖中還顯示了資源類型:User(用戶定義)、Fleet(由 Fleet 系統管理)和 Fleet Internal(Fleet 內部使用)。

這個架構似乎是為了實現跨多個集群的 GitOps 工作流,允許從 Git 倉庫管理和部署到多個 Kubernetes 集群。它利用了 Fleet 控制器和代理來協調整個過程,從 bundle 創建到最終的 Helm 部署。

Fleet 是一個可以管理多個 Kubernetes 叢集的解決方案,其採取的是 Manager/Agent 的架構,所以架構中會有一個 Kubernetes 叢集其扮演者 Fleet Manager 的概念,而被管理的 Kubernetes 叢集則是所謂的 Fleet Agent 上圖中的 Fleet Controller Cluster 就是一個擁有 Fleet Manager 的 Kubernetes 叢集

Single/Multi Cluster Style:

Fleet 的官方網站提及兩種不同的部署模式,分別是 Single Cluster Style 以及 Multi Cluster Style Single Cluster Style 主要是測試使用,該架構下會於一個 Kubernetes 叢集中同時安裝 Fleet Agent 與 Fleet Controller,這樣就可以於一個 Kubernetes 叢集中去體驗看看 Rancher Fleet 帶來的基本部署功能。 不過實務上因為會有更多的叢集要管,因此都會採用 Multi Cluster Style,該架構如同上圖所示,會有一個集中的 Kubernetes 叢集作為 Fleet Manager,而所有要被管理的 Kubernetes 叢集都會作為 Fleet Agent.

Single Cluster

helm

fleet.yaml
https://github.com/rancher/fleet-examples/blob/master/single-cluster/helm/fleet.yaml

namespace: fleet-helm-example

# Custom helm options
helm:
# The release name to use. If empty a generated release name will be used
releaseName: guestbook

# The directory of the chart in the repo. Also any valid go-getter supported
# URL can be used there is specify where to download the chart from.
# If repo below is set this value if the chart name in the repo
chart: ""

# An https to a valid Helm repository to download the chart from
repo: ""

# Used if repo is set to look up the version of the chart
version: ""

# Force recreate resource that can not be updated
force: false

# How long for helm to wait for the release to be active. If the value
# is less that or equal to zero, we will not wait in Helm
timeoutSeconds: 0

# Custom values that will be passed as values.yaml to the installation
values:
replicas: 2

一個使用 Helm 的範例。我們將這個 Helm 範例部署到本地叢集。
該repoÍ包含一個 Helm chart 以及一個可選的 fleet.yaml 用來配置部署。

要創建部署,我們將自定義資源應用到上游叢集。fleet-local 命名空間包含本地叢集資源。本地的 fleet-agent 會在 fleet-helm-example 命名空間中創建部署。

kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: helm
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- single-cluster/helm
EOF

Helm & Kustomize

一個使用 Kustomize 修改第三方 Helm chart 的範例。這將部署一個 Kubernetes 的範例 guestbook 應用程式,該應用程式以 Helm chart 打包,並從第三方來源下載,然後使用 Kustomize 修改這個 Helm chart。該應用程式將部署到 fleet-helm-kustomize-example 命名空間。

kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: helm
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- single-cluster/helm-kustomize
EOF

manifests

此範例將部署 Kubernetes 的範例 guestbook 應用程式。該應用程式將部署到 fleet-manifest-example 命名空間。

kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: helm
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- single-cluster/manifests
EOF

Ref:https://www.hwchiu.com/docs/2021/iThome_Challenge/day22

--

--