בדף הזה מוסבר איך לסנכרן תרשימי Helm מ-Artifact Registry על ידי יצירה של תרשים Helm והעברה שלו למאגר ב-Artifact Registry. הוא מכיל גם הגדרת דוגמה לסנכרון תרשים ממאגר Helm.
אתם יכולים להגדיר את סנכרון תצורות כך שיסנכרן ממאגרי Helm.
אפשר לאחסן תרשימי Helm ב-Artifact Registry, שהוא מאגר Helm המומלץ ל- Google Cloud. כדי להשתמש בתכונה הזו, צריך להפעיל את ממשקי ה-API של RootSync ו-RepoSync.
סנכרון תצורות מעבד תרשימי Helm באמצעות helm template, ולכן הוא לא תומך בניהול מלא של מחזור החיים של Helm.
גרסאות Helm ו-Kustomize שצורפו מפרט את גרסאות Kustomize ו-Helm שצורפו לגרסה המתאימה של סנכרון תצורות.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של GKE, סנכרון תצורות ו-Artifact Registry:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable container.googleapis.com
anthosconfigmanagement.googleapis.com artifactregistry.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של GKE, סנכרון תצורות ו-Artifact Registry:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable container.googleapis.com
anthosconfigmanagement.googleapis.com artifactregistry.googleapis.com - ליצור אשכול שעומד בדרישות של סנכרון תצורות או לקבל גישה לאשכול כזה, ולוודא שהוא פועל בגרסה העדכנית של סנכרון תצורות.
- מתקינים את
nomosCLI או משדרגים אותו לגרסה העדכנית. - מתקינים את Helm 3.8.0 ואילך. בגרסאות קודמות של Helm, התמיכה בתרשימים בפורמט OCI היא תכונה ניסיונית.
- מפעילים איחוד זהויות של עומסי עבודה ל-GKE באשכול.
מגבלות
אי אפשר לשנות שדה בלתי ניתן לשינוי בהגדרה רק על ידי שינוי הערך במקור האמת. אם צריך לעדכן שדה שלא ניתן לשינוי, קודם מבצעים את השינוי במקור האמת, ואז מוחקים ידנית את האובייקט באשכול. לאחר מכן, סנכרון תצורות יכול ליצור מחדש את האובייקט עם הערך החדש של השדה.
תרשימי ה-Helm הבאים כוללים משימות ולא מומלצים לפריסה על ידי סנכרון תצורות:
מידע נוסף על הסיבות לכך שלא מומלץ להשתמש ב-Jobs עם סנכרון תצורות זמין במאמר למה לא מומלץ לנהל Jobs באמצעות סנכרון תצורות.
יצירת מאגר Artifact Registry
בקטע הזה, יוצרים מאגר ב-Artifact Registry. מידע נוסף על יצירת מאגרי Artifact Registry זמין במאמר יצירת מאגרים.
מפעילים את Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_IDיוצרים מאגר Artifact Registry:
gcloud artifacts repositories create AR_REPO_NAME \ --repository-format=docker \ --location=AR_REGION \ --description="Config Sync Helm repo" \ --project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט של הארגון. -
AR_REPO_NAME: מזהה המאגר. -
AR_REGION: המיקום האזורי או הרב-אזורי של המאגר.
משתנים שנעשה בהם שימוש בקטעים הבאים:
-
FLEET_HOST_PROJECT_ID: אם אתם משתמשים באיחוד זהויות של עומסי עבודה ל-GKE, הערך הזה זהה לערך שלPROJECT_ID. אם אתם משתמשים באיחוד זהויות של עומסי עבודה ל-GKE, זהו מזהה הפרויקט של ה-Fleet שהאשכול רשום בו. -
GSA_NAME: השם של חשבון השירות המותאם אישית של Google שרוצים להשתמש בו כדי להתחבר ל-Artifact Registry. -
KSA_NAME: חשבון השירות של Kubernetes עבור ה-reconciler.- אם שם המאגר
RootSyncהואroot-sync, מוסיפיםroot-reconcilerלמאגרי הבסיס. אחרת, מוסיפים אתroot-reconciler-ROOT_SYNC_NAME. - אם שם מאגר מרחב השמות הוא
RepoSync, צריך להוסיףns-reconciler-NAMESPACE.repo-syncאחרת, מוסיפיםns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTHכאשרREPO_SYNC_NAME_LENGTHהוא מספר התווים ב-REPO_SYNC_NAME.
- אם שם המאגר
מתן הרשאת קריאה
כדי להשתמש בחשבון שירות של Kubernetes לאימות ב-Artifact Registry, מבצעים את השלבים הבאים:
מקצים את תפקיד הקורא ב-Artifact Registry (roles/artifactregistry.reader) ב-IAM לחשבון השירות ב-Kubernetes שיש לו מאגר של איחוד זהויות של עומסי עבודה ל-GKE:
gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
--location=AR_REGION \
--member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
--role=roles/artifactregistry.reader \
--project=PROJECT_ID
דחיפת תרשים Helm למאגר Artifact Registry
בקטע הזה מורידים תרשים Helm ציבורי ומעבירים אותו בדחיפה ל-Artifact Registry.
שולפים את חבילת
mysql-9.3.1.tgzממאגר Helm הציבורי ומורידים אותה באופן מקומי:helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1אימות באמצעות טוקן גישה:
Linux / macOS
gcloud auth print-access-token | helm registry login -u oauth2accesstoken \ --password-stdin https://AR_REGION-docker.pkg.devWindows
gcloud auth print-access-token ya29.8QEQIfY_... helm registry login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \ https://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAMEבפקודה הזו,
oauth2accesstokenהוא שם המשתמש שבו צריך להשתמש כשמבצעים אימות באמצעות טוקן גישה, ו-gcloud auth print-access-tokenהיא הפקודה לקבלת טוקן הגישה. אסימון הגישה הוא הסיסמה לאימות. אימות באמצעות טוקן גישה הוא שיטת האימות הבטוחה ביותר.מעלים את תרשים Helm ל-Artifact Registry:
helm push mysql-9.3.1.tgz oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME
הגדרת סנכרון תצורות לסנכרון מתרשים Helm
בקטע הזה, יוצרים אובייקט RootSync ומגדירים את סנכרון תצורות לסנכרון מתרשים Helm.
אם רוצים לשנות את ערכי ברירת המחדל של תרשים Helm, אפשר לעשות זאת על ידי ציון ערכים בשדה spec.helm.values או על ידי הוספת הפניה ל-ConfigMap באמצעות השדה spec.helm.valuesFileRefs. מידע נוסף על השדות האופציונליים זמין במאמר הגדרות למאגר Helm.
ערכים
יוצרים אובייקט RootSync עם שם ייחודי:
cat <<EOF>> ROOT_SYNC_NAME.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured sourceType: helm helm: repo: oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME chart: mysql version: 9.3.1 releaseName: my-mysql namespace: test auth: k8sserviceaccount # Use the optional field spec.helm.values to override default values. # You can use the same format as the default values file to override # default values. values: image: pullPolicy: Always primary: resources: limits: cpu: 250m memory: 256Mi requests: cpu: 250m memory: 256Mi EOFמחליפים את
ROOT_SYNC_NAMEבשם של אובייקט RootSync. השם צריך להיות ייחודי באשכול ולא יכול להכיל יותר מ-26 תווים. אם התקנתם את סנכרון תצורות באמצעות Google Cloud המסוף או Google Cloud CLI, צריך לבחור שם אחר במקוםroot-sync.בדוגמה הזו, תרשים ה-Helm נפרס במרחב השמות
testכי המשאבים שלו מכיליםnamespace: {{ .Release.Namespace }}בתבניות שלו.אפשר להשתמש ב-
helm.valuesכדי לשנות את ערכי ברירת המחדל. מידע על השדות האופציונליים זמין במאמר הגדרות למאגר Helm.מחילים את אובייקט RootSync:
kubectl apply -f ROOT_SYNC_NAME.yamlמוודאים ש-Config Sync מסנכרן מהתמונה:
nomos status --contexts=$(kubectl config current-context)הפלט אמור להיראות כך:
Connecting to clusters... *cluster-name -------------------- <root>:root-sync oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/mysql:9.3.1 SYNCED 9.3.1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH default configmap/my-mysql Current 9.3.1 default secret/my-mysql Current 9.3.1 default service/my-mysql Current 9.3.1 default service/my-mysql-headless Current 9.3.1 default serviceaccount/my-mysql Current 9.3.1 default statefulset.apps/my-mysql Current 9.3.1סיימתם לסנכרן את תרשים Helm עם האשכול.
valuesFileRefs
יוצרים אובייקט RootSync עם שם ייחודי:
cat <<EOF>> ROOT_SYNC_NAME.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured sourceType: helm helm: repo: oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME chart: mysql version: 9.3.1 releaseName: my-mysql auth: k8sserviceaccount # use the optional field spec.helm.valuesFilesRefs to override default values # by referencing a ConfigMap valuesFileRefs: - name: CONFIGMAP_NAME dataKey: DATA_KEY EOFמחליפים את מה שכתוב בשדות הבאים:
-
ROOT_SYNC_NAME: השם של אובייקט RootSync. השם צריך להיות ייחודי באשכול ולא יכול להכיל יותר מ-26 תווים. אם התקנתם את סנכרון תצורות באמצעות המסוף Google Cloud או Google Cloud CLI, צריך לבחור שם אחר במקוםroot-sync. -
CONFIGMAP_NAME: השם של ה-ConfigMap. זה יכול להיות כל שם תקין של ConfigMap שמתקבל על ידי Kubernetes ושייחודי באשכול שלכם. - (optional)
DATA_KEY: מפתח הנתונים ב-ConfigMap שרוצים לקרוא ממנו את הערכים. ערך ברירת המחדל הואvalues.yaml.
-
יוצרים את אובייקט ConfigMap עם הערכים שלכם:
cat <<EOF>> CONFIGMAP_NAME.yaml apiVersion: v1 kind: ConfigMap metadata: name: CONFIGMAP_NAME namespace: config-management-system immutable: true # You can use the same format as the default values file to override # default values. data: DATA_KEY: |- image: pullPolicy: Always primary: resources: limits: cpu: 250m memory: 256Mi requests: cpu: 250m memory: 256Mi EOFאם לא ציינתם ערך למאפיין
DATA_KEYב-RootSync, הערך צריך להיות ברירת המחדלvalues.yaml.מחילים את אובייקט ConfigMap:
kubectl apply -f CONFIGMAP_NAME.yamlמחילים את אובייקט RootSync:
kubectl apply -f ROOT_SYNC_NAME.yamlמוודאים ש-Config Sync מסנכרן מהתמונה:
nomos status --contexts=$(kubectl config current-context)הפלט אמור להיראות כך:
Connecting to clusters... *cluster-name -------------------- <root>:root-sync oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/mysql:9.3.1 SYNCED 9.3.1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH default configmap/my-mysql Current 9.3.1 default secret/my-mysql Current 9.3.1 default service/my-mysql Current 9.3.1 default service/my-mysql-headless Current 9.3.1 default serviceaccount/my-mysql Current 9.3.1 default statefulset.apps/my-mysql Current 9.3.1סיימתם לסנכרן את תרשים Helm עם האשכול.
אפשר גם לעיין ב-
imagePullPolicyבאחד מהמשאבים המסונכרנים באשכול כדי לוודא שהערכים מ-ConfigMap שימשו לעיבוד התרשים:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicyמכיוון ש-ConfigMap הוא בלתי ניתן לשינוי, כדי לשנות את הערכים צריך ליצור ConfigMap חדש ולעדכן את
spec.helm.valuesFileRefsבמפרט של RootSync או RepoSync כך שיצביע על ה-ConfigMap החדש. יצירת ConfigMap חדש מבטיחה ששינויים בערכים יגרמו לתרשים Helm לעבור עיבוד מחדש. זה שימושי כשצריך לעדכן כמה ConfigMap שמופיעים ב-spec.helm.valuesFileRefsבו-זמנית במהלך העיבוד מחדש. כדי לשנות את הערכים שמשמשים לעיבוד התרשים, יוצרים ConfigMap חדש עם שם אחר:cat <<EOF>> CONFIGMAP_NAME-2.yaml apiVersion: v1 kind: ConfigMap metadata: name: CONFIGMAP_NAME-2 namespace: config-management-system immutable: true # You can use the same format as the default values file to override # default values. data: DATA_KEY: |- image: pullPolicy: Never primary: resources: limits: cpu: 100m memory: 256Mi requests: cpu: 250m memory: 200Mi EOFמעדכנים את אובייקט RootSync כך שיפנה אל ConfigMap החדש:
cat <<EOF>> ROOT_SYNC_NAME.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured sourceType: helm helm: repo: oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME chart: mysql version: 9.3.1 releaseName: my-mysql namespace: test auth: k8sserviceaccount # use the optional field spec.helm.valuesFilesRefs to override default values # by referencing a ConfigMap valuesFileRefs: - name: CONFIGMAP_NAME-2 dataKey: DATA_KEY EOFמחילים את אובייקט ConfigMap:
kubectl apply -f CONFIGMAP_NAME-2.yamlמחילים את אובייקט RootSync:
kubectl apply -f ROOT_SYNC_NAME.yamlמוודאים ש-Config Sync מסנכרן מהתמונה:
nomos status --contexts=$(kubectl config current-context)אפשר גם לעיין ב-
imagePullPolicyבאחד מהמשאבים המסונכרנים באשכול כדי לוודא שהערכים החדשים מ-ConfigMap המעודכן שימשו לעיבוד התרשים:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy