במדריך הזה נסביר איך להריץ את Elastic Stack ב-GKE באמצעות האופרטור Elastic Cloud on Kubernetes (ECK).
Elastic Stack הוא פתרון פופולרי בקוד פתוח שמשמש לרישום ביומן, למעקב ולניתוח נתונים בזמן אמת. באמצעות Elastic Stack ב-GKE, תוכלו ליהנות מהמדרגיות והאמינות שמסופקות על ידי GKE Autopilot ומהתכונות המתקדמות של Elastic Stack.
המדריך הזה מיועד לאדמינים של Kubernetes או למהנדסי מהימנות אתרים.
מטרות
- יוצרים אשכול GKE.
- פורסים את אופרטור ECK.
- הגדרת אשכולות של Elasticsearch ו-Kibana באמצעות אופרטור ECK.
- פריסת Elastic Stack מלא באמצעות אופרטור ECK.
- התאמה אוטומטית של העומס באשכולות Elasticsearch ושדרוג הפריסה של Elastic Stack.
- שימוש ב-Elastic Stack כדי לעקוב אחרי סביבות Kubernetes.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
בעזרת מחשבון העלויות אתם יכולים להעריך את העלויות בהתאם לשימוש הצפוי.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון 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 .
מפעילים את GKE API, אם הוא עדיין לא מופעל:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable container.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 .
מפעילים את GKE API, אם הוא עדיין לא מופעל:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable container.googleapis.com
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/container.clusterAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
- אתם צריכים להיות הבעלים של שם דומיין. שם הדומיין לא יכול להיות ארוך מ-63 תווים. אתם יכולים להשתמש ב-Cloud Domains או ברשם אחר.
הכנת הסביבה
במדריך הזה תשתמשו ב-Cloud Shell כדי לנהל משאבים שמתארחים ב- Google Cloud. ב-Cloud Shell מותקנת מראש התוכנה שדרושה למדריך הזה, כולל kubectl, Helm ו-gcloud CLI.
כדי להגדיר את הסביבה באמצעות Cloud Shell:
מפעילים סשן של Cloud Shell במסוף Google Cloud : לוחצים על
Activate Cloud Shell במסוףGoogle Cloud . ייפתח סשן בחלונית התחתונה של מסוף Google Cloud .
מוסיפים מאגר של תרשימי Helm ומעדכנים אותו:
helm repo add elastic https://helm.elastic.co helm repo updateמשכפלים את המאגר ב-GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.gitעוברים לספריית העבודה:
cd kubernetes-engine-samples/observability/elastic-stack-tutorial
יצירת אשכול GKE
יצירת אשכול GKE עם הפעלה של איסוף מדדים ממישור הבקרה:
gcloud container clusters create-auto elk-stack \
--location="us-central1" \
--monitoring="SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER"
פריסת אופרטור ECK
Elastic Cloud on Kubernetes (ECK) היא פלטפורמה לפריסה ולניהול של Elastic Stack באשכולות Kubernetes.
ECK הופך את הפריסה והניהול של אשכולות Elastic Stack לאוטומטיים, ומפשט את תהליך ההגדרה והתחזוקה של Elastic Stack ב-Kubernetes. הוא מספק קבוצה של משאבים מותאמים אישית של Kubernetes שבהם אפשר להשתמש כדי ליצור ולהגדיר את Elasticsearch, Kibana, שרת ניהול ביצועי אפליקציות ורכיבים אחרים של Elastic Stack ב-Kubernetes. כך מפתחים וצוותי DevOps יכולים להגדיר ולנהל אשכולות של Elastic Stack בהיקפים גדולים.
ECK תומך במספר צומתי Elasticsearch, ביתירות כשל אוטומטית של אפליקציות, בשדרוגים חלקים ובהצפנת SSL. ב-ECK יש גם תכונות שמאפשרות לכם לעקוב אחרי הביצועים של Elasticsearch ולפתור בעיות שקשורות אליהם.
מתקינים את תרשים ה-Helm של ECK:
helm upgrade --install "elastic-operator" "elastic/eck-operator" \ --version="2.8.0" \ --create-namespace \ --namespace="elastic-system" \ --set="resources.limits.cpu=250m" \ --set="resources.limits.memory=512Mi" \ --set="resources.limits.ephemeral-storage=1Gi" \ --set="resources.requests.cpu=250m" \ --set="resources.requests.memory=512Mi" \ --set="resources.requests.ephemeral-storage=1Gi"ממתינים עד שהנציג יהיה מוכן:
watch kubectl get pods -n elastic-systemהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 0 31sאם האופרטור
STATUSהואRunning, חוזרים לשורת הפקודה על ידי לחיצה עלCtrl+C.
הגדרת Elastic Stack באמצעות ECK
בעזרת Elastic Stack עם Elasticsearch, Kibana ו-Elastic Agent שפועלים במצב Fleet, אתם יכולים להגדיר פתרון יעיל, מנוהל וניתן להתאמה לניהול נתונים ולהמחשה שלהם באמצעות Kibana.
Kibana הוא כלי קוד פתוח לניתוח נתונים ולהצגה חזותית שלהם, שמאפשר לחפש, לנתח ולהציג באופן חזותי נתונים ב-Elasticsearch.
Elastic Agent הוא כלי קל משקל להעברת נתונים שאוסף נתונים ממקורות שונים, כמו יומנים או מדדים, ושולח אותם אוטומטית אל Elasticsearch.
Elastic Fleet הוא מצב פעולה שבו סוכני Elastic מדווחים לשרת מרכזי של Fleet, שמטפל בהגדרה ובניהול שלהם. ה-fleet server מפשט את הפריסה, ההגדרה וההתאמה של סוכני Elastic, ומקל על ניהול פריסות גדולות ומורכבות.
התכונה 'התאמה אוטומטית לעומס ב-Elasticsearch' היא תכונה של מעקב עצמי שיכולה לדווח מתי יש צורך במשאבים נוספים על סמך מדיניות שהוגדרה על ידי אופרטור. לדוגמה, מדיניות יכולה לציין שרמה מסוימת צריכה להתרחב בהתאם למקום הפנוי בכונן. Elasticsearch יכול לעקוב אחרי המקום בכונן ולהציע לשנות את קנה המידה אם הוא צופה מחסור, אבל עדיין המפעיל צריך להוסיף את המשאבים הנדרשים. מידע נוסף על התאמה אוטומטית לעומס (automatic scaling) ב-Elasticsearch זמין במאמר בנושא התאמה אוטומטית לעומס (automatic scaling) במאמרי העזרה של Elasticsearch.
הגדרת אשכול Elasticsearch
Elasticsearch הוא מנוע חיפוש ומנוע לניתוח נתונים מבוזר מבוסס RESTful, שנועד לאחסן ולחפש כמויות גדולות של נתונים במהירות וביעילות.
כשפורסים את Elastic Stack ב-Kubernetes, צריך לנהל את ההגדרות של המכונה הווירטואלית, ובמיוחד את vm.max_map_count setting, שנדרש על ידי Elasticsearch. vm.max_map_count מציין את מספר אזורי הזיכרון שתהליך יכול להקצות לקובץ. כדי ש-Elasticsearch יפעל בצורה אופטימלית, הערך הזה צריך להיות לפחות 262144. מידע נוסף זמין במאמר בנושא זיכרון וירטואלי במסמכי התיעוד של ECK.
בודקים את קובץ המניפסט הבא:
המניפסט הזה מתאר DaemonSet שמגדיר את הגדרת הליבה ישירות במארח. DaemonSet הוא בקר Kubernetes שעוזר לוודא שעותק של Pod פועל בכל צומת באשכול.
המניפסט שלמעלה נמצא ברשימת ההיתרים להפעלה ב-Autopilot. אל תשנו את המניפסט הזה, כולל קובצי האימג' של הקונטיינר.
מחילים את המניפסט הזה על האשכול:
kubectl apply -f max-map-count-setter-ds.yamlבודקים את קובץ המניפסט הבא:
המניפסט הזה מגדיר אשכול Elasticsearch עם השדות הבאים:
initContainers: המתנה לשינוי הגדרות הליבה של מארח הזיכרון הווירטואלי.-
podDisruptionBudget: מציין שהאשכול לא ייהרס במהלך תהליך ביטול הפיצול של ה-Pods. -
config.node.roles: הגדרת תפקידים של צומת Elasticsearch. מידע נוסף על תפקידי צמתים זמין במאמר צומת במאמרי העזרה של Elasticsearch.
מחילים את המניפסט הזה על האשכול:
kubectl apply -f elasticsearch.yamlמחכים עד שקלאסטר Elasticsearch יהיה מוכן:
watch kubectl --namespace elastic-system get elasticsearches.elasticsearch.k8s.elastic.coהפלט אמור להיראות כך:
NAME HEALTH NODES VERSION PHASE AGE elasticsearch green 3 8.8.0 Ready 5m3sכשהאשכול
HEALTHשל Elasticsearch הואgreenו-PHASEהואReady, חוזרים לשורת הפקודה בלחיצה עלCtrl+C.
הגדרת Kibana
בודקים את המניפסט הבא:
במניפסט הזה מתואר משאב מותאם אישית של Kibana שמגדיר מדיניות של סוכנים עבור שרת הצי וסוכנים.
מחילים את המניפסט הזה על האשכול:
kubectl apply -f kibana.yamlמחכים שה-Pods יהיו מוכנים:
watch kubectl --namespace elastic-system get kibanas.kibana.k8s.elastic.coהפלט אמור להיראות כך:
NAME HEALTH NODES VERSION AGE kibana green 1 8.8.0 6m47sכשהערך של Pods
HEALTHהואgreen, חוזרים לשורת הפקודה על ידי לחיצה עלCtrl+C.
הגדרת מאזן עומסים לגישה ל-Kibana
כדי לגשת ל-Kibana, צריך ליצור אובייקט Kubernetes Ingress, אישור בניהול Google, כתובת IP גלובלית ותחום DNS.
יצירת כתובת IP חיצונית גלובלית:
gcloud compute addresses create "elastic-stack" --globalיוצרים תחום מנוהל וקבוצת רשומות ב-Cloud DNS:
gcloud dns managed-zones create "elk" \ --description="DNS Zone for Airflow" \ --dns-name="elk.BASE_DOMAIN" \ --visibility="public" gcloud dns record-sets create "elk.BASE_DOMAIN" \ --rrdatas="$(gcloud compute addresses describe "elastic-stack" --global --format="value(address)")" \ --ttl="300" \ --type="A" \ --zone="elk"להאציל את תחום ה-DNS כתת-דומיין של דומיין הבסיס על ידי יצירת קבוצת רשומות NS עם רשימה של שרתי שמות. אפשר לקבל רשימה של שרתי שמות באמצעות הפקודה הבאה:
gcloud dns record-sets describe elk.BASE_DOMAIN \ --type="NS" \ --zone="elk" \ --format="value(DATA)"בודקים את קובץ המניפסט הבא:
קובץ המניפסט הזה מתאר ManagedCertificate שמקצה אישור SSL כדי ליצור את חיבור ה-TLS.
מחילים את המניפסט על האשכול:
kubectl apply -f ingress.yaml
הגדרת סוכנים של Elastic
בודקים את המניפסט הבא:
המניפסט הזה מתאר סוכן Elastic שמגדיר שרת צי עם ECK.
מחילים את המניפסט הזה על האשכול:
kubectl apply -f fleet-server-and-agents.yamlמחכים שה-Pods יהיו מוכנים:
watch kubectl --namespace elastic-system get agents.agent.k8s.elastic.coהפלט אמור להיראות כך:
NAME HEALTH AVAILABLE EXPECTED VERSION AGE elastic-agent green 5 5 8.8.0 14m fleet-server green 1 1 8.8.0 16mכשהערך של Pods
HEALTHהואgreen, חוזרים לשורת הפקודה על ידי לחיצה עלCtrl+C.
הגדרת רישום ביומן ומעקב
Elastic Stack יכול להשתמש ב-kube-state-metrics exporter כדי לאסוף מדדים ברמת האשכול.
מתקינים את kube-state-metrics:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install kube-state-metrics prometheus-community/kube-state-metrics --namespace elastic-systemמקבלים את פרטי הכניסה של משתמש ברירת המחדל של Kibana
elastic:kubectl get secret elasticsearch-es-elastic-user -o yaml -n elastic-system -o jsonpath='{.data.elastic}' | base64 -dפותחים את
https://elk.BASE_DOMAINבדפדפן ונכנסים ל-Kibana באמצעות פרטי הכניסה.בתפריט, לוחצים על Analytics ואז על Dashboards (לוחות בקרה).
בשדה הטקסט של החיפוש, מזינים Kubernetes overview ובוחרים באפשרות Overview dashboard כדי לראות מדדי בסיס.
יכול להיות שבחלק מהחלוניות במרכז הבקרה לא יוצגו נתונים או שיוצגו הודעות שגיאה, כי GKE מגביל את הגישה לחלק מנקודות הקצה של מישור הבקרה ש-Kibana משתמש בהן כדי לקבל מדדי אשכולות.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
מחיקת המשאבים הנפרדים
אם השתמשתם בפרויקט קיים ואתם לא רוצים למחוק אותו, אתם יכולים למחוק את המשאבים בנפרד.
מוחקים את רכיבי Elastic Stack, את מפעיל ECK ואת kube-state-metrics:
kubectl --namespace elastic-system delete ingresses.networking.k8s.io elastic-stack kubectl --namespace elastic-system delete managedcertificates.networking.gke.io elastic-stack kubectl --namespace elastic-system delete frontendconfigs.networking.gke.io elastic-stack kubectl --namespace elastic-system delete agents.agent.k8s.elastic.co elastic-agent kubectl --namespace elastic-system delete agents.agent.k8s.elastic.co fleet-server kubectl --namespace elastic-system delete kibanas.kibana.k8s.elastic.co kibana kubectl --namespace elastic-system delete elasticsearches.elasticsearch.k8s.elastic.co elasticsearch kubectl --namespace elastic-system delete daemonsets.apps max-map-count-setter kubectl --namespace elastic-system delete pvc --selector='elasticsearch.k8s.elastic.co/cluster-name=elasticsearch' helm --namespace elastic-system uninstall kube-state-metrics helm --namespace elastic-system uninstall elastic-operatorמוחקים את קבוצת רשומות ה-DNS, כתובת ה-IP, התחום המנוהל של DNS ואת אשכול GKE:
gcloud dns record-sets delete "elk.BASE_DOMAIN" \ --type="A" \ --zone="elk" \ --quiet gcloud compute addresses delete "elastic-stack" \ --global \ --quiet gcloud dns managed-zones delete "elk" --quiet gcloud container clusters delete "elk-stack" \ --location="us-central1" \ --quiet
המאמרים הבאים
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.