mirror of https://github.com/fluxcd/flux2.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.3 KiB
YAML
126 lines
3.3 KiB
YAML
---
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: credentials-sync
|
|
data:
|
|
# Patch this ConfigMap with additional values needed for your cloud
|
|
KUBE_SECRET: my-registry-token # does not yet exist -- will be created in the same Namespace
|
|
SYNC_PERIOD: "3600" # tokens expire; refresh faster than that
|
|
|
|
---
|
|
# This Deployment frequently fetches registry tokens and applies them as an imagePullSecret.
|
|
# It's done as a 1-replica Deployment rather than a CronJob, because CronJob scheduling can
|
|
# block cluster bootstraps and cold-reboots from obtaining registry tokens for a considerable time.
|
|
# This deployment will immediately fetch a token, which reduces latency for working image updates.
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: credentials-sync
|
|
namespace: flux-system
|
|
spec:
|
|
replicas: 1
|
|
strategy:
|
|
type: Recreate
|
|
template:
|
|
spec:
|
|
serviceAccountName: credentials-sync
|
|
containers:
|
|
- image: busybox # override this with a cloud-specific image
|
|
name: sync
|
|
envFrom:
|
|
- configMapRef:
|
|
name: credentials-sync
|
|
env:
|
|
- name: RECONCILE_SH # override this env var with a shell function in a kustomize patch
|
|
value: |-
|
|
reconcile() {
|
|
echo reconciling...
|
|
}
|
|
command:
|
|
- bash
|
|
- -ceu
|
|
- |-
|
|
# template reconcile() into the script
|
|
# env var is expanded by k8s before the pod starts
|
|
$(RECONCILE_SH)
|
|
|
|
apply-secret() {
|
|
/kbin/kubectl create secret docker-registry "$1" \
|
|
--docker-password="$2" \
|
|
--docker-username="$3" \
|
|
--docker-server="$4" \
|
|
--dry-run=client -o=yaml \
|
|
| grep -v "creationTimestamp:" \
|
|
| /kbin/kubectl apply -f -
|
|
}
|
|
|
|
pause_loop() {
|
|
sleep "$SYNC_PERIOD" || true
|
|
}
|
|
|
|
graceful_exit() {
|
|
echo "Trapped signal -- $(date)"
|
|
job_ids="$(
|
|
jobs \
|
|
| grep "pause_loop" \
|
|
| cut -d] -f1 \
|
|
| tr [ %
|
|
)"
|
|
# shellcheck disable=SC2086
|
|
if [ "$job_ids" ]; then
|
|
kill $job_ids
|
|
fi
|
|
wait
|
|
echo "Graceful exit -- $(date)"
|
|
}
|
|
|
|
trap graceful_exit INT TERM
|
|
|
|
echo "Loop started (period: $SYNC_PERIOD s) -- $(date)"
|
|
while true; do
|
|
reconcile & wait $!
|
|
pause_loop & wait $!
|
|
done
|
|
resources: {}
|
|
|
|
|
|
# RBAC necessary for our Deployment to apply our imagePullSecret
|
|
---
|
|
kind: Role
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
metadata:
|
|
name: credentials-sync
|
|
namespace: flux-system
|
|
rules:
|
|
- apiGroups: [""]
|
|
resources:
|
|
- secrets
|
|
verbs:
|
|
- get
|
|
- create
|
|
- update
|
|
- patch
|
|
# # Lock this down to the specific Secret name (Optional)
|
|
#resourceNames:
|
|
#- $(KUBE_SECRET) # templated from kustomize vars referencing ConfigMap, also see kustomizeconfig.yaml
|
|
---
|
|
kind: RoleBinding
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
metadata:
|
|
name: credentials-sync
|
|
namespace: flux-system
|
|
subjects:
|
|
- kind: ServiceAccount
|
|
name: credentials-sync
|
|
roleRef:
|
|
kind: Role
|
|
name: credentials-sync
|
|
apiGroup: rbac.authorization.k8s.io
|
|
---
|
|
apiVersion: v1
|
|
kind: ServiceAccount
|
|
metadata:
|
|
name: credentials-sync
|
|
namespace: flux-system
|