Kf משתמש ב-buildpacks כדי להפוך קוד מקור של אפליקציה לקובץ אימג' שניתן להפעלה. Cloud Native buildpacks משתמשים בגרסה האחרונה של Buildpack API v3. חברות מוסיפות באופן פעיל תמיכה בגרסה 3 לחבילות buildpack קיימות.
Kf תומך ב-buildpacks שתואמים לגרסאות V2 ו-V3 של מפרט Buildpack API.
השוואה בין חבילות buildpack בגרסה 2 ובגרסה 3
| חבילות Buildpack בגרסה 2 | חבילות Buildpack בגרסה 3 | |
|---|---|---|
| שמות חלופיים | Buildpacks של Cloud Foundry | Cloud Native buildpacks (CNB), קובצי אימג' של Builder |
| סטטוס | החלפה | היחס הנוכחי |
| בעלות | Cloud Foundry | Buildpacks.io |
| מקבץ | משותף על ידי ה-builder וסביבת זמן הריצה | אפשרות שונה לזמן הבנייה ולזמן הריצה |
| פיתוח מקומי | לא אפשרי | כן, עם pack CLI |
| חבילות Buildpack בהתאמה אישית | זמין בזמן ריצה | התכונה צריכה להיות מובנית בכלי ליצירת אתרים |
מחזור החיים של Buildpack
| שלב | Cloud Foundry | Kf עם buildpacks V2 | Kf עם buildpacks V3 |
|---|---|---|---|
| מיקום המקור | שירות BITS | רישום קונטיינרים | רישום קונטיינרים |
| מיקום ה-buildpack | BOSH/HTTP | HTTP | רישום קונטיינרים |
| מיקום המקבץ | BOSH | רישום קונטיינרים | רישום קונטיינרים |
| תוצאה | טיפה (קובץ בינארי של אפליקציה ללא מחסנית) | תמונה (טיפה על ערימה) | תמונה |
| זמן ריצה | טיפה מודבקת על ערימה ומופעלת | הפעלת התמונה שנוצרה | הפעלת התמונה שנוצרה |
Kf תמיד יוצרת תמונה מלאה שניתנת להרצה כתוצאה מתהליך ה-build שלה. לעומת זאת, ב-Cloud Foundry נוצרים חלקים של תמונה שניתנת להפעלה בזמן הבנייה, והשאר מתווסף בזמן הריצה.
Kf בחרה לפעול לפי המודל של יצירת תמונה מלאה תמיד, מהסיבות הבאות:
- אפשר לייצא תמונות, להריץ אותן באופן מקומי ולבדוק אותן באופן סטטי
- אבטחה וביקורת טובות יותר באמצעות כלים כמו אישור בינארי
- פריסות האפליקציות ניתנות לשחזור
Kf ו-buildpacks
Kf מאחסן את הרשימה הגלובלית של חבילות buildpack וערימות ב-config-defaults ConfigMap ב-kf Namespace. שינוי המאפיינים של חבילות ה-buildpack והמחסניות צריך להתבצע ב-kfsystem Custom Resource. אופרטור Kf מעדכן באופן אוטומטי את config-defaults ConfigMap על סמך הערכים שמוגדרים ב-kfsystem.
כל מרחב משקף את חבילות ה-buildpack האלה בשדה הסטטוס שלו.
כדי לראות את ההגדרה המלאה של מרחב בשם buildpack-docs, אפשר להריץ את הפקודה הבאה:
kf space buildpack-docsGetting Space buildpack-docs API Version: kf.dev/v1alpha1 Kind: Space Metadata: Creation Timestamp: 2020-02-14T15:09:52Z Name: buildpack-docs Self Link: /apis/kf.dev/v1alpha1/spaces/buildpack-docs UID: 0cf1e196-4f3c-11ea-91a4-42010a80008d Status: Build Config: Buildpacks V2: - Name: staticfile_buildpack URL: https://github.com/cloudfoundry/staticfile-buildpack Disabled: false - Name: java_buildpack URL: https://github.com/cloudfoundry/java-buildpack Disabled: false Stacks V2: - Image: cloudfoundry/cflinuxfs3 Name: cflinuxfs3 Stacks V3: - Build Image: cloudfoundry/cnb:cflinuxfs3 Description: A large Cloud Foundry stack based on Ubuntu 18.04 Name: org.cloudfoundry.stacks.cflinuxfs3 Run Image: cloudfoundry/run:full-cnb
בקטע Build Config יש שלושה שדות שחשוב לבדוק:
- Buildpacks V2 מכיל רשימה של חבילות buildpack שתואמות לגרסה 2, לפי הסדר שבו הן יופעלו
- Stacks V2 מציין את ה-stacks שאפשר לבחור כדי להפעיל buildpack build מגרסה 2
- Stacks V3 מציין את ה-stacks שאפשר לבחור כדי להפעיל buildpack build של V3
אפשר גם להציג את הערימות ברשימה באמצעות kf stacks:
kf stacksGetting stacks in Space: buildpack-docs Version Name Build Image Run Image Description V2 cflinuxfs3 cloudfoundry/cflinuxfs3 cloudfoundry/cflinuxfs3 V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3 cloudfoundry/run:full-cnb A large Cloud Foundry stack based on Ubuntu 18.04
קובצי אימג' של build בגרסה 3 כבר כוללים buildpacks מובנים, ולכן צריך להשתמש בפקודה kf buildpacks כדי לקבל את הרשימה:
kf buildpacksGetting buildpacks in Space: buildpack-docs Buildpacks for V2 stacks: Name Position URL staticfile_buildpack 0 https://github.com/cloudfoundry/staticfile-buildpack java_buildpack 1 https://github.com/cloudfoundry/java-buildpack V3 Stack: org.cloudfoundry.stacks.cflinuxfs3: Name Position Version Latest org.cloudfoundry.jdbc 0 v1.0.179 true org.cloudfoundry.jmx 1 v1.0.180 true org.cloudfoundry.go 2 v0.0.2 true org.cloudfoundry.tomcat 3 v1.1.102 true org.cloudfoundry.distzip 4 v1.0.171 true org.cloudfoundry.springboot 5 v1.1.2 true ...
התאמה אישית של חבילות buildpack בגרסה 3
אתם יכולים להתאים אישית את חבילות ה-buildpack שזמינות למפתחים שלכם על ידי יצירת אימג' משלכם של builder עם חבילות ה-buildpack שאליהן הם צריכים לקבל גישה. אפשר גם להשתמש בתמונות שנוצרו על ידי יוצרים אחרים.
שימוש בתמונה של כלי בנייה של צד שלישי
רשימה של חבילות CNB שפורסמו זמינה מ-Buildpack CLI pack.
בזמן כתיבת המאמר הזה, הפלט של pack suggest-stacks הוא:
pack suggest-stacksStacks maintained by the community:Stack ID: heroku-18 Description: The official Heroku stack based on Ubuntu 18.04 Maintainer: Heroku Build Image: heroku/pack:18-build Run Image: heroku/pack:18Stack ID: io.buildpacks.stacks.bionic Description: A minimal Cloud Foundry stack based on Ubuntu 18.04 Maintainer: Cloud Foundry Build Image: cloudfoundry/build:base-cnb Run Image: cloudfoundry/run:base-cnbStack ID: org.cloudfoundry.stacks.cflinuxfs3 Description: A large Cloud Foundry stack based on Ubuntu 18.04 Maintainer: Cloud Foundry Build Image: cloudfoundry/build:full-cnb Run Image: cloudfoundry/run:full-cnbStack ID: org.cloudfoundry.stacks.tiny Description: A tiny Cloud Foundry stack based on Ubuntu 18.04, similar to distroless Maintainer: Cloud Foundry Build Image: cloudfoundry/build:tiny-cnb Run Image: cloudfoundry/run:tiny-cnb
כדי לשנות את Kf כך שישתמש במערך שפורסם על ידי Heroku, עורכים את kfsystem Custom Resource, שמעדכן אוטומטית את config-defaults ConfigMap ב-kf Namespace.
מוסיפים רשומה למפתח spaceStacksV3 כמו בדוגמה הבאה:
kubectl edit kfsystem kfsystemspaceStacksV3: | - name: org.cloudfoundry.stacks.cflinuxfs3 description: A large Cloud Foundry stack based on Ubuntu 18.04 buildImage: cloudfoundry/cnb:cflinuxfs3 runImage: cloudfoundry/run:full-cnb - name: heroku-18 description: The official Heroku stack based on Ubuntu 18.04 buildImage: heroku/pack:18-build runImage: heroku/pack:18
לאחר מכן, מריצים שוב את הפקודה stacks:
kf stacksGetting stacks in Space: buildpack-docs Version Name Build Image Run Image Description V2 cflinuxfs3 cloudfoundry/cflinuxfs3 cloudfoundry/cflinuxfs3 V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3 cloudfoundry/run:full-cnb A large Cloud Foundry stack based on Ubuntu 18.04 V3 heroku-18 heroku/pack:18-build heroku/pack:18 The official Heroku stack based on Ubuntu 18.04
יצירת תמונת builder משלכם
משתמשים ב-Buildpack CLI pack כדי ליצור קובץ אימג' משלכם של builder. אתם יכולים לפעול לפי ההוראות במאמר packעבודה עם קובצי builder באמצעות create-builder כדי ליצור קובץ builder משלכם. אחרי שיוצרים את התמונה, מעבירים אותה למאגר תמונות (container registry) ומוסיפים אותה לkfsystem Custom Resource.
הגדרת מחסנית ברירת מחדל
לאפליקציות יוקצה מחסנית ברירת מחדל אם לא צוינה מחסנית במניפסט שלהן. הסטאק שמוגדר כברירת מחדל הוא הראשון ברשימת הסטאקים בגרסה 2 או בגרסה 3. אלא אם משנים את הערכים, נבחרת חבילת V2 לצורך תאימות ל-Cloud Foundry.
אתם יכולים לחייב את Kf להשתמש במערך V3 במקום במערך V2 על ידי הגדרת השדה spaceDefaultToV3Stack במשאב המותאם אישית kfsystem לערך "true" (kfsystem מעדכן אוטומטית את השדה spaceDefaultToV3Stack התואם ב-ConfigMap config-defaults):
kubectl edit kfsystem kfsystemspaceDefaultToV3Stack: "true"
אפשר גם לשנות את האפשרות הזו לכל מרחב בנפרד על ידי שינוי ההגדרה של השדה spec.buildConfig.defaultToV3Stack ל-true או ל-false. אם לא מוגדר ערך, המערכת משתמשת בערך מ-config-defaults ConfigMap.
הערך config-defaults של spaceDefaultToV3Stack |
המרחב spec.buildConfig.defaultToV3Stack |
ערימת ברירת מחדל |
|---|---|---|
| unset | unset | V2 |
"false" |
unset | V2 |
"true" |
unset | V3 |
| כל | false |
V2 |
| כל | true |
V3 |