במדריך הזה נסביר איך להריץ את 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 operator.
- התאמה אוטומטית של העומס באשכולות 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, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים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, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים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 מפשט את הפריסה, ההגדרה וההתאמה של סוכני 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אם קלאסטר Elasticsearch
HEALTHהואgreenו-PHASEהואReady, חוזרים לשורת הפקודה על ידי לחיצה עלCtrl+C.
הגדרת Kibana
בודקים את קובץ המניפסט הבא:
במניפסט הזה מתואר משאב מותאם אישית של Kibana שמגדיר מדיניות של סוכנים עבור שרת ה-Fleet והסוכנים.
מחילים את המניפסט הזה על האשכול:
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.