כיצד לבנות ענן היברידי באמצעות Kubernetes שיכול להחליף DBaaS

שמי פטר זייצב, אני המנכ"ל, מייסד פרקונה ואני רוצה להגיד לך:

  • איך הגענו מפתרונות קוד פתוח ל-Database as a Service;
  • אילו גישות קיימות לפריסת מסדי נתונים בענן;
  • כיצד Kubernetes יכול להחליף את DBaaS, לבטל את התלות בספקים ולשמור על הפשטות של DBMS כשירות.

המאמר הוכן על סמך דוח ב-@Databases Meetup על ידי Mail.ru Cloud Solutions & Tarantool. אם אתה לא רוצה לקרוא, אתה יכול לצפות:

הפעל וידאו

איך הגענו מקוד פתוח ל-Database as a Service בענן

אני עובד בקוד פתוח מאז סוף שנות ה-90. לפני XNUMX שנה, השימוש בקוד פתוח, כמו מסדי נתונים, לא היה כל כך קל. היה צורך להוריד את קוד המקור, לתקן אותו, לקמפל אותו ורק אז להשתמש בו.

הקוד הפתוח עבר אז סדרה של הפשטות:

  • מקורות Tar.gz ו-INSTALL שהיו צריכים להידור;
  • חבילות עם תלות כמו .deb ו-.rpm, שבהן אתה רק צריך להתקין קבוצה של חבילות;
  • מאגרי חבילות כמו APT ו-YUM, שאיתם ההתקנה היא אוטומטית;
  • פתרונות כגון Docker ו-Snap, המאפשרים לקבל חבילות בהתקנה ללא תלות חיצונית.

כתוצאה מכך, קל יותר להשתמש בתוכנת קוד פתוח וגם מוריד את מחסום הכניסה לפיתוח יישומים כאלה.

יחד עם זאת, בניגוד למצב לפני 20 שנה, כשכולם היו מומחים להרכבה, כיום רוב המפתחים לא יכולים לבנות את הכלים שהם משתמשים בהם מהמקור.

למעשה, זה לא רע, כי:

  1. אנחנו יכולים להשתמש בתוכנה מורכבת יותר אך ידידותית יותר למשתמש. לדוגמה, דפדפן נוח לשימוש, אך הוא כולל רכיבי קוד פתוח רבים ואינו נוח לבנייה מאפס.
  2. יותר אנשים יכולים להפוך למפתחי קוד פתוח ותוכנות אחרות, יותר תוכנות משמשות עסקים, והצורך בה גדול יותר.

החיסרון הוא שהשלב הבא בפישוט קשור לשימוש בפתרונות ענן, וזה מוביל לנעילה מסוימת של ספקים, כלומר התחייבות לספק אחד. אנו משתמשים בפתרונות פשוטים וספקים משתמשים ברכיבי קוד פתוח, אך למעשה הם ממוסמרים לאחד העננים הגדולים. כלומר, הדרך הקלה והמהירה ביותר לפרוס קוד פתוח (ותוכנות התואמות לו) היא בעננים, באמצעות API קנייני.

כשזה מגיע לבסיסי נתונים בענן, ישנן שתי גישות:

  1. הרכב את תשתית מסד הנתונים כמו במרכז נתונים רגיל. כלומר, לקחת את אבני הבניין הסטנדרטיות: מחשוב, אחסון וכן הלאה, ולהתקין אותן. Linux, מסד נתונים, הגדרה.
  2. השתמש ב-Database as a Service, כאשר הספק מציע מסד נתונים מוכן בתוך הענן.

DBaaS הוא שוק שצומח במהירות כעת מכיוון שהוא מאפשר למפתחים לעבוד ישירות עם מסדי נתונים ומצמצם את העבודה השגרתית. הספק מתחייב להבטיח זמינות גבוהה ושינוי קנה מידה קל, תיקון מסד נתונים, גיבויים וכוונון ביצועים.

שני סוגים של מסד נתונים כשירות המבוסס על קוד פתוח ואלטרנטיבה בצורה של Kubernetes

ישנם שני סוגים של מסד נתונים כשירות עבור מסדי נתונים פתוחים:

  1. מוצר קוד פתוח סטנדרטי ארוז ב-backend של ניהול לפריסה וניהול קלים.
  2. פתרון מסחרי מתקדם עם תוספות שונות, תואם קוד פתוח.

שתי האפשרויות מפחיתות את אפשרות ההגירה בין העננים ומצמצמות את ניידות הנתונים והאפליקציות. למשל, למרות העובדה שסוגים שונים של עננים תומכים בעצם באותו MySQL סטנדרטי, ישנם הבדלים משמעותיים ביניהם: בתפעול, בביצועים, בגיבוי וכדומה. מעבר מענן אחד למשנהו יכול להיות מאתגר, במיוחד עבור יישומים מורכבים.

