Buildpack ממיר קוד מקור לקובץ הפעלה, ומשמש ליצירת קונטיינרים בצורה פשוטה, אמינה וניתנת לשחזור. Kf תומך ב-buildpacks מגרסה 2 ומגרסה 3, וחשוב להבין את ההבדלים ביניהם.
חבילות Buildpack בגרסה 2
רוב האפליקציות של Cloud Foundry כבר משתמשות ב-buildpacks בגרסה 2. כשמשתמשים ב-buildpacks מגרסה 2 עם Kf, הקבצים הבינאריים של מחזור החיים וה-buildpacks מורדים ומוגדרים מכתובות ה-Git שלהם. לאחר מכן, Kf משתמש ב-CLI של lifecycle כדי להפעיל כל buildpack מול קוד המקור.
יתרונות
- הפתרון מוכן לשימוש מיידי בלי לשנות את צינור עיבוד הנתונים או את הקוד.
חסרונות
- הגרסה הקודמת של buildpack הוחלפה בגרסה 3.
- ביצועים ואמינות נמוכים יותר. צינור ה-build של Kf דורש יותר קלט/פלט בשביל חבילות buildpack מגרסה 2.
- פחות משאבים קהילתיים.
- Kf תומך רק במאגרי git של OSS.
חבילות Buildpack בגרסה 3
V3 buildpacks הוא פרויקט של Cloud Native Computing Foundation (CNCF) עם מפרט מוגדר היטב, CLI (pack) וקהילה גדלה שמפתחת שפות ומסגרות שונות.ל- Google Cloud יש גם קבוצה משלו של Google Cloud's buildpacks.
ל-buildpacks בגרסה 3 יש שני קונטיינרים כלליים של OCI:
- תמונת Builder
- הרצת תמונה
תמונת Builder
קובץ האימג' של ה-builder משמש בזמן שקוד המקור שלכם עובר build לקונטיינר שאפשר להפעיל. בתמונה יש את הסקריפטים detect וכלי השירות האחרים שנדרשים כדי לקמפל קוד מקור.
הרצת תמונה
קובץ האימג' להרצה הוא קובץ הבסיס שעליו נבנה הקונטיינר. כלומר, זו תמונת הבסיס שתפעל כשהאפליקציה תופעל.
שכבות
Buildpacks בגרסה 3 משתמשים בשכבות כדי ליצור את הקונטיינר הסופי. לכל חבילת buildpack שנכללת ב-build יש אפשרות לשנות את מערכת הקבצים ואת משתני הסביבה של האפליקציה. הגישה הזו מאפשרת ליצור חבילות buildpack דקות וכלליות יותר.
Buildpacks מגרסה 3 מבוססים על קונטיינרים של OCI. לשם כך, צריך לאחסן את קובץ האימג' של V3 Builder במאגר קונטיינרים שלצינור ה-build של Kf יש גישה אליו. צינור ה-build משתמש בתמונת ה-builder כדי להחיל את הסקריפטים הבסיסיים ליצירת קוד המקור בקונטיינר שניתן להפעלה.
יתרונות
- קובץ אימג' ליצירה וקובץ אימג' להרצה שנתמכים על ידי Google.
- אפשר להשתמש בו עם מוצרים שונים Google Cloud כמו Cloud Build.
- קהילה גדלה ומאגר buildpack.
חסרונות
- יכול להיות שיידרשו עדכונים בקוד או בתהליך. לדוגמה, ה-buildpack של Java דורש קוד מקור, בעוד שה-buildpack של V2 דורש קובץ jar.
- Buildpacks מגרסה V3 הם חדשים יותר, ויכול להיות שיידרש אימות נוסף (אם משתמשים ב-buildpacks שפותחו על ידי הקהילה).
מקבצי Kf
הצגת מקבצי התמונות
כשמעלים אפליקציה, צינור ה-build קובע את חבילת ה-buildpack על סמך ה-Stack שנבחר (שמצוין באמצעות הדגל --stack או קובץ המניפסט).
כדי לראות אילו חבילות ערוצים זמינות בחלל, קודם צריך לוודא שהחלל מטורגט:
kf target -s myspaceאחר כך אפשר להשתמש בפקודת המשנה kf stacks כדי להציג את רשימת ה-Stacks:
kf stacksהפלט מציג גם את V2 וגם את V3 Stacks:
Getting stacks in Space: myspace
Version Name Build Image Run Image
V2 cflinuxfs3 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5 cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
V3 kf-v2-to-v3-shim gcr.io/kf-releases/v2-to-v3:v2.7.0 gcr.io/buildpacks/gcp/run:v1 This is a stack added by the integration tests to assert that v2->v3 shim works
V3 google gcr.io/buildpacks/builder:v1 gcr.io/buildpacks/gcp/run:v1 Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3@sha256:f96b6e3528185368dd6af1d9657527437cefdaa5fa135338462f68f9c9db3022 cloudfoundry/run:full-cnb@sha256:dbe17be507b1cc6ffae1e9edf02806fe0e28ffbbb89a6c7ef41f37b69156c3c2 A large Cloud Foundry stack based on Ubuntu 18.04
הגדרת מחסניות
אפשר לעדכן את הגדרות ה-Stack על ידי עריכה של kfsystem Custom Resource:
kubectl edit kfsystem kfsystemבדוגמה הזו מוגדרים buildpacks של V3 Stack: Google Cloud
spec:
kf:
config:
spaceStacksV3:
- name: google
description: Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
buildImage: gcr.io/buildpacks/builder:v1
runImage: gcr.io/buildpacks/gcp/run:v1
עכשיו אפשר להעביר את ה-Stack החדש:
kf push myapp --stack googleבדוגמה הזו מוגדר ה-buildpack של Ruby V2, והגדרות ברירת המחדל של צינור ה-build מוגדרות לשימוש ב-V2 Stacks:
spec:
kf:
config:
spaceDefaultToV3Stack: false
spaceBuildpacksV2:
- name: ruby_buildpack
url: https://github.com/cloudfoundry/ruby-buildpack
spaceStacksV2:
- name: cflinuxfs3
image: cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
העברה מ-V2 ל-V3 Buildpack
Kf מספקת מחסנית V3 לבניית אפליקציות שנבנו באמצעות buildpacks רגילים של V2, באמצעות מחסנית בשם kf-v2-to-v3-shim. סט הכלים kf-v2-to-v3-shim נוצר בהתאם ל-standard V3 buildpacks API. עם כל גרסה של Kf נוצר אימג' של builder שמתוחזק על ידי Google, בהתאם לתהליך הסטנדרטי של buildpack. קובץ האימג' של ה-builder צובר רשימה של buildpacks בגרסה 3 שנוצרו באותו תהליך שבו משתמשים בפקודה kf wrap-v2-buildpack. תמונות ה-buildpack של V3 נוצרות באמצעות תמונות ה-buildpack הסטנדרטיות של V2. חשוב לציין שחבילות ה-buildpack של V3 לא מכילות את הקובץ הבינארי של חבילות ה-buildpack של V2 שאליהן יש הפניה. במקום זאת, מתבצעת הפניה לקובצי האימג' של V2 buildpack, והביטים מורדים בזמן ה-build של האפליקציה (על ידי הפעלת kf push).
בזמן ה-Build של האפליקציה, חבילת ה-Buildpack V2 מורדת ממאגר ה-Git המתאים. כשמריצים את זיהוי הגרסה השלישית, הוא מוקצה לסקריפט הזיהוי של גרסה 2 שהורד. עבור קבוצת ה-buildpack הראשונה שעוברת את הזיהוי, המערכת ממשיכה לשלב הבנייה, שבו מוקצית הרשאת ביצוע הבנייה לסקריפט הבנייה שהורד בגרסה 2.
יש תמיכה בחבילות buildpack הבאות מגרסה 2 במערך kf-v2-to-v3-shim:
| Buildpack | מאגר Git |
|---|---|
| java_buildpack | https://github.com/cloudfoundry/java-buildpack |
| dotnet_core_buildpack | https://github.com/cloudfoundry/dotnet-core-buildpack |
| nodejs_buildpack | https://github.com/cloudfoundry/nodejs-buildpack |
| go_buildpack | https://github.com/cloudfoundry/go-buildpack |
| python_buildpack | https://github.com/cloudfoundry/python-buildpack |
| binary_buildpack | https://github.com/cloudfoundry/binary-buildpack |
| nginx_buildpack | https://github.com/cloudfoundry/nginx-buildpack |
אפשרות 1: העברת אפליקציות שפותחו באמצעות buildpacks רגילים בגרסה 2
כדי ליצור אפליקציות באמצעות מחסנית kf-v2-to-v3-shim, משתמשים בפקודה הבאה:
kf push myapp --stack kf-v2-to-v3-shimkf-v2-to-v3-shim Stack יזהה באופן אוטומטי את זמן הריצה באמצעות חבילות ה-buildpack העטופות מגרסה 2. תמונת האפליקציה שמתקבלת נוצרת באמצעות התקן V3 וצינור ה-build, אבל ה-builder של חבילת ה-buildpack המקבילה V2.
אפשרות 2: העברת אפליקציות שנוצרו באמצעות buildpacks מותאמים אישית מגרסה 2
ל-Kf יש כלי להעברת buildpack שיכול לקחת buildpack מגרסה 2 ולעטוף אותו ב-buildpack מגרסה 3. אחר כך אפשר להשתמש ב-buildpack העטוף בכל מקום שבו יש buildpacks בגרסה 3.
kf wrap-v2-buildpack gcr.io/your-project/v2-go-buildpack https://github.com/cloudfoundry/go-buildpack --publishהפעולה הזו תיצור קובץ אימג' של buildpack בשם gcr.io/your-project/v2-go-buildpack. אחר כך אפשר להשתמש בו כדי ליצור כלי בנייה, לפי ההוראות במאמר יצירת כלי בנייה.
פקודת המשנה הזו משתמשת בשורות הפקודה הבאות באופן שקוף:
gogitpackunzip
מומלץ להשתמש ב-Cloud Shell Editor כדי לוודא שכל פקודת משנה זמינה בנתיב הנכון ושהיא הגרסה הנכונה.
בעיות מוכרות
אלה תכונות שעדיין לא פועלות עם Kf. אם יש לכם עדיפות גבוהה לאחד מהם, אתם יכולים לפנות לנציג המכירות שלכם:
- מאגרי קונטיינרים פרטיים לקובצי אימג' של builder בגרסה 3.
- שמירה במטמון בגרסה 3.
- חבילות buildpack בגרסה 2 שדורשות פרטי כניסה ל-Git.