במדריך הזה נסביר איך להגדיר פריסה של WordPress עם עותק יחיד ב-Google Kubernetes Engine (GKE) באמצעות מסד נתונים של MySQL. במקום להתקין את MySQL, משתמשים ב-Cloud SQL, שמספק גרסה מנוהלת של MySQL. WordPress משתמשת בPersistentVolumes (PV) ובPersistentVolumeClaims (PVC) כדי לאחסן נתונים.
נפח אחסון קבוע (PV) הוא ייצוג של נפח אחסון באשכול שהוקצה על ידי אדמין, או שהוקצה באופן דינמי על ידי Kubernetes, כדי למלא בקשה שבוצעה בבקשת נפח אחסון קבוע (PVC). בקשת PVC היא בקשה לאחסון של סוג אחסון מסוים שנשלחת על ידי משתמש, ואפשר למלא אותה באמצעות PV. נפחים מתמידים (PV) ותביעות לנפחים מתמידים (PVC) הם בלתי תלויים במחזור החיים של Pod, והם שומרים על הנתונים גם אחרי הפעלה מחדש, תזמון מחדש ואפילו מחיקה של Pod. WordPress משתמש ב-Persistent Disk כאחסון לגיבוי של ה-PV.
רקע
WordPress הוא כלי לניהול בלוגים שמשתמש במסד נתונים רלציוני כדי לאחסן את המאמרים בבלוג ואת האובייקטים והמטא-נתונים שקשורים אליהם, ובמערכת הקבצים המקומית כדי לאחסן נכסים, כמו תמונות בפוסט בבלוג. במדריך הזה נעשה שימוש בקובץ אימג' של Docker הרשמית של WordPress מ-Docker Hub.
באופן כללי, מערכת קבצים בסיסית של קונטיינר לא מתאימה לאחסון נתונים קבועים. המאגרים שמופעלים ב-GKE הם בדרך כלל ישויות זמניות, ומנהל האשכול יכול למחוק, להוציא או לתזמן מחדש מאגרים שלא זמינים בגלל כשלים בצמתים או מסיבות אחרות. כשצמתים נכשלים, כל הנתונים שנשמרו במערכת קבצי הבסיס של מאגר נתונים הולכים לאיבוד.
שימוש ב-PV שמגובה על ידי Persistent Disk מאפשר לכם לאחסן את נתוני פלטפורמת WordPress מחוץ לקונטיינרים. כך, גם אם מאגרי התגים נמחקים, הנתונים שלהם נשמרים. בשימוש בסוג אחסון (storage class) שמוגדר כברירת מחדל, ה-Persistent Disk (ומכאן גם הנתונים) לא עובר עם ה-Pod אם ה-Pod מתוזמן מחדש לצומת אחר. יש כמה דרכים להעביר את הנתונים, אבל זה לא נושא המדריך הזה. מידע נוסף זמין במאמר בנושא כרכים קבועים עם Persistent Disk.
ב-WordPress נדרש PV לאחסון נתונים. במדריך הזה משתמשים בסוג אחסון שמוגדר כברירת מחדל כדי ליצור באופן דינמי Persistent Disk וליצור PVC לפריסה.
מטרות
- יוצרים אשכול GKE.
- יוצרים PV ו-PVC שמגובים על ידי דיסק אחסון מתמיד (persistent disk).
- יוצרים מכונה של Cloud SQL ל-MySQL.
- פורסים את WordPress.
- מגדירים את הבלוג ב-WordPress.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
- ב-Cloud Shell, מפעילים את GKE ואת Cloud SQL Admin APIs:
gcloud services enable container.googleapis.com sqladmin.googleapis.com
הגדרת הסביבה
ב-Cloud Shell, מגדירים את אזור ברירת המחדל ל-Google Cloud CLI:
gcloud config set compute/region region
מחליפים את מה שכתוב בשדות הבאים:
-
region: בוחרים את האזור שהכי קרוב אליכם. מידע נוסף זמין במאמר אזורים ותחומים.
-
מגדירים את משתנה הסביבה
PROJECT_IDלמזהה הפרויקט ב-Google Cloud (project-id).export PROJECT_ID=project-id
מורידים את קובצי המניפסט של האפליקציה ממאגר GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesעוברים לספרייה עם הקובץ
wordpress-persistent-disks:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disksמגדירים את משתנה הסביבה
WORKING_DIR:WORKING_DIR=$(pwd)במדריך הזה, יוצרים אובייקטים של Kubernetes באמצעות קובצי מניפסט בפורמט YAML.
יצירת אשכול GKE
יוצרים אשכול של GKE כדי לארח את קונטיינר אפליקציית WordPress.
ב-Cloud Shell, יוצרים אשכול GKE בשם
persistent-disk-tutorial:CLUSTER_NAME=persistent-disk-tutorial gcloud container clusters create-auto $CLUSTER_NAMEאחרי שיוצרים את האשכול החדש, מתחברים אליו:
gcloud container clusters get-credentials $CLUSTER_NAME --location REGION
יצירת PV ו-PVC שמגובים על ידי Persistent Disk
יוצרים PVC בתור האחסון שנדרש ל-WordPress.
ב-GKE מותקן משאב StorageClass שמוגדר כברירת מחדל ומאפשר הקצאה דינמית של PVs שמגובים על ידי Persistent Disk. משתמשים בקובץ wordpress-volumeclaim.yaml כדי ליצור את ה-PVC שנדרשים לפריסה.
קובץ המניפסט הזה מתאר PVC שמבקש 200 GB של אחסון. לא הוגדר משאב StorageClass בקובץ, ולכן ה-PVC הזה משתמש במשאב ברירת המחדל StorageClass כדי להקצות PV שמגובה על ידי Persistent Disk.
ב-Cloud Shell, פורסים את קובץ המניפסט:
kubectl apply -f $WORKING_DIR/wordpress-volumeclaim.yamlיכולות לעבור עד עשר שניות עד שה-PV יוקצה על ידי Persistent Disk ועד שהוא ישויך ל-PVC. אפשר לבדוק את הסטטוס באמצעות הפקודה הבאה:
kubectl get persistentvolumeclaimהפלט מציג PersistentVolumeClaim עם סטטוס של
Pending, כמו בדוגמה הבאה:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE wordpress-volumeclaim Pending standard-rwo 5s
ה-PersistentVolumeClaim נשאר במצב
Pendingעד שתשתמשו בו בהמשך במדריך הזה.
יצירת מכונה של Cloud SQL ל-MySQL
ב-Cloud Shell, יוצרים מכונה בשם
mysql-wordpress-instance:INSTANCE_NAME=mysql-wordpress-instance gcloud sql instances create $INSTANCE_NAMEמוסיפים את שם החיבור של המופע כמשתנה סביבה:
export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME \ --format='value(connectionName)')יוצרים מסד נתונים ל-WordPress כדי לאחסן בו את הנתונים:
gcloud sql databases create wordpress --instance $INSTANCE_NAMEיוצרים משתמש במסד הנתונים בשם
wordpressוסיסמה ל-WordPress כדי לאמת את המופע:CLOUD_SQL_PASSWORD=$(openssl rand -base64 18) gcloud sql users create wordpress --host=% --instance $INSTANCE_NAME \ --password $CLOUD_SQL_PASSWORDאם סוגרים את הסשן ב-Cloud Shell, הסיסמה נמחקת. חשוב לשים לב לסיסמה כי תצטרכו להזין אותה בהמשך המדריך.
סיימתם להגדיר את מסד הנתונים לבלוג החדש שלכם ב-WordPress.
פריסת WordPress
כדי לפרוס את WordPress, צריך ליצור חשבון שירות. יוצרים סוד ב-Kubernetes כדי לאחסן את פרטי הכניסה לחשבון השירות, ועוד סוד כדי לאחסן את פרטי הכניסה למסד הנתונים.
הגדרת חשבון שירות ויצירת סודות
כדי לאפשר לאפליקציית WordPress לגשת למופע MySQL דרך פרוקסי של Cloud SQL, צריך ליצור חשבון שירות:
SA_NAME=cloudsql-proxy gcloud iam service-accounts create $SA_NAME --display-name $SA_NAMEמוסיפים את כתובת האימייל בחשבון השירות כמשתנה סביבה:
SA_EMAIL=$(gcloud iam service-accounts list \ --filter=displayName:$SA_NAME \ --format='value(email)')מוסיפים את התפקיד
cloudsql.clientלחשבון השירות:gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAILיוצרים מפתח לחשבון השירות:
gcloud iam service-accounts keys create $WORKING_DIR/key.json \ --iam-account $SA_EMAILהפקודה הזו מורידה עותק של הקובץ
key.json.יוצרים סוד של Kubernetes עבור פרטי הכניסה של MySQL:
kubectl create secret generic cloudsql-db-credentials \ --from-literal username=wordpress \ --from-literal password=$CLOUD_SQL_PASSWORDיוצרים סוד ב-Kubernetes עבור פרטי הכניסה של חשבון השירות:
kubectl create secret generic cloudsql-instance-credentials \ --from-file $WORKING_DIR/key.json
פריסת WordPress
השלב הבא הוא פריסת מאגר התגים של WordPress באשכול GKE.
קובץ המניפסט wordpress_cloudsql.yaml מתאר פריסה שיוצרת Pod יחיד שמריץ קונטיינר עם מופע של WordPress. הקונטיינר הזה קורא את משתנה הסביבה WORDPRESS_DB_PASSWORD שמכיל את הסוד cloudsql-db-credentials שיצרתם.
קובץ המניפסט הזה גם מגדיר את מאגר התגים של WordPress לתקשורת עם MySQL דרך Cloud SQL proxy שפועל במאגר התגים של ה-sidecar.
ערך כתובת המארח מוגדר במשתנה הסביבה WORDPRESS_DB_HOST.
מכינים את הקובץ על ידי החלפת משתנה הסביבה
INSTANCE_CONNECTION_NAME:cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst > \ $WORKING_DIR/wordpress_cloudsql.yamlפורסים את קובץ המניפסט
wordpress_cloudsql.yaml:kubectl create -f $WORKING_DIR/wordpress_cloudsql.yamlנדרשות כמה דקות לפריסת קובץ המניפסט הזה בזמן שדיסק מתמשך מצורף לצומת החישוב.
צופים בפריסה כדי לראות את השינוי בסטטוס ל-
running:kubectl get pod -l app=wordpress --watchאם הפלט מראה סטטוס של
Running, אפשר להמשיך לשלב הבא.NAME READY STATUS RESTARTS AGE wordpress-387015-02xxb 2/2 Running 0 2m47s
חשיפת שירות WordPress
בשלב הקודם פרסתם קונטיינר של WordPress, אבל כרגע אי אפשר לגשת אליו מחוץ לאשכול כי אין לו כתובת IP חיצונית. כדי לחשוף את אפליקציית WordPress לתעבורת נתונים מהאינטרנט, צריך ליצור ולהגדיר שירות Kubernetes עם מאזן עומסים חיצוני מצורף. במדריך הזה אפשר לקרוא מידע נוסף על חשיפת אפליקציות באמצעות שירותים ב-GKE.
יצירת שירות של
type:LoadBalancer:kubectl create -f $WORKING_DIR/wordpress-service.yamlיצירת מאזן עומסים נמשכת כמה דקות.
צופים בפריסה ומחכים עד שמוקצית ל-Service כתובת IP חיצונית:
kubectl get svc -l app=wordpress --watchאם כתובת IP חיצונית מופיעה בפלט, אפשר להמשיך לשלב הבא. שימו לב שכתובת ה-IP החיצונית שלכם שונה מהדוגמה הבאה.
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress 10.51.243.233 203.0.113.3 80:32418/TCP 1m
חשוב לשים לב לשדה הכתובת
EXTERNAL_IPכדי להשתמש בו בהמשך.
הגדרת בלוג ב-WordPress
בקטע הזה מגדירים את הבלוג ב-WordPress.
בדפדפן, עוברים לכתובת ה-URL הבאה ומחליפים את external-ip-address בכתובת
EXTERNAL_IPשל השירות שחושף את מופע WordPress:http://external-ip-address
בדף WordPress installation (התקנת WordPress), בוחרים שפה ולוחצים על Continue (המשך).
ממלאים את הפרטים בדף Information needed (מידע נדרש) ואז לוחצים על Install WordPress (התקנת WordPress).
יש ללחוץ על התחברות.
מזינים את שם המשתמש והסיסמה שיצרתם קודם.
עכשיו יש לכם אתר בלוג. כדי להיכנס לבלוג, עוברים בדפדפן לכתובת ה-URL הבאה:
http://external-ip-address
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת המשאבים הבודדים
אם השתמשתם בפרויקט קיים ואתם לא רוצים למחוק אותו, אתם יכולים למחוק את המשאבים בנפרד.
מוחקים את השירות:
kubectl delete service wordpressמחכים עד שמאזן העומסים שהוקצה לשירות
wordpressיימחק. מאזן העומסים נמחק באופן אסינכרוני ברקע.צפייה בתהליך המחיקה:
watch gcloud compute forwarding-rules listמאזן העומסים נמחק כשמופיע הפלט הבא:
Listed 0 items.מחיקת הפריסה:
kubectl delete deployment wordpressמוחקים את ה-PVC של WordPress:
kubectl delete pvc wordpress-volumeclaimהפקודה הזו גם מוחקת אוטומטית את ה-PV ואת הדיסק הקבוע.
מחיקת אשכול GKE:
gcloud container clusters delete $CLUSTER_NAME --location=$REGIONמחיקת המכונה של Cloud SQL:
gcloud sql instances delete $INSTANCE_NAMEמסירים את התפקיד מחשבון השירות:
gcloud projects remove-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAILמוחקים את חשבון השירות:
gcloud iam service-accounts delete $SA_EMAIL
המאמרים הבאים
- מגדירים כתובת IP קבועה ושם דומיין לאפליקציה.
אפשר לעיין במדריכים נוספים בנושא Kubernetes Engine.
כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.