וכאן נשאלת השאלה - האם ניתן לקבל את הנוחות של Database as a Service, אלא כפתרון פשוט בקוד פתוח?

החדשות הרעות הן שלמרבה הצער, עדיין אין פתרונות כאלה בשוק. החדשות הטובות הן שיש Kubernetes, שמאפשרת ליישם פתרונות כאלה.

Kubernetes היא מערכת הפעלה לענן או למרכז הנתונים המאפשרת לך לפרוס ולנהל אפליקציה על פני מספר שרתים באשכול ולא על מארח יחיד.

כעת Kubernetes היא המובילה בקטגוריית תוכנות כאלה. היו הרבה פתרונות שונים לבעיות כאלה, אבל זה הפך לסטנדרט. חברות רבות שבעבר התמקדו בפתרונות חלופיים מתמקדות כעת בהתאמת המוצרים שלהן לתמיכה ב-Kubernetes.

בנוסף, Kubernetes הוא פתרון אוניברסלי הנתמך בעננים פרטיים, ציבוריים והיברידיים של ספקים רבים, למשל: AWS, Google Cloud, Microsoft Azure, פתרונות ענן של Mail.ru.

איך Kubernetes עובד עם מסדי נתונים

Kubernetes תוכנן במקור עבור יישומים חסרי מדינה המעבדים נתונים אך אינם מאחסנים דבר, כגון שירותי מיקרו או יישומי אינטרנט. מסדי נתונים נמצאים בקצה השני של הספקטרום, כלומר, הם יישומים סטטיסטיים. ו-Kubernetes לא נועד במקור ליישומים כאלה.

עם זאת, ישנן תכונות שהופיעו ב-Kubernetes לאחרונה המאפשרות שימוש בבסיסי נתונים ויישומים מתקינים אחרים:

  1. הקונספט של StatefulSet הוא סדרה שלמה של פרימיטיבים לעיבוד אירועים בנושא הפסקת עבודת הפודים והטמעת Graceful Shutdown (כיבוי צפוי של האפליקציה).
  2. נפחים מתמשכים הם מאגרי נתונים המשויכים ל-pods, אובייקטי ניהול Kubernetes.
  3. Operator Framework - כלומר, היכולת ליצור רכיבים לניהול מסדי נתונים ויישומים מצביים אחרים המופצים על פני צמתים רבים.

כבר עכשיו בעננים ציבוריים יש מסדי נתונים גדולים כשירות, שהקצה האחורי שלהם הוא Kubernetes, למשל: CockroachCloud, InfluxDB, PlanetScale. כלומר, מסד נתונים על Kubernetes הוא לא רק דבר אפשרי תיאורטית, אלא גם משהו שעובד בפועל.

לפרקונה יש שני פתרונות קוד פתוח עבור Kubernetes:

  1. מפעיל Kubernetes עבור Percona Server עבור MongoDB.
  2. Kubernetes Operator for XtraDB CLUSTER הוא שירות התואם ל-MySQL ומספק זמינות גבוהה ועקביות. אתה יכול גם להשתמש בצומת בודד אם אין צורך בזמינות גבוהה, למשל עבור מסד נתונים של מפתחים.

ניתן לחלק את משתמשי Kubernetes לשתי קבוצות. יש אנשים שמשתמשים ישירות ב-Kubernetes Operators - אלו הם בעיקר משתמשים מתקדמים שיש להם הבנה טובה של איך הטכנולוגיה עובדת. אחרים מריצים את זה ב-backend - משתמשים כאלה מעוניינים במשהו כמו Database as a Service, הם לא רוצים להתעמק בניואנסים של Kubernetes. לקבוצת המשתמשים השנייה, יש לנו פתרון קוד פתוח נוסף - Percona DBaaS CLI Tool. זהו פתרון ניסיוני למי שרוצה לקבל DBaaS בקוד פתוח המבוסס על Kubernetes ללא הבנה מעמיקה של הטכנולוגיה.

כיצד להפעיל את DBaaS של Percona במנוע Google Kubernetes

Google Kubernetes Engine, לדעתי, הוא אחד המימושים הפונקציונליים ביותר של טכנולוגיית Kubernetes. הוא זמין באזורים רבים בעולם ויש לו כלי שורת פקודה (SDK) פשוט ונוח, המאפשר לך ליצור סקריפטים במקום לנהל את הפלטפורמה באופן ידני.

כדי ש-DBaaS שלנו יעבוד, אנחנו צריכים את הרכיבים הבאים:

  1. קובקטל.
  2. Google Cloud SDK.
  3. Percona DBaaS CLI.

התקן את kubectl

אנו מתקינים את החבילה עבור מערכת ההפעלה שלך, נבחן דוגמה Ubuntu... פרטים נוספים כאן.

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

התקנת Google Cloud SDK

אנו מתקינים את חבילת התוכנה באותו אופן. פרטים נוספים כאן.

# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] 
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -

# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk

התקנת Percona DBaaS CLI

התקן ממאגרי Percona. Percona DBaaS CLI Tool הוא עדיין מוצר ניסיוני, ולכן הוא ממוקם במאגר הניסיוני, אותו יש להפעיל בנפרד, גם אם כבר התקנתם מאגרי Percona.

קרא עוד כאן.

אלגוריתם התקנה:

  1. הגדר מאגרי Percona באמצעות הכלי percona-release. ראשית עליך להוריד ולהתקין את חבילת ה-percona-release הרשמית מ-Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. הפעל את רכיב מאגר הכלים הניסיוני באופן הבא:
    sudo percona-release enable tools experimental
    
  3. התקן את חבילת percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

הגדרת פעולת רכיבים

עוד על הגדרות כאן.

ראשית עליך להיכנס לחשבון Google שלך. יתר על כן, Google Cloud מאפשר למשתמש אחד להחזיק פרויקטים עצמאיים רבים, לכן עליך לציין פרויקט עובד באמצעות הקוד עבור פרויקט זה:

gcloud auth login
gcloud config set project hidden-brace-236921

לאחר מכן, אנו יוצרים אשכול. לצורך ההדגמה, יצרתי אשכול Kubernetes של שלושה צמתים בלבד - זה המינימום הנדרש לזמינות גבוהה:

gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3

הפקודה הבאה kubectl נותנת את ההרשאות הרצויות למשתמש הנוכחי שלנו:

kubectl create clusterrolebinding cluster-admin-binding-$USER 
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

לאחר מכן אנו יוצרים מרחב שמות והופכים אותו לפעיל. מרחב השמות הוא, באופן גס, גם כמו פרויקט או סביבה, אבל כבר בתוך אשכול Kubernetes. זה לא תלוי בפרויקטים של Google Cloud:

kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace

התחלת האשכול

לאחר שעברנו את מספר השלבים הללו, נוכל להפעיל אשכול בן שלושה צמתים עם הפקודה הפשוטה הזו:

# percona-dbaas mysql create-db example
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              Nt9YZquajW7nfVXTTrP
Status:            ready

כיצד להתחבר לאשכול

כברירת מחדל, הוא זמין רק בתוך Kubernetes. כלומר, זה לא נגיש מהשרת הזה שממנו הפעלת את הפקודה "צור". כדי להפוך אותו לזמין, למשל, לבדיקות עם לקוח, עליך להעביר את היציאה דרך מיפוי יציאות:

kubectl port-forward svc/example-proxysql 3306:3306 $

לאחר מכן אנו מחברים את לקוח MySQL שלך:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

פקודות ניהול אשכולות מתקדמות

מאגר מידע על IP ציבורי

אם אתה רוצה פתרון קבוע יותר לזמינות האשכולות, אתה יכול לקבל כתובת IP חיצונית. במקרה זה, בסיס הנתונים יהיה נגיש מכל מקום. זה פחות בטוח, אבל לרוב נוח יותר. עבור IP חיצוני אנו משתמשים בפקודה הבאה:

# percona-dbaas mysql create-db exposed 
--options="proxysql.serviceType=LoadBalancer"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     exposed
Resource Endpoint: 104.154.133.197
Port:              3306
User:              root
Pass:              k0QVxTr8EVfgyCLYse
Status:            ready

To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse

הגדר במפורש את הסיסמה

במקום שהמערכת תיצור סיסמה באופן אקראי, אתה יכול להגדיר את הסיסמה במפורש:

# percona-dbaas mysql create-db withpw --password=mypassword
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              mypassword
Status:            ready

אני מציג את הפלט של הסקריפטים בפורמט קריא אנושי, אבל גם פורמט JSON נתמך.

כיבוי זמינות גבוהה

בעזרת הפקודה הבאה תוכל להשבית זמינות גבוהה לפריסת צומת בודד:

# percona-dbaas mysql create-db singlenode 
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              22VqFD96mvRnmPMGg
Status:            ready

זהו פתרון לבדיקת משימות כדי להפעיל את MySQL במהירות ובקלות ככל האפשר, לבדוק אותה ולאחר מכן לכבות אותה או להשתמש בה לפיתוח.

כלי Percona DBaaS CLI עוזר לך להשיג פתרון דמוי DBaaS ב-Kubernetes. במקביל, אנו ממשיכים לעבוד על הפונקציונליות והשימושיות שלו.

דוח זה הוצג לראשונה ב @Databases Meetup מאת Mail.ru Cloud Solutions&Tarantool. תראה וידאו הופעות אחרות והירשם להודעות על אירועים בטלגרם סביב Kubernetes בקבוצת Mail.ru.

מה עוד כדאי לקרוא בנושא:

  1. מסדי נתונים בפלטפורמת IIoT מודרנית.
  2. כיצד לבחור מסד נתונים לפרויקט כך שלא תצטרך לבחור שוב.

מקור: www.habr.com

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster