במדריך הזה נסביר איך להוסיף אפליקציה חדשה, לפתח תכונה לאפליקציה ולפרוס את האפליקציה לסביבת ייצור באמצעות טכניקות מודרניות של אינטגרציה רציפה (CI) ופיתוח רציף (CD) עם Google Kubernetes Engine (GKE).
המסמך הזה הוא חלק מסדרה:
- CI/CD מודרני עם GKE: מסגרת להכנת תוכנה להפצה
- CI/CD מודרני עם GKE: בניית מערכת CI/CD (ארכיטקטורת עזר)
- CI/CD מודרני עם GKE: יישום תהליך העבודה של המפתחים (המסמך הזה)
במדריך הזה משתמשים בכלים כמו Skaffold, kustomize, Artifact Registry, סנכרון תצורות, Cloud Build ו-Cloud Deploy כדי לפתח, לבנות ולפרוס את האפליקציה.
המסמך הזה מיועד לאדריכלים ארגוניים ולמפתחי אפליקציות, וגם לצוותי אבטחת IT, DevOps ו-Site Reliability Engineering (SRE). כדי להבין את המושגים שמוסברים במסמך הזה, כדאי שיהיה לכם ניסיון מסוים עם כלים ותהליכים אוטומטיים לפריסה.
ארכיטקטורה
במדריך הזה נסביר איך להוסיף אפליקציה חדשה. לאחר מכן, מפתחים תכונה חדשה ומפעילים את האפליקציה בסביבות פיתוח, Staging וייצור. ארכיטקטורת העזר מכילה את התשתית והכלים שנדרשים להטמעה ולפרסום של אפליקציה חדשה באמצעות תהליך העבודה שמוצג בדיאגרמה הבאה:
החל ממאגר הקוד של CI, תהליך העבודה כולל את השלבים הבאים:
אתם משתפים את קוד המקור של האפליקציה דרך מאגרי האפליקציות שלכם.
כשמבצעים commit ודחיפה של הקוד למאגר האפליקציות, מופעל אוטומטית צינור CI ב-Cloud Build. תהליך ה-CI יוצר קובץ אימג' של קונטיינר ומעביר אותו בדחיפה ל-Artifact Registry.
תהליך ה-CI יוצר גם מהדורת CD לאפליקציה ב-Cloud Deploy.
הגרסה של ה-CD יוצרת מניפסטים של Kubernetes שעברו עיבוד מלא לפיתוח באמצעות
skaffoldופורסת אותם באשכול GKE לפיתוח.לאחר מכן, הגרסה של ה-CD מקודמת מ-dev ליעד staging, שמייצר מניפסטים של staging שעברו רינדור מלא ומפיץ אותם באשכול GKE של staging.
לאחר מכן, הגרסה של CD מקודמת מסביבת staging לסביבת הייצור, מה שיוצר מניפסטים של ייצור שעברו רינדור מלא ופורס אותם באשכולות GKE של הייצור.
מידע נוסף על הכלים והתשתית שמשמשים בתהליך העבודה הזה זמין במאמר Modern CI/CD with GKE: Build a CI/CD system (מודרניזציה של CI/CD עם GKE: בניית מערכת CI/CD).
מטרות
הוספת אפליקציה חדשה.
פורסים את האפליקציה בסביבת הפיתוח.
מפתחים תכונה חדשה ומפרסים אותה בסביבת הפיתוח.
מקדמים את התכונה החדשה לסביבת הבדיקה ואז משיקים אותה בסביבת הייצור.
בודקים את החוסן של האפליקציה.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אפשר להשתמש במחשבון התמחור.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- במדריך הזה, נשתמש בארכיטקטורת העזר שמופיעה בסדרה הזו.
הכנת הסביבה
אם אתם ממשיכים ישירות מהמאמר מודרניזציה של CI/CD באמצעות GKE: בניית מערכת CI/CD, אתם יכולים לעבור לקטע הבא. אבל אם יש לכם סשן חדש או שהסשן שלכם פג, אתם צריכים לפתוח את Cloud Shell ולהגדיר את הפרויקט שבו התקנתם את התשתית של ארכיטקטורת ההפניה:
gcloud config set core/project PROJECT_ID
מחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud .
הצטרפות של אפליקציה חדשה
ארכיטקטורת ההפניה מכילה מפעל אפליקציות. המפעל הזה הוא אוסף של מאגר Git בשם application-factory-repo והטריגרים הבאים של Cloud Build:
create-apptf-plantf-applycreate-team
אתם משתמשים במפעל האפליקציות כדי להוסיף אפליקציה חדשה ממאגרי קוד התחלתיים. תהליך ההעברה של אפליקציה כולל את השלבים הבאים:
יצירת הגדרת האפליקציה: יוצרים את הגדרת האפליקציה בקובץ Terraform ושומרים אותה ב-
application-factory-repo, שמשמש כקטלוג אפליקציות.יצירת תשתית האפליקציה: מריצים את Terraform בקובץ הגדרת האפליקציה כדי ליצור את תשתית האפליקציה. תשתית האפליקציה כוללת את הרכיבים הבאים:
אזור נחיתה לאפליקציה החדשה כולל הגדרה של מרחב השמות, חשבון השירות ומדיניות הבסיס במאגר
acm-gke-infrastructure-repo. אזור הנחיתה נוצר רק באשכול GKE לפיתוח בזמן צירוף אפליקציה חדשה. הפעולה הזו מתבצעת כדי לאפשר למפתחים להשתמש בסביבת הפיתוח ולהתחיל לבצע בה איטרציות. אזור הנחיתה באשכולות של סביבת הבדיקה וסביבת הייצור נוצר בגישת GitOps. בהמשך המסמך מוסבר איך להשתמש בגישה הזו כשמוכנים לקדם את הגרסה באשכולות האלה.מאגר התשתית מתוך מאגר התשתית להתחלה שמארח את הקוד ליצירת צינור ה-CI ב-Cloud Build, צינור ה-CD ב-Cloud Deploy ומאגר Artifact Registry לאחסון ארטיפקטים.
טריגר של Cloud Build לתשתית, שמקבל את הקוד במאגר התשתית ויוצר את המשאבים על סמך ההגדרה שלהם.
מאגר אפליקציות ממאגר התחלת האפליקציות שמארח את קוד המקור של האפליקציה.
יצירת משאבי CI/CD של האפליקציה: אתם משתמשים בתשתית האפליקציה כדי ליצור משאבי CI/CD לאפליקציה.
יוצרים הגדרה של אפליקציה:
מריצים את הטריגר create-app כדי ליצור קובץ הגדרת אפליקציה ב-application-factory-repo. קובץ ההגדרה מכיל את ההגדרה הדקלרטיבית של המשאבים שנדרשים ליצירת אפליקציה.
במסוף Google Cloud , נכנסים לדף Cloud Build:
לוחצים על
create-apptrigger (טריגר).לוחצים על הצגת תצוגה מקדימה של כתובת ה-URL כדי להציג את כתובת ה-URL שנדרשת להפעלת ה-webhook.
ב-Cloud Shell, מפעילים את הטריגר על ידי שליחת בקשת curl לכתובת ה-URL שהתקבלה בשלב הקודם והעברת הפרמטרים כמטען ייעודי (payload) אליה.
curl "WEBHOOK_URL" -d '{"message": {"app": "sample","runtime": "python","trigger_type": "webhook","github_team": ""}}'
בדוגמת הקוד הקודמת:
מחליפים את
WEBHOOK_URLבכתובת ה-URL שהתקבלה מהטריגר.
"app": "sample"מציין את שם האפליקציה.
"runtime": "python"אומר למפעל האפליקציות להשתמש בתבנית Python כדי ליצור מאגרי אפליקציות.
"trigger_type": "webhook"מציין את הסוג של צינורות CI/CD לאפליקציה.
"github_team": ""הוא צוות ב-GitHub שישויך למאגרים שייווצרו עבור האפליקציה. מכיוון שעדיין לא יצרת צוות ב-GitHub, צריך להעביר אותו כמחרוזת ריקה.
בודקים את צינור עיבוד הנתונים כדי לראות אם יש טריגר
create-app:כניסה לדף Cloud Build History.
יש צינור חדש לטריגר
create-app. אחרי שהתהליך מסתיים, הגדרת האפליקציה נוצרת ב-application-factory-repo.בודקים את קובץ הגדרת האפליקציה:
בדפדפן אינטרנט, עוברים אל GitHub ונכנסים לחשבון.
לוחצים על סמל התמונה ואז על
Your organizations. בוחרים את הארגון.לוחצים על המאגר
application-factory-repo, עוברים לתיקייהapps/pythonופותחים את הקובץ החדש שנקראsample.tfשנוצר על ידי הטריגרcreate-app. בודקים את הקובץ. הקובץ הזה מכיל קוד Terraform ליצירת אפליקציה חדשה.
יצירת תשתית לאפליקציה:
אחרי שיוצרים את הגדרת האפליקציה, מפעילים את הטריגר tf-apply כדי ליצור את התשתית של האפליקציה.
במסוף Google Cloud :
לוחצים על הטריגר
tf-apply.לוחצים על 'הצגת תצוגה מקדימה של כתובת ה-URL' כדי להציג את כתובת ה-URL שנדרשת להפעלת ה-webhook.
מפעילים את הטריגר:
curl "WEBHOOK_URL" -d '{}'
בדוגמת הקוד הקודמת:
- מחליפים את
WEBHOOK_URLבכתובת ה-URL שהתקבלה מהטריגר.
- מחליפים את
בודקים את צינור עיבוד הנתונים כדי לראות אם יש טריגר
tf-apply:כניסה לדף Cloud Build History.
יש צינור חדש לטריגר
tf-apply. מחכים לסיום.
הטריגר הזה יוצר את תשתית האפליקציה.
בודקים את תשתית האפליקציה:
בודקים את הרכיבים השונים של תשתית האפליקציה.
אזור נחיתה
נכנסים ל-Cloud Shell ומגדירים את הפרויקט.
gcloud config set core/project PROJECT_ID
מחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud .קבלת פרטי כניסה לאשכול GKE לפיתוח.
gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-aבודקים את מרחב השמות של האפליקציה. מרחב השמות נקרא על שם האפליקציה, sample.
kubectl get namespaces sampleהפלט אמור להיראות כך:
NAME STATUS AGE sample Active 15m
בודקים את חשבון השירות במרחב השמות.
kubectl get serviceaccounts -n sampleיש חשבון שירות בנוסף לחשבון שמוגדר כברירת מחדל. הפלט אמור להיראות כך:
NAME SECRETS AGE default 0 15m sample-ksa 0 15m
מאגר תשתית
בדפדפן אינטרנט, עוברים אל GitHub ונכנסים לחשבון. לוחצים על סמל התמונה. אחר כך לוחצים על Your organizations. בוחרים את הארגון ולוחצים על מאגר sample-infra.
מאגר המידע הזה כולל ארבעה ענפים: cicd-trigger, dev, staging ו-prod. הוא מכיל גם ארבע תיקיות: cicd-trigger, dev, staging ו-prod. הענף שמוגדר כברירת מחדל הוא cicd-trigger, ואפשר לדחוף אליו את הקוד. לענפים אחרים יש כללי הגנה, ולכן אי אפשר לדחוף קוד ישירות לענפים האלה. כדי להעביר את הקוד לענפים האלה, צריך ליצור בקשת משיכה. התיקייה cicd-trigger מכילה קוד ליצירת משאבי CI/CD לאפליקציה, והתיקיות dev, staging ו-prod מכילות קוד ליצירת תשתית לסביבות שונות של האפליקציה.
טריגר תשתית
במסוף Google Cloud :
יש טריגר חדש בשם
deploy-infra-sample.הטריגר הזה מחובר למאגר
sample-infraכך שכאשר מתבצעת העברת קוד למאגר הזה, הטריגר מופעל ומזהה את הענף שבו התבצעה ההעברה, עובר לתיקייה המתאימה בענף הזה ומריץ שם את Terraform. לדוגמה, אם הקוד נדחף להסתעפותcicd-trigger, הטריגר מפעיל את Terraform בתיקייה cicd-trigger של ההסתעפות cicd-trigger. באופן דומה, כשמתבצעת דחיפה לענףdev, הטריגר מפעיל את Terraform בתיקיית הפיתוח של ענף הפיתוח וכן הלאה.
מאגר אפליקציות
- עוברים אל GitHub ומציגים את המאגרים שמופיעים מתחת לארגון. נוצר מאגר חדש בשם
sample. מאגר המידע הזה מארח את קוד המקור ואת השלבים לבניית קונטיינרים ב-Dockerfile, הגדרותkustomizeשמתארות את ההגדרות הנדרשות של האפליקציה ו-skaffold.yamlשמגדיר את שלבי הפריסה שבהם Cloud Deploy ישתמש ל-CD.
יצירת משאבי CI/CD לאפליקציה
אחרי שיוצרים את השלד של האפליקציה, מריצים את הטריגר deploy-infra-sample כדי ליצור את משאבי ה-CI/CD שלה. אפשר להפעיל את הטריגר באופן ידני באמצעות כתובת ה-URL של ה-webhook שלו, או לבצע פעולת Commit במאגר git sample-infra.
כדי להפעיל את הטריגר לפיתוח גרסת Build של Cloud, מוסיפים שורה חדשה לקובץ במאגר. אחר כך דוחפים את השינויים:
אם עדיין לא השתמשתם ב-Git ב-Cloud Shell, תצטרכו להגדיר את Git עם השם וכתובת האימייל שלכם. המידע הזה ישמש את Git לזיהוי כשאתם יוצרים התחייבויות ב-Cloud Shell:
git config --global user.email "GITHUB_EMAIL_ADDRESS" git config --global user.name "GITHUB_USERNAME"
מחליפים את מה שכתוב בשדות הבאים:
-
GITHUB_EMAIL_ADDRESS: כתובת האימייל שמשויכת לחשבון GitHub שלכם -
GITHUB_USERNAME: שם המשתמש שמשויך לחשבון GitHub
-
משכפלים את מאגר ה-Git
sample-infra:git clone https://github.com/GITHUB_ORG/sample-infra cd sample-infra
מחליפים את מה שכתוב בשדות הבאים:
-
GITHUB_ORGבארגון שלכם ב-GitHub.
הענף cicd-trigger שמוגדר כברירת מחדל נבדק.
-
מוסיפים שורה חדשה לקובץ env/cicd-trigger/main.tf, מבצעים קומיט לשינוי ודוחפים אותו.
echo "" >> env/cicd-trigger/main.tfשומרים ודוחפים את השינויים:
git add . git commit -m "A dummy commit to invoke the infrastrucutre trigger" git push cd ..ברגע שהשינויים נדחפים, מופעל הטריגר
deploy-infra-sampleשל Cloud Deploy.
עוקבים אחרי הסטטוס של הטריגר:
נכנסים לדף ההיסטוריה של Cloud Build כדי לראות את הצינור וממתינים להשלמתו.
בדיקת משאבי CICD של אפליקציות
בודקים את המשאבים השונים של CI/CD שנוצרו עבור האפליקציה.
במסוף Google Cloud :
נכנסים לדף Cloud Build ומציגים את טריגר
deploy-app-sample.זוהי ההפעלה של צינור ה-CI. הוא מחובר למאגר קוד האפליקציה
sample. הטריגר מופעל כשמתבצעת שליחה למאגר האפליקציות, ומבצע את שלבי הבנייה כפי שהוגדרו בהגדרת הטריגר. כדי לראות את השלבים שהטריגר מבצע כשהוא מופעל, לוחצים על שם הטריגר ואז על הלחצן OPEN EDITOR (פתיחת הכלי לעריכה).עוברים לדף Artifact Registry ורואים את המאגר החדש עם השם
sample.מאגר ה-Artifact הזה מאחסן את פריטי המידע שנוצרו בתהליך פיתוח (Artifact) של האפליקציה.
עוברים לדף של צינור העברת הנתונים של Cloud Deploy ומציגים את צינור העברת הנתונים עם השם
sample. זהו צינור עיבוד הנתונים לפריסה רציפה (CD) שפורס את האפליקציה באשכולות GKE.
פריסת האפליקציה בסביבת הפיתוח
הטריגר deploy-app-sample מחובר למאגר האפליקציות שנקרא sample. אפשר להפעיל את הטריגר באופן ידני באמצעות כתובת ה-URL של ה-webhook, או באמצעות שליחה למאגר האפליקציות.
מוסיפים שורה חדשה לקובץ במאגר
sampleומבצעים push של השינויים כדי להפעיל את הטריגר לפיתוח גרסת Build של Cloud Build:משכפלים את מאגר ה-Git
sample:ב-Cloud Shell:
git clone https://github.com/GITHUB_ORG/sample cd sample
מחליפים את
GITHUB_ORGבארגון GitHub שלכם.מוסיפים שורה חדשה לקובץ
skaffold.yaml.echo "" >> skaffold.yamlשומרים ודוחפים את השינויים:
git add . git commit -m "A dummy commit to invoke CI/CD trigger" git pushברגע שהשינויים נדחפים, מופעל הטריגר
deploy-app-sampleשל Cloud Deploy.
עוקבים אחרי הסטטוס של הטריגר:
נכנסים לדף ההיסטוריה של Cloud Build כדי לראות את הצינור וממתינים להשלמתו.
הטריגר מפעיל את השלבים שמוגדרים בהגדרות שלו. השלב הראשון הוא ליצור קובץ אימג' של Docker מקוד האפליקציה במאגר
sample. השלב האחרון הוא להפעיל את צינור עיבוד הנתונים של Cloud Deploy שפורס את האפליקציה באשכול GKE של הפיתוח.בודקים את הפריסה באשכול הפיתוח:
כניסה לדף Cloud Deploy pipeline.
לוחצים על
sampleצינור עיבוד הנתונים. הפריסה באשכול GKE לפיתוח מתחילה. מחכים לסיום.
מוודאים שהאפליקציה נפרסה בהצלחה :
קבלת פרטי כניסה לאשכול הפיתוח.
gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-aמנהור לאשכול GKE.
gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080בסרגל הכלים של Cloud Shell, לוחצים על
תצוגה מקדימה באינטרנט, ואז לוחצים על תצוגה מקדימה ביציאה 8080:
הפלט שיתקבל:
Hello World!
ב-Cloud Shell, מקישים על
CTRL+Cכדי לסיים את העברת היציאה.
הוספת תכונה חדשה לאפליקציה
כשמפתחים תכונה חדשה, צריך לפרוס במהירות את השינויים בסביבת הפיתוח כדי לבדוק אותם ולבצע בהם איטרציה. במדריך הזה, תבצעו שינויים במאגר קוד האפליקציה ותפרוסו אותם בסביבת הפיתוח.
ב-Cloud Shell, משנים את הספרייה למאגר
sampleשכבר שוכפל:מעדכנים את האפליקציה כך שתציג הודעה אחרת:
sed -i "s/Hello World/My new feature/g" main.pyשומרים ודוחפים את השינויים:
git add . git commit -m "Changed the message" git pushברגע שהקוד מועבר למאגר ב-GitHub, מופעל טריגר ה-webhook
deploy-app-sample.עוקבים אחרי הסטטוס של הטריגר בדף ההיסטוריה של Cloud Build ומחכים לסיום.
כניסה לדף Cloud Deploy pipeline
לוחצים על
sampleצינור עיבוד הנתונים. הפריסה באשכול GKE לפיתוח מתחילה. מחכים לסיום.
מוודאים שהאפליקציה נפרסה בהצלחה :
אם פתחתם Cloud Shell חדש, מקבלים פרטי כניסה לאשכול הפיתוח:
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-aמנהור לאשכול GKE:
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080בסרגל הכלים של Cloud Shell, לוחצים על
Web Preview, ואז לוחצים על Preview on port 8080:
הפלט שיתקבל:
My new feature!
ב-Cloud Shell, מקישים על
CTRL+Cכדי לסיים את העברת היציאה.
קידום השינוי לאשכולות של סביבת הבדיקה וסביבת הייצור
לפני שמקדמים את האפליקציה לסביבות Staging וייצור, צריך ליצור את אזור הנחיתה של האפליקציה באשכולות GKE עבור הסביבות האלה. כשצירופתם את האפליקציה, אזור הנחיתה לפיתוח נוצר אוטומטית באשכול GKE לפיתוח על ידי הוספת קוד ל-acm-gke-infrastructure-repo בענף הפיתוח.
יצירת אזור נחיתה באשכולות GKE של סביבת פיתוח וסביבת ייצור
יצירת אזור נחיתה באשכול GKE של סביבת Staging: צריך ליצור בקשת משיכה (pull request) מענף הפיתוח לענף Staging ב-
acm-gke-infrastructure-repoולמזג אותה.עוברים אל המאגר
acm-gke-infrastructure-repoב-GitHub. לוחצים על הלחצןPull requestsואז על הלחצןNew pull request. בתפריט Base (בסיס), בוחרים באפשרות staging (סביבת ביניים), ובתפריט Compare (השוואה), בוחרים באפשרות dev (פיתוח). לוחצים על הלחצןCreate pull request.בדרך כלל, מישהו שיש לו גישה למאגר בודק את השינויים ואז ממזג את בקשת משיכת השינויים כדי לוודא שרק השינויים הרצויים מועברים לסביבת הבדיקה. כדי לאפשר לאנשים פרטיים לנסות את ארכיטקטורת ההפניה, הקלנו על כללי ההגנה על ההסתעפות כך שמנהל המאגר יוכל לעקוף את הבדיקה ולמזג את ה-PR. אם יש לכם הרשאת אדמין במאגר, אתם יכולים למזג את בקשת המשיכה. אפשרות אחרת היא לבקש מהאדמין למזג את החשבון.
סנכרון תצורות מסנכרן את השינויים שמגיעים לענף ההכנה של המאגר
acm-gke-infrastructure-repoעם אשכול GKE של ההכנה, וכתוצאה מכך נוצר אזור נחיתה לאפליקציה באשכול GKE של ההכנה.יצירת אזור נחיתה באשכולות GKE בסביבת הייצור: צריך ליצור בקשת משיכה מענף ההכנה לענף הייצור ולמזג אותה.
לוחצים על הלחצן
Pull requestsואז על הלחצןNew pull request. בתפריט Base (בסיס), בוחרים באפשרות prod (ייצור), ובתפריט Compare (השוואה), בוחרים באפשרות staging (העלאה לבמה). לוחצים על הלחצןCreate pull request.אם יש לכם הרשאת אדמין במאגר, אתם יכולים למזג את בקשת המשיכה. אפשרות אחרת היא לבקש מהאדמין למזג את החשבון.
הכלי Config Sync מסנכרן את השינויים שמגיעים לענף prod של מאגר
acm-gke-infrastructure-repoעם אשכולות GKE בסביבת הייצור, וכתוצאה מכך נוצר אזור נחיתה לאפליקציה באשכולות GKE בסביבת הייצור.
העברת השינויים מסביבת הפיתוח לסביבת הביניים
אחרי שיצרתם את אזור הנחיתה של האפליקציה באשכולות GKE של סביבות הבמה והייצור, מקדמים את האפליקציה מסביבת הפיתוח לסביבת הבמה.
מאתרים את השם של הגרסה האחרונה ושומרים אותו כמשתנה סביבה:
export RELEASE=$(gcloud deploy targets describe dev --region=us-central1 --format="json" | jq -r '."Active Pipeline"[0]."projects/PROJECT_ID/locations/us-central1/deliveryPipelines/sample"."Latest release"' | awk -F '/' '{print $NF}')
מחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud .מוודאים שמשתנה הסביבה הוגדר:
echo $RELEASE
ב-Cloud Shell, מריצים את הפקודה הבאה כדי להפעיל את הקידום של הגרסה מסביבת הפיתוח לסביבת הבדיקה:
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=staging --quiet
בדיקת הפריסה בסביבת פיתוח:
כניסה לדף Cloud Deploy pipeline
לוחצים על צינור
sample, הפריסה לאשכול GKE של סביבת הבדיקה מתחילה. מחכים לסיום.מוודאים שהפריסה בסביבת הבדיקה התבצעה בהצלחה:
קבלת פרטי כניסה לאשכול ההכנה:
gcloud container clusters get-credentials gke-staging-us-central1 --location us-central1-aמנהור לאשכול GKE:
gcloud container clusters get-credentials gke-staging-us-central1 --location us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080בסרגל הכלים של Cloud Shell, לוחצים על
Web Preview, ואז לוחצים על Preview on port 8080:
הפלט שיתקבל:
My new feature!
ב-Cloud Shell, מקישים על
CTRL+Cכדי לסיים את העברת היציאה.
העברת השינויים מסביבת הבדיקה לסביבת הייצור
עכשיו מקדמים את הגרסה מ-staging ל-prod. יש לכם שני אשכולות של ייצור ול-Cloud Deploy יש יעד לכל אחד מהם בשם prod1 ו-prod2 בהתאמה.
ב-Cloud Shell, מריצים את הפקודה הבאה כדי להפעיל את הקידום של הגרסה מהסביבה הזמנית לאשכול prod1:
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=prod1 --quiet
הפצה לאשכולות של סביבת הייצור דורשת אישור, ולכן ההשקה מתבצעת רק אחרי שתאשרו אותה. כדי לראות אותו:
כניסה לדף Cloud Deploy pipeline
לוחצים על
sampleצינור. ההשקה ל-prod1 דורשת אישור, וצריך את התפקיד clouddeploy.approver כדי לאשר את ההשקה. כיוון שאתם הבעלים של הפרויקט, יש לכם גישה לאישור ההפצה.מאשרים את השחרור ל-prod1:
מריצים את הפקודה הבאה כדי לאחזר את השם של ההשקה בהדרגה שממתינה לאישור ולשמור אותו במשתנה סביבה:
export ROLLOUT=$(gcloud deploy targets describe prod1 --region=us-central1 --format="json" | jq -r '."Pending Approvals"[]' | awk -F '/' '{print $NF}')
מאשרים את ההפצה:
gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
אחרי האישור, מתחילה ההפצה של prod1. אפשר לעקוב אחר ההתקדמות בדף צינור עיבוד הנתונים של Cloud Deploy.
אחרי שפריסת prod1 תושלם, מתחילים את פרסום prod2.
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=prod2 --quiet
גם הפצה ל-prod2 דורשת אישור. מאשרים את השחרור לאשכול prod2:
מריצים את הפקודה הבאה כדי לאחזר את השם של ההשקה בהדרגה שממתינה לאישור ולשמור אותו במשתנה סביבה:
export ROLLOUT=$(gcloud deploy targets describe prod2 --region=us-central1 --format="json" | jq -r '."Pending Approvals"[]' | awk -F '/' '{print $NF}')
מאשרים את ההפצה:
gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
אחרי האישור, מתחילה ההפצה של prod2. אפשר לעקוב אחר ההתקדמות בדף צינור עיבוד הנתונים של Cloud Deploy.
אחרי שצינורות Cloud Deploy ב-prod1 וב-prod2 מסתיימים, צריך לוודא שהפריסה באשכול הייצור בוצעה בהצלחה.
נוצר Multi Cluster Ingress באשכולות הייצור, ואתם משתמשים במאזן עומסים כדי לגשת לאפליקציית הייצור. ההגדרות האלה של Multi Cluster Ingress נוצרות באמצעות קובצי YAML k8s/prod/mci.yaml ו-k8s/prod/mcs.yaml במאגר
sample. כששולחים בקשה לכתובת ה-IP של מאזן העומסים, Multi Cluster Ingress מעבירה את הבקשה לאחד משני המופעים של האפליקציה שפועלים בשני אשכולות GKE שונים.מציגים את כלל ההעברה שמשויך למאזן העומסים כדי למצוא את כתובת ה-IP.
gcloud compute forwarding-rules list
הפלט אמור להיראות כך:
NAME: mci-qqxs9x-fw-sample-sample-ingress REGION: IP_ADDRESS: 34.36.123.118 IP_PROTOCOL: TCP TARGET: mci-qqxs9x-sample-sample-ingress
פותחים דפדפן אינטרנט ומזינים את הכתובת הבאה בכתובת ה-URL:
http://IP_ADDRESS:80
מחליפים את
IP_ADDRESSבכתובת ה-IP של מאזן העומסים.הפלט שיתקבל:
My new feature!
כך מאשרים שהאפליקציה נפרסה כמו שצריך באשכולות הייצור.
בדיקת עמידות האפליקציה
בקטע הזה בודקים את עמידות האפליקציה שפועלת בסביבת הייצור על ידי הפעלה מחדש של אחד משני הצמתים של אשכולות GKE בסביבת הייצור, בלי להשפיע על האפליקציה.
האפליקציה בסביבת הייצור משתמשת ב-ingress מרובה-אשכולות ונגישה דרך כתובת IP של מאזן עומסים. כשניגשים לאפליקציה דרך כתובת ה-IP הזו, תוסף ה-Ingress של כמה אשכולות מנתב אותה לאחד משני המקרים של האפליקציה שפועלת בשני אשכולות GKE שונים. אם אחד מאשכולות GKE לא תקין ואי אפשר להגיע למופע האפליקציה שפועל בו, שער הכניסה מרובה האשכולות ממשיך לשלוח את התנועה למופע התקין של האפליקציה שפועל באשכול GKE השני. כך הפסקת הפעולה של האשכול לא נראית למשתמש הקצה, והאפליקציה ממשיכה לטפל בבקשות.
כדי לבדוק את החוסן:
מאתרים את מאגר הצמתים של אשכולות GKE בסביבת הייצור שפועלים באזור us-west1.
gcloud container clusters describe gke-prod-us-west1 --location=us-west1-a --format=json | jq ".nodePools[0].instanceGroupUrls[]" | tr '"' ' ' | awk -F '/' '{for(i=NF-2; i<=NF; i=i+2) printf ("%s ",$i); print ""}'
הפלט אמור להיראות כך:
us-west1-b gke-gke-prod-us-west1-node-pool-01-6ad4e1ed-grp us-west1-c gke-gke-prod-us-west1-node-pool-01-98407373-grp
הפלט כולל שתי עמודות. העמודה הראשונה היא האזור והעמודה השנייה היא השם של קבוצת המופעים שמשויכת למאגר הצמתים של אשכול GKE בסביבת הייצור באזור us-west1.
מפעילים מחדש את קבוצת המכונות שמתאימה למאגרי הצמתים:
gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_1 --zone=ZONE_1 --max-unavailable=100% gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_2 --zone=ZONE_2 --max-unavailable=100%
מחליפים את
INSTANCE_GROUP_1בשם של קבוצת המכונות הראשונה.מחליפים את
ZONE_1באזור של קבוצת המכונות הראשונה.מחליפים את
INSTANCE_GROUP_2בשם של קבוצת המכונות השנייה.מחליפים את
ZONE_2באזור של קבוצת המכונות השנייה.בודקים את הסטטוס של קבוצת המופעים.
שתי קבוצות המופעים מופעלות מחדש, ולקבוצות האחרות יש סימן וי ירוק.
פותחים דפדפן אינטרנט ומזינים את הכתובת הבאה בכתובת ה-URL:
http://IP_ADDRESS:80
מחליפים את
IP_ADDRESSבכתובת ה-IP של מאזן העומסים.גם אם אחד משני אשכולות ה-GKE מושבת, האפליקציה זמינה והפלט הוא:
My new feature!
הנתון הזה מצביע על כך שהאפליקציה עמידה ועם זמינות גבוהה.
ניהול האפליקציה
כשיוצרים את האפליקציה הזו מתוך מפעל האפליקציות, מקבלים מאגרי git נפרדים, תשתית וצינורות CI/CD לאפליקציה. השתמשתם במשאבים האלה כדי לפרוס את האפליקציה ולהוסיף תכונה חדשה. כדי להמשיך לנהל את האפליקציה, צריך רק ליצור אינטראקציה עם מאגרי ה-Git ועם צינור הנתונים, בלי לעדכן את מפעל האפליקציות. אתם יכולים להתאים אישית את צינורות הנתונים ואת מאגרי ה-Git של האפליקציה בהתאם לדרישות שלכם. בעלי האפליקציה יכולים להגדיר למי תהיה גישה לצינורות ולמאגרי ה-Git של האפליקציה כדי לנהל אותה.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה.
מחיקת הפרויקט
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
המאמרים הבאים
- שיטות מומלצות להגדרת איחוד שירותי אימות הזהות
- מומלץ לקרוא את המאמר Kubernetes והאתגרים של פריסת תוכנה רציפה.
- מידע נוסף על דפוסי מעקב ורישום ביומן בענן היברידי ומרובה עננים
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.