123
Image reflector and automation controllers
image-reflector-controller
和 image-automation-controller
共同協作,當有新的容器映像可用時,會更新 Git 存儲庫。
image-reflector-controller
會掃描映像存儲庫,並將映像元數據反映到 Kubernetes 資源中。image-automation-controller
會根據最新掃描到的映像更新 YAML 文件,並將變更提交到指定的 Git 存儲庫。
Image Policies
ImagePolicies
API 定義了從 ImageRepositories
選擇“最新”映像的規則。
SemVer
SemVer 政策將所有標籤解釋為 SemVer 版本,並選擇符合給定 SemVer 約束條件的最高版本。該約束條件設置在 .spec.policy.semver.range
字段中。
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: podinfo
spec:
imageRepositoryRef:
name: podinfo
policy:
semver:
range: '>=1.0.0'
Alphabetical
字母順序政策(Alphabetical policy)會在所有標籤按字母順序排序後選擇最後一個標籤(無論是升序還是降序)。排序順序設置在 .spec.policy.alphabetical.order
字段中。該值可以是 asc
(升序)或 desc
(降序)。預設值為 asc
。
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: podinfo
spec:
imageRepositoryRef:
name: podinfo
policy:
alphabetical:
order: asc
Numerical
數值政策(Numerical policy)會在所有標籤按數值順序排序後選擇最後一個標籤(無論是升序還是降序)。排序順序設置在 .spec.policy.numerical.order
字段中。該值可以是 asc
(升序)或 desc
(降序)。預設值為 asc
。
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: podinfo
spec:
imageRepositoryRef:
name: podinfo
policy:
numerical:
order: asc
Filter Tags
.spec.filterTags.extract
是一個可選字段,用於從匹配的標籤中提取一個值,並將其提供給政策規則,而不是使用原始標籤。如果未指定,則會使用與模式匹配的標籤本身。
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: podinfo
spec:
imageRepositoryRef:
name: podinfo
filterTags:
pattern: '.*-rc.*'
policy:
semver:
range: '^1.x-0'
選擇最新發行版本(標記為 RELEASE.<RFC3339-TIMESTAMP>)的示例(字母順序):
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: minio
spec:
imageRepositoryRef:
name: minio
filterTags:
pattern: '^RELEASE\.(?P<timestamp>.*)Z$'
extract: '$timestamp'
policy:
alphabetical:
order: asc
Image Update Automations
ImageUpdateAutomation
API 定義了一個自動化過程,該過程會基於同一命名空間中的 ImagePolicy
對象來更新 Git 存儲庫。
更新的過程是通過在每個 YAML 文件中標記需要更新的字段來進行的。對於每個被標記的字段,自動化過程會檢查所命名的映像政策,如果有新的映像被該政策選中,則會更新該字段的值。標記格式可參考映像自動化指南中的說明。
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: podinfo
namespace: default
spec:
interval: 5m0s
url: https://github.com/stefanprodan/podinfo
ref:
branch: master
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
name: podinfo
namespace: default
spec:
image: ghcr.io/stefanprodan/podinfo
interval: 5h
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: podinfo-policy
namespace: default
spec:
imageRepositoryRef:
name: podinfo
policy:
semver:
range: 5.0.x
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageUpdateAutomation
metadata:
name: podinfo-update
namespace: default
spec:
interval: 30m
sourceRef:
kind: GitRepository
name: podinfo
git:
commit:
author:
email: fluxcdbot@users.noreply.github.com
name: fluxcdbot
push:
branch: main
update:
path: ./
在上述範例中:
- GitRepository 名為
podinfo
:由GitRepository.metadata.name
字段指示。假設位於https://github.com/fluxcd/example
的 Git 存儲庫包含帶有映像政策標記的 YAML 文件,如映像自動化指南中所描述,以便進行更新。 - ImageRepository 名為
podinfo
:由ImageRepository.metadata.name
字段指示。這個資源會掃描一個映像存儲庫中的所有標籤。 - ImagePolicy 名為
podinfo-policy
:由ImagePolicy.metadata.name
字段指示。 - ImageUpdateAutomation 名為
podinfo-update
:由ImageUpdateAutomation.metadata.name
字段指示。 - ImagePolicy 參考
podinfo
ImageRepository:用於查詢與映像相關的所有標籤,這一點由ImagePolicy.spec.imageRepositoryRef
指示。這些標籤隨後會根據政策規則進行評估,以選擇帶有最新標籤的映像,這一點由ImagePolicy.spec.policy
指示。 - ImageUpdateAutomation 參考
podinfo
GitRepository:該存儲庫作為需要保持最新的來源,由ImageUpdateAutomation.spec.sourceRef
指示。 - image-automation-controller 列出
ImageUpdateAutomation
所在命名空間中的所有 ImagePolicies。然後檢出 Git 存儲庫的主分支,這一點由GitRepository.spec.ref.branch
配置。接著,控制器會從 Git 存儲庫的根目錄中依次檢查 YAML 清單,這一點由ImageUpdateAutomation.spec.update.path
配置,並基於映像政策中的最新映像進行更新。更新後的更改將以 Git 提交的方式保存,提交作者由ImageUpdateAutomation.spec.git.commit.author
定義。提交隨後被推送到遠程 Git 存儲庫的主分支,這一點由ImageUpdateAutomation.spec.git.push.branch
指示。 - commit hash 記錄在
ImageUpdateAutomation.status.lastPushCommit
字段中,而推送時間記錄在.status.lastPushTime
字段中。
Flux optional components
因為這裡會使用fluxCD很多客制的CRDs,flux bootstrap
命令會在 flux-system
命名空間中部署一系列 Kubernetes 控制器,並附帶它們的 CRDs(自定義資源定義)、RBAC(角色基於訪問控制)和網路策略。
默認情況下,flux bootstrap
和 flux install
命令都不包含任何額外的組件。
flux bootstrap git \
--components-extra image-reflector-controller,image-automation-controller
上面只是範例,要依照不同的git變更
flux bootstrap github \
--token-auth \
--owner=jeff51419 \
--repository=fleet-infra \
--branch=main \
--path=clusters/my-cluster \
--components-extra image-reflector-controller,image-automation-controller \
--personal
在套用之前寫好的範本
kubectl apply -f imageupdateautomation.yaml
kubectl get imageupdateautomation
kubectl describe imageupdateautomation podinfo-update