Charts
Το Helm χρησιμοποιεί μια μορφή πακεταρίσματος που ονομάζεται charts. Ένα chart είναι μια συλλογή αρχείων που περιγράφουν ένα σύνολο σχετικών πόρων του Kubernetes. Ένα chart μπορεί να χρησιμοποιηθεί για να αναπτύξει κάτι απλό, όπως ένα memcached pod, ή κάτι πολύπλοκο, όπως μια πλήρη στοίβα web εφαρμογής με HTTP servers, βάσεις δεδομένων, caches κ.λπ.
Τα charts δημιουργούνται ως αρχεία διατεταγμένα σε μια συγκεκριμένη δομή καταλόγων. Μπορούν να πακεταριστούν σε versioned αρχεία για ανάπτυξη.
Αν θέλετε να κατεβάσετε και να δείτε τα αρχεία ενός δημοσιευμένου chart, χωρίς να
το εγκαταστήσετε, μπορείτε να το κάνετε με την εντολή helm pull chartrepo/chartname.
Αυτό το έγγραφο εξηγεί τη μορφή των charts και παρέχει βασικές οδηγίες για τη δημιουργία charts με το Helm.
Η Δομή Αρχείων του Chart
Ένα chart είναι οργανωμένο ως μια συλλογή αρχείων μέσα σε έναν κατάλογο. Το
όνομα του καταλόγου είναι το όνομα του chart (χωρίς πληροφορίες έκδοσης). Έτσι,
ένα chart που περιγράφει το WordPress θα αποθηκευόταν σε έναν κατάλογο wordpress/.
Μέσα σε αυτόν τον κατάλογο, το Helm αναμένει μια δομή που ταιριάζει με αυτή:
wordpress/
Chart.yaml # A YAML file containing information about the chart
LICENSE # OPTIONAL: A plain text file containing the license for the chart
README.md # OPTIONAL: A human-readable README file
values.yaml # The default configuration values for this chart
values.schema.json # OPTIONAL: A JSON Schema for imposing a structure on the values.yaml file
charts/ # A directory containing any charts upon which this chart depends.
crds/ # Custom Resource Definitions
templates/ # A directory of templates that, when combined with values,
# will generate valid Kubernetes manifest files.
templates/NOTES.txt # OPTIONAL: A plain text file containing short usage notes
Το Helm δεσμεύει τη χρήση των καταλόγων charts/, crds/ και templates/, καθώς
και των αρχείων με τα παραπάνω ονόματα. Τα υπόλοιπα αρχεία θα παραμείνουν ως έχουν.
Το Αρχείο Chart.yaml
Το αρχείο Chart.yaml είναι απαραίτητο για ένα chart. Περιέχει τα εξής πεδία:
apiVersion: The chart API version (required)
name: The name of the chart (required)
version: The version of the chart (required)
kubeVersion: A SemVer range of compatible Kubernetes versions (optional)
description: A single-sentence description of this project (optional)
type: The type of the chart (optional)
keywords:
- A list of keywords about this project (optional)
home: The URL of this projects home page (optional)
sources:
- A list of URLs to source code for this project (optional)
dependencies: # A list of the chart requirements (optional)
- name: The name of the chart (nginx)
version: The version of the chart ("1.2.3")
repository: (optional) The repository URL ("https://example.com/charts") or alias ("@repo-name")
condition: (optional) A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )
tags: # (optional)
- Tags can be used to group charts for enabling/disabling together
import-values: # (optional)
- ImportValues holds the mapping of source values to parent key to be imported. Each item can be a string or pair of child/parent sublist items.
alias: (optional) Alias to be used for the chart. Useful when you have to add the same chart multiple times
maintainers: # (optional)
- name: The maintainers name (required for each maintainer)
email: The maintainers email (optional for each maintainer)
url: A URL for the maintainer (optional for each maintainer)
icon: A URL to an SVG or PNG image to be used as an icon (optional).
appVersion: The version of the app that this contains (optional). Needn't be SemVer. Quotes recommended.
deprecated: Whether this chart is deprecated (optional, boolean)
annotations:
example: A list of annotations keyed by name (optional).
Από την έκδοση v3.3.2, δεν
επιτρέπονται επιπλέον πεδία. Η προτεινόμενη προσέγγιση είναι να προσθέσετε
προσαρμοσμένα metadata στο πεδίο annotations.
Charts και Εκδοσιοποίηση
Κάθε chart πρέπει να έχει έναν αριθμό έκδοσης. Μια έκδοση πρέπει να ακολουθεί το πρότυπο SemVer 2, αλλά δεν επιβάλλεται αυστηρά. Σε αντίθεση με το Helm Classic, το Helm v2 και μεταγενέστερα χρησιμοποιεί τους αριθμούς έκδοσης ως δείκτες release. Τα πακέτα στα repositories αναγνωρίζονται από το όνομα συν την έκδοση.
Για παράδειγμα, ένα nginx chart του οποίου το πεδίο version έχει οριστεί σε
version: 1.2.3 θα ονομάζεται:
nginx-1.2.3.tgz
Υποστηρίζονται επίσης πιο σύνθετα ονόματα SemVer 2, όπως
version: 1.2.3-alpha.1+ef365. Ωστόσο, τα μη-SemVer ονόματα απορρίπτονται ρητά
από το σύστημα. Εξαίρεση αποτελούν εκδόσεις στη μορφή x ή x.y.
Για παράδειγμα, αν υπάρχει ένα πρόθεμα v ή μια έκδοση χωρίς και τα 3 μέρη
(π.χ. v1.2), το σύστημα θα προσπαθήσει να τη μετατρέψει σε έγκυρη σημασιολογική
έκδοση (π.χ. v1.2.0).
ΣΗΜΕΙΩΣΗ: Ενώ το Helm Classic και το Deployment Manager ήταν πολύ προσανατολισμένα στο GitHub όσον αφορά τα charts, το Helm v2 και μεταγενέστερα δεν βασίζεται ούτε απαιτεί GitHub ή ακόμα και Git. Κατά συνέπεια, δεν χρησιμοποιεί καθόλου Git SHAs για εκδοσιοποίηση.
Το πεδίο version μέσα στο Chart.yaml χρησιμοποιείται από πολλά εργαλεία του Helm,
συμπεριλαμβανομένου του CLI. Κατά τη δημιουργία πακέτου, η εντολή helm package
χρησιμοποιεί την έκδοση που βρίσκει στο Chart.yaml ως τμήμα του ονόματος του
πακέτου. Το σύστημα υποθέτει ότι ο αριθμός έκδοσης στο όνομα του πακέτου chart
ταιριάζει με τον αριθμό έκδοσης στο Chart.yaml. Η αποτυχία ικανοποίησης αυτής
της υπόθεσης θα προκαλέσει σφάλμα.
Το Πεδίο apiVersion
Το πεδίο apiVersion πρέπει να είναι v2 για Helm charts που απαιτούν
τουλάχιστον Helm 3. Τα charts που υποστηρίζουν προηγούμενες εκδόσεις του Helm
έχουν apiVersion ορισμένο σε v1 και εξακολουθούν να είναι εγκαταστάσιμα
από το Helm 3.
Αλλαγές από v1 σε v2:
- Ένα πεδίο
dependenciesπου ορίζει τις εξαρτήσεις του chart, οι οποίες βρίσκονταν σε ξεχωριστό αρχείοrequirements.yamlγια ταv1charts (δείτε Εξαρτήσεις Chart). - Το πεδίο
type, που διακρίνει τα application και library charts (δείτε Τύποι Chart).
Το Πεδίο appVersion
Σημειώστε ότι το πεδίο appVersion δεν σχετίζεται με το πεδίο version. Είναι
ένας τρόπος να προσδιορίσετε την έκδοση της εφαρμογής. Για παράδειγμα, το chart
drupal μπορεί να έχει appVersion: "8.2.1", υποδεικνύοντας ότι η έκδοση
του Drupal που περιλαμβάνεται στο chart (από προεπιλογή) είναι 8.2.1. Αυτό
το πεδίο είναι πληροφοριακό και δεν επηρεάζει τους υπολογισμούς έκδοσης του chart.
Συνιστάται ιδιαίτερα να περικλείετε την έκδοση σε εισαγωγικά. Αναγκάζει τον YAML
parser να αντιμετωπίσει τον αριθμό έκδοσης ως string. Αν το αφήσετε χωρίς
εισαγωγικά, μπορεί να προκληθούν προβλήματα parsing σε ορισμένες περιπτώσεις.
Για παράδειγμα, το YAML ερμηνεύει το 1.0 ως floating point τιμή, και ένα
git commit SHA όπως 1234e10 ως επιστημονική σημειογραφία.
Από το Helm v3.5.0, η εντολή helm create περικλείει το προεπιλεγμένο πεδίο
appVersion σε εισαγωγικά.
Το Πεδίο kubeVersion
Το προαιρετικό πεδίο kubeVersion μπορεί να ορίσει semver περιορισμούς για τις
υποστηριζόμενες εκδόσεις Kubernetes. Το Helm θα επικυρώσει τους περιορισμούς
έκδοσης κατά την εγκατάσταση του chart και θα αποτύχει αν το cluster τρέχει μη
υποστηριζόμενη έκδοση Kubernetes.
Οι περιορισμοί έκδοσης μπορεί να αποτελούνται από AND συγκρίσεις διαχωρισμένες με κενά, όπως
>= 1.13.0 < 1.15.0
οι οποίες μπορούν να συνδυαστούν με τον OR τελεστή || όπως στο παρακάτω
παράδειγμα
>= 1.13.0 < 1.14.0 || >= 1.14.1 < 1.15.0
Σε αυτό το παράδειγμα η έκδοση 1.14.0 εξαιρείται, κάτι που μπορεί να έχει
νόημα αν ένα bug σε συγκεκριμένες εκδόσεις είναι γνωστό ότι εμποδίζει τη
σωστή λειτουργία του chart.
Εκτός από περιορισμούς έκδοσης με τελεστές = != > < >= <=,
υποστηρίζονται και οι εξής συντομεύσεις:
- hyphen ranges για κλειστά διαστήματα, όπου
1.1 - 2.3.4ισοδυναμεί με>= 1.1 <= 2.3.4. - wildcards
x,Xκαι*, όπου1.2.xισοδυναμεί με>= 1.2.0 < 1.3.0. - tilde ranges (επιτρέπονται αλλαγές patch version), όπου
~1.2.3ισοδυναμεί με>= 1.2.3 < 1.3.0. - caret ranges (επιτρέπονται αλλαγές minor version), όπου
^1.2.3ισοδυναμεί με>= 1.2.3 < 2.0.0.
Για λεπτομερή εξήγηση των υποστηριζόμενων semver περιορισμών, δείτε το Masterminds/semver.
Απόσυρση Charts
Κατά τη διαχείριση charts σε ένα Chart Repository, μερικές φορές είναι απαραίτητο
να αποσύρετε ένα chart. Το προαιρετικό πεδίο deprecated στο Chart.yaml
μπορεί να χρησιμοποιηθεί για να επισημάνει ένα chart ως απoσυρμένο. Αν η
τελευταία έκδοση ενός chart στο repository είναι επισημασμένη ως αποσυρμένη,
τότε το chart στο σύνολό του θεωρείται αποσυρμένο. Το όνομα του chart μπορεί
να επαναχρησιμοποιηθεί αργότερα δημοσιεύοντας μια νεότερη έκδοση που δεν είναι
επισημασμένη ως αποσυρμένη. Η ροή εργασίας για την απόσυρση charts είναι:
- Ενημερώστε το
Chart.yamlτου chart για να επισημάνετε το chart ως αποσυρμένο, αυξάνοντας την έκδοση - Δημοσιεύστε τη νέα έκδοση chart στο Chart Repository
- Αφαιρέστε το chart από το source repository (π.χ. git)
Τύποι Chart
Το πεδίο type ορίζει τον τύπο του chart. Υπάρχουν δύο τύποι: application
και library. Ο application είναι ο προεπιλεγμένος τύπος και είναι το τυπικό
chart που μπορεί να λειτουργήσει πλήρως. Το library chart
παρέχει εργαλεία ή συναρτήσεις για τον κατασκευαστή chart. Ένα library chart
διαφέρει από ένα application chart επειδή δεν είναι εγκαταστάσιμο και συνήθως
δεν περιέχει αντικείμενα πόρων.
Σημείωση: Ένα application chart μπορεί να χρησιμοποιηθεί ως library chart.
Αυτό ενεργοποιείται ορίζοντας τον τύπο σε library. Το chart θα αποδοθεί τότε
ως library chart όπου όλα τα εργαλεία και οι συναρτήσεις μπορούν να αξιοποιηθούν.
Όλα τα αντικείμενα πόρων του chart δεν θα αποδοθούν.
Chart LICENSE, README και NOTES
Τα charts μπορούν επίσης να περιέχουν αρχεία που περιγράφουν την εγκατάσταση, τη διαμόρφωση, τη χρήση και την άδεια ενός chart.
Ένα LICENSE είναι ένα απλό αρχείο κειμένου που περιέχει την άδεια χρήσης για το chart. Το chart μπορεί να περιέχει άδεια καθώς μπορεί να έχει προγραμματιστική λογική στα templates και επομένως να μην είναι μόνο διαμόρφωση. Μπορεί επίσης να υπάρχουν ξεχωριστές άδειες για την εφαρμογή που εγκαθίσταται από το chart, αν απαιτείται.
Ένα README για ένα chart πρέπει να είναι μορφοποιημένο σε Markdown (README.md) και γενικά να περιέχει:
- Μια περιγραφή της εφαρμογής ή υπηρεσίας που παρέχει το chart
- Τυχόν προαπαιτούμενα ή απαιτήσεις για την εκτέλεση του chart
- Περιγραφές των επιλογών στο
values.yamlκαι τις προεπιλεγμένες τιμές - Οποιαδήποτε άλλη πληροφορία που μπορεί να είναι σχετική με την εγκατάσταση ή τη διαμόρφωση του chart
Όταν τα hubs και άλλα περιβάλλοντα χρήστη εμφανίζουν λεπτομέρειες για ένα chart,
αυτές οι λεπτομέρειες λαμβάνονται από το περιεχόμενο του αρχείου README.md.
Το chart μπορεί επίσης να περιέχει ένα σύντομο αρχείο κειμένου
templates/NOTES.txt που θα εκτυπώνεται μετά την εγκατάσταση και κατά την
προβολή της κατάστασης ενός release. Αυτό το αρχείο αξιολογείται ως
template και μπορεί να χρησιμοποιηθεί για να εμφανίσει
σημειώσεις χρήσης, επόμενα βήματα, ή οποιαδήποτε άλλη πληροφορία σχετική με
ένα release του chart. Για παράδειγμα, θα μπορούσαν να παρασχεθούν οδηγίες
για σύνδεση σε μια βάση δεδομένων ή πρόσβαση σε ένα web UI. Δεδομένου ότι αυτό
το αρχείο εκτυπώνεται στο STDOUT κατά την εκτέλεση helm install ή helm status,
συνιστάται να διατηρείτε το περιεχόμενο σύντομο και να παραπέμπετε στο README
για περισσότερες λεπτομέρειες.
Εξαρτήσεις Chart
Στο Helm, ένα chart μπορεί να εξαρτάται από οποιονδήποτε αριθμό άλλων charts.
Αυτές οι εξαρτήσεις μπορούν να συνδεθούν δυναμικά χρησιμοποιώντας το πεδίο
dependencies στο Chart.yaml ή να εισαχθούν στον κατάλογο charts/ και
να διαχειριστούν χειροκίνητα.
Διαχείριση Εξαρτήσεων με το Πεδίο dependencies
Τα charts που απαιτούνται από το τρέχον chart ορίζονται ως λίστα στο πεδίο
dependencies.
dependencies:
- name: apache
version: 1.2.3
repository: https://example.com/charts
- name: mysql
version: 3.2.1
repository: https://another.example.com/charts
- Το πεδίο
nameείναι το όνομα του chart που θέλετε. - Το πεδίο
versionείναι η έκδοση του chart που θέλετε. - Το πεδίο
repositoryείναι το πλήρες URL του chart repository. Σημειώστε ότι πρέπει επίσης να χρησιμοποιήσετεhelm repo addγια να προσθέσετε αυτό το repo τοπικά. - Μπορείτε να χρησιμοποιήσετε το όνομα του repo αντί για URL
$ helm repo add fantastic-charts https://charts.helm.sh/incubator
dependencies:
- name: awesomeness
version: 1.0.0
repository: "@fantastic-charts"
Αφού ορίσετε τις εξαρτήσεις, μπορείτε να εκτελέσετε helm dependency update
και θα χρησιμοποιήσει το αρχείο εξαρτήσεων για να κατεβάσει όλα τα καθορισμένα
charts στον κατάλογο charts/ για εσάς.
$ helm dep up foochart
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "local" chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "example" chart repository
...Successfully got an update from the "another" chart repository
Update Complete. Happy Helming!
Saving 2 charts
Downloading apache from repo https://example.com/charts
Downloading mysql from repo https://another.example.com/charts
Όταν η helm dependency update ανακτά charts, θα τα αποθηκεύσει ως chart
archives στον κατάλογο charts/. Για το παραπάνω παράδειγμα, θα περιμένατε
να δείτε τα εξής αρχεία στον κατάλογο charts:
charts/
apache-1.2.3.tgz
mysql-3.2.1.tgz
Πεδίο Alias στις Εξαρτήσεις
Επιπλέον των άλλων πεδίων παραπάνω, κάθε εγγραφή εξαρτήσεων μπορεί να περιέχει
το προαιρετικό πεδίο alias.
Η προσθήκη ενός alias για ένα chart εξάρτησης θα τοποθετήσει ένα chart στις εξαρτήσεις χρησιμοποιώντας το alias ως όνομα της νέας εξάρτησης.
Μπορείτε να χρησιμοποιήσετε το alias σε περιπτώσεις όπου χρειάζεται να
προσπελάσετε ένα chart με άλλο όνομα(τα).
# parentchart/Chart.yaml \{#parentchartchartyaml} {#parentchartchartyaml}
dependencies:
- name: subchart
repository: http://localhost:10191
version: 0.1.0
alias: new-subchart-1
- name: subchart
repository: http://localhost:10191
version: 0.1.0
alias: new-subchart-2
- name: subchart
repository: http://localhost:10191
version: 0.1.0
Στο παραπάνω παράδειγμα θα πάρουμε συνολικά 3 εξαρτήσεις για το parentchart:
subchart
new-subchart-1
new-subchart-2
Ο χειροκίνητος τρόπος για να επιτευχθεί αυτό είναι με copy/paste του ίδιου
chart στον κατάλογο charts/ πολλές φορές με διαφορετικά ονόματα.
Πεδία Tags και Condition στις Εξαρτήσεις
Επιπλέον των άλλων πεδίων παραπάνω, κάθε εγγραφή εξαρτήσεων μπορεί να περιέχει
τα προαιρετικά πεδία tags και condition.
Όλα τα charts φορτώνονται από προεπιλογή. Αν υπάρχουν πεδία tags ή condition,
θα αξιολογηθούν και θα χρησιμοποιηθούν για τον έλεγχο φόρτωσης του/των chart(s)
στα οποία εφαρμόζονται.
Condition - Το πεδίο condition περιέχει μία ή περισσότερες διαδρομές YAML (διαχωρισμένες με κόμμα). Αν αυτή η διαδρομή υπάρχει στα values του ανώτερου γονικού και επιλύεται σε boolean τιμή, το chart θα ενεργοποιηθεί ή απενεργοποιηθεί βάσει αυτής της boolean τιμής. Μόνο η πρώτη έγκυρη διαδρομή που βρέθηκε στη λίστα αξιολογείται και αν δεν υπάρχουν διαδρομές, τότε η condition δεν έχει αποτέλεσμα.
Tags - Το πεδίο tags είναι μια YAML λίστα ετικετών που σχετίζονται με αυτό το chart. Στα values του ανώτερου γονικού, όλα τα charts με tags μπορούν να ενεργοποιηθούν ή να απενεργοποιηθούν καθορίζοντας το tag και μια boolean τιμή.
# parentchart/Chart.yaml
dependencies:
- name: subchart1
repository: http://localhost:10191
version: 0.1.0
condition: subchart1.enabled,global.subchart1.enabled
tags:
- front-end
- subchart1
- name: subchart2
repository: http://localhost:10191
version: 0.1.0
condition: subchart2.enabled,global.subchart2.enabled
tags:
- back-end
- subchart2
# parentchart/values.yaml \{#parentchartvaluesyaml}
subchart1:
enabled: true
tags:
front-end: false
back-end: true
Στο παραπάνω παράδειγμα, όλα τα charts με το tag front-end θα απενεργοποιηθούν,
αλλά επειδή η διαδρομή subchart1.enabled αξιολογείται ως 'true' στα values
του γονικού, η condition θα υπερισχύσει του tag front-end και το subchart1
θα ενεργοποιηθεί.
Δεδομένου ότι το subchart2 έχει tag back-end και αυτό το tag αξιολογείται
σε true, το subchart2 θα ενεργοποιηθεί. Επίσης σημειώστε ότι παρόλο που
το subchart2 έχει καθορισμένη condition, δεν υπάρχει αντίστοιχη διαδρομή
και τιμή στα values του γονικού, οπότε αυτή η condition δεν έχει αποτέλεσμα.
Χρήση του CLI με Tags και Conditions
Η παράμετρος --set μπορεί να χρησιμοποιηθεί όπως συνήθως για να αλλάξει
τις τιμές tag και condition.
helm install --set tags.front-end=true --set subchart2.enabled=false
Επίλυση Tags και Conditions
- Οι conditions (όταν ορίζονται στα values) υπερισχύουν πάντα των tags. Η πρώτη διαδρομή condition που υπάρχει κερδίζει και οι επόμενες για αυτό το chart αγνοούνται.
- Τα tags αξιολογούνται ως 'αν οποιοδήποτε από τα tags του chart είναι true, τότε ενεργοποίησε το chart'.
- Οι τιμές tags και conditions πρέπει να οριστούν στα values του ανώτερου γονικού.
- Το κλειδί
tags:στα values πρέπει να είναι κλειδί ανώτατου επιπέδου. Τα globals και εμφωλευμένοι πίνακεςtags:δεν υποστηρίζονται προς το παρόν.
Εισαγωγή Τιμών Θυγατρικών μέσω Εξαρτήσεων
Σε ορισμένες περιπτώσεις είναι επιθυμητό να επιτρέπεται στις τιμές ενός
θυγατρικού chart να διαδοθούν στο γονικό chart και να μοιραστούν ως κοινές
προεπιλογές. Ένα επιπλέον πλεονέκτημα της χρήσης της μορφής exports είναι
ότι θα επιτρέψει σε μελλοντικά εργαλεία να εξετάζουν τις ρυθμιζόμενες τιμές
χρήστη.
Τα κλειδιά που περιέχουν τις τιμές προς εισαγωγή μπορούν να καθοριστούν στο
dependencies του γονικού chart στο πεδίο import-values χρησιμοποιώντας
μια λίστα YAML. Κάθε στοιχείο στη λίστα είναι ένα κλειδί που εισάγεται από
το πεδίο exports του θυγατρικού chart.
Για να εισάγετε τιμές που δεν περιέχονται στο κλειδί exports, χρησιμοποιήστε
τη μορφή child-parent. Παραδείγματα και
των δύο μορφών περιγράφονται παρακάτω.
Χρήση της Μορφής Exports
Αν το αρχείο values.yaml ενός θυγατρικού chart περιέχει ένα πεδίο exports
στη ρίζα, τα περιεχόμενά του μπορούν να εισαχθούν απευθείας στα values του
γονικού καθορίζοντας τα κλειδιά προς εισαγωγή όπως στο παρακάτω παράδειγμα:
# parent's Chart.yaml file \{#parents-chartyaml-file} {#parents-chartyaml-file}
dependencies:
- name: subchart
repository: http://localhost:10191
version: 0.1.0
import-values:
- data
# child's values.yaml file \{#childs-valuesyaml-file}
exports:
data:
myint: 99
Δεδομένου ότι καθορίζουμε το κλειδί data στη λίστα εισαγωγών, το Helm ψάχνει
στο πεδίο exports του θυγατρικού chart για το κλειδί data και εισάγει
τα περιεχόμενά του.
Τα τελικά values του γονικού θα περιέχουν το εξαγόμενο πεδίο:
# parent's values \{#parents-values}
myint: 99
Σημειώστε ότι το γονικό κλειδί data δεν περιέχεται στα τελικά values του
γονικού. Αν χρειάζεστε να καθορίσετε το γονικό κλειδί, χρησιμοποιήστε τη
μορφή 'child-parent'.
Χρήση της Μορφής Child-Parent
Για να προσπελάσετε τιμές που δεν περιέχονται στο κλειδί exports των values
του θυγατρικού chart, θα πρέπει να καθορίσετε το κλειδί πηγή των τιμών
προς εισαγωγή (child) και τη διαδρομή προορισμού στα values του γονικού
chart (parent).
Το import-values στο παρακάτω παράδειγμα δίνει εντολή στο Helm να πάρει
οποιεσδήποτε τιμές βρεθούν στη διαδρομή child: και να τις αντιγράψει
στα values του γονικού στη διαδρομή που καθορίζεται στο parent:
# parent's Chart.yaml file
dependencies:
- name: subchart1
repository: http://localhost:10191
version: 0.1.0
...
import-values:
- child: default.data
parent: myimports
Στο παραπάνω παράδειγμα, οι τιμές που βρίσκονται στο default.data στα values
του subchart1 θα εισαχθούν στο κλειδί myimports στα values του γονικού
chart όπως περιγράφεται παρακάτω:
# parent's values.yaml file \{#parents-valuesyaml-file}
myimports:
myint: 0
mybool: false
mystring: "helm rocks!"
# subchart1's values.yaml file \{#subchart1s-valuesyaml-file}
default:
data:
myint: 999
mybool: true
Τα τελικά values του γονικού chart θα είναι:
# parent's final values \{#parents-final-values}
myimports:
myint: 999
mybool: true
mystring: "helm rocks!"
Τα τελικά values του γονικού περιέχουν τώρα τα πεδία myint και mybool
που εισήχθησαν από το subchart1.
Χειροκίνητη Διαχείριση Εξαρτήσεων μέσω του Καταλόγου charts/
Αν επιθυμείται περισσότερος έλεγχος στις εξαρτήσεις, αυτές οι εξαρτήσεις
μπορούν να εκφραστούν ρητά αντιγράφοντας τα charts εξαρτήσεων στον κατάλογο
charts/.
Μια εξάρτηση πρέπει να είναι ένας μη συμπιεσμένος κατάλογος chart, αλλά το
όνομά του δεν μπορεί να ξεκινά με _ ή .. Τέτοια αρχεία αγνοούνται από
τον φορτωτή chart.
Για παράδειγμα, αν το WordPress chart εξαρτάται από το Apache chart, το Apache
chart (της σωστής έκδοσης) παρέχεται στον κατάλογο charts/ του WordPress
chart:
wordpress:
Chart.yaml
# ...
charts/
apache/
Chart.yaml
# ...
mysql/
Chart.yaml
# ...
Το παραπάνω παράδειγμα δείχνει πώς το WordPress chart εκφράζει την εξάρτησή
του από το Apache και το MySQL συμπεριλαμβάνοντας αυτά τα charts μέσα στον
κατάλογο charts/ του.
ΣΥΜΒΟΥΛΗ: Για να τοποθετήσετε μια εξάρτηση στον κατάλογο charts/,
χρησιμοποιήστε την εντολή helm pull
Λειτουργικές Πτυχές της Χρήσης Εξαρτήσεων
Οι παραπάνω ενότητες εξηγούν πώς να καθορίσετε εξαρτήσεις chart, αλλά πώς
επηρεάζει αυτό την εγκατάσταση chart χρησιμοποιώντας helm install και
helm upgrade;
Υποθέστε ότι ένα chart με όνομα "A" δημιουργεί τα εξής αντικείμενα Kubernetes:
- namespace "A-Namespace"
- statefulset "A-StatefulSet"
- service "A-Service"
Επιπλέον, το A εξαρτάται από το chart B που δημιουργεί αντικείμενα:
- namespace "B-Namespace"
- replicaset "B-ReplicaSet"
- service "B-Service"
Μετά την εγκατάσταση/αναβάθμιση του chart A, δημιουργείται/τροποποιείται ένα μόνο Helm release. Το release θα δημιουργήσει/ενημερώσει όλα τα παραπάνω αντικείμενα Kubernetes με την εξής σειρά:
- A-Namespace
- B-Namespace
- A-Service
- B-Service
- B-ReplicaSet
- A-StatefulSet
Αυτό συμβαίνει επειδή όταν το Helm εγκαθιστά/αναβαθμίζει charts, τα αντικείμενα Kubernetes από τα charts και όλες τις εξαρτήσεις τους:
- συγκεντρώνονται σε ένα ενιαίο σύνολο· στη συνέχεια
- ταξινομούνται κατά τύπο και έπειτα κατά όνομα· και τέλος
- δημιουργούνται/ενημερώνονται με αυτή τη σειρά.
Επομένως, δημιουργείται ένα μόνο release με όλα τα αντικείμενα για το chart και τις εξαρτήσεις του.
Η σειρά εγκατάστασης των τύπων Kubernetes δίνεται από την απαρίθμηση InstallOrder στο kind_sorter.go (δείτε τον πηγαίο κώδικα του Helm).
Templates και Values
Τα Helm Chart templates γράφονται στη γλώσσα template της Go, με την προσθήκη 50 και πλέον συναρτήσεων template από τη βιβλιοθήκη Sprig και μερικές άλλες εξειδικευμένες συναρτήσεις.
Όλα τα αρχεία template αποθηκεύονται στον φάκελο templates/ ενός chart.
Όταν το Helm αποδίδει τα charts, θα περάσει κάθε αρχείο σε αυτόν τον κατάλογο
μέσω της μηχανής template.
Οι τιμές για τα templates παρέχονται με δύο τρόπους:
- Οι προγραμματιστές chart μπορούν να παρέχουν ένα αρχείο με όνομα
values.yamlμέσα σε ένα chart. Αυτό το αρχείο μπορεί να περιέχει προεπιλεγμένες τιμές. - Οι χρήστες chart μπορούν να παρέχουν ένα αρχείο YAML που περιέχει τιμές.
Αυτό μπορεί να παρασχεθεί στη γραμμή εντολών με
helm install.
Όταν ένας χρήστης παρέχει προσαρμοσμένες τιμές, αυτές οι τιμές θα υπερισχύσουν
των τιμών στο αρχείο values.yaml του chart.
Αρχεία Template
Τα αρχεία template ακολουθούν τις τυπικές συμβάσεις για τη σύνταξη Go templates (δείτε την τεκμηρίωση του πακέτου text/template της Go για λεπτομέρειες). Ένα παράδειγμα αρχείου template μπορεί να μοιάζει κάπως έτσι:
apiVersion: v1
kind: ReplicationController
metadata:
name: deis-database
namespace: deis
labels:
app.kubernetes.io/managed-by: deis
spec:
replicas: 1
selector:
app.kubernetes.io/name: deis-database
template:
metadata:
labels:
app.kubernetes.io/name: deis-database
spec:
serviceAccount: deis-database
containers:
- name: deis-database
image: {{ .Values.imageRegistry }}/postgres:{{ .Values.dockerTag }}
imagePullPolicy: {{ .Values.pullPolicy }}
ports:
- containerPort: 5432
env:
- name: DATABASE_STORAGE
value: {{ default "minio" .Values.storage }}
Το παραπάνω παράδειγμα, βασισμένο χαλαρά στο
https://github.com/deis/charts, είναι ένα
template για έναν Kubernetes replication controller. Μπορεί να χρησιμοποιήσει
τις εξής τέσσερις τιμές template (συνήθως ορίζονται σε ένα αρχείο values.yaml):
imageRegistry: Το source registry για το Docker image.dockerTag: Το tag για το docker image.pullPolicy: Η Kubernetes pull policy.storage: Το storage backend, του οποίου η προεπιλογή ορίζεται σε"minio"
Όλες αυτές οι τιμές ορίζονται από τον συγγραφέα template. Το Helm δεν απαιτεί ούτε επιβάλλει παραμέτρους.
Για να δείτε πολλά λειτουργικά charts, δείτε το Artifact Hub του CNCF.
Προκαθορισμένες Τιμές
Οι τιμές που παρέχονται μέσω ενός αρχείου values.yaml (ή μέσω της σημαίας
--set) είναι προσβάσιμες από το αντικείμενο .Values σε ένα template.
Αλλά υπάρχουν και άλλα προκαθορισμένα δεδομένα που μπορείτε να προσπελάσετε
στα templates σας.
Οι ακόλουθες τιμές είναι προκαθορισμένες, είναι διαθέσιμες σε κάθε template και δεν μπορούν να παρακαμφθούν. Όπως με όλες τις τιμές, τα ονόματα είναι case sensitive.
Release.Name: Το όνομα του release (όχι του chart)Release.Namespace: Το namespace στο οποίο εκδόθηκε το chart.Release.Service: Η υπηρεσία που διεξήγαγε το release.Release.IsUpgrade: Ορίζεται σε true αν η τρέχουσα λειτουργία είναι αναβάθμιση ή rollback.Release.IsInstall: Ορίζεται σε true αν η τρέχουσα λειτουργία είναι εγκατάσταση.Chart: Τα περιεχόμενα τουChart.yaml. Έτσι, η έκδοση chart είναι διαθέσιμη ωςChart.Versionκαι οι maintainers στοChart.Maintainers.Files: Ένα map-like αντικείμενο που περιέχει όλα τα μη ειδικά αρχεία στο chart. Αυτό δεν θα σας δώσει πρόσβαση στα templates, αλλά θα σας δώσει πρόσβαση σε επιπλέον αρχεία που υπάρχουν (εκτός αν εξαιρούνται χρησιμοποιώντας.helmignore). Τα αρχεία μπορούν να προσπελαστούν χρησιμοποιώντας{{ index .Files "file.name" }}ή χρησιμοποιώντας τη συνάρτηση{{.Files.Get name }}. Μπορείτε επίσης να προσπελάσετε τα περιεχόμενα του αρχείου ως[]byteχρησιμοποιώντας{{ .Files.GetBytes }}Capabilities: Ένα map-like αντικείμενο που περιέχει πληροφορίες για τις εκδόσεις του Kubernetes ({{ .Capabilities.KubeVersion }}) και τις υποστηριζόμενες εκδόσεις Kubernetes API ({{ .Capabilities.APIVersions.Has "batch/v1" }})
ΣΗΜΕΙΩΣΗ: Οποιαδήποτε άγνωστα πεδία του Chart.yaml θα απορριφθούν.
Δεν θα είναι προσβάσιμα μέσα στο αντικείμενο Chart. Επομένως, το Chart.yaml
δεν μπορεί να χρησιμοποιηθεί για να περάσετε αυθαίρετα δομημένα δεδομένα
στο template. Το αρχείο values όμως μπορεί να χρησιμοποιηθεί για αυτό.
Αρχεία Values
Λαμβάνοντας υπόψη το template στην προηγούμενη ενότητα, ένα αρχείο values.yaml
που παρέχει τις απαραίτητες τιμές θα έμοιαζε έτσι:
imageRegistry: "quay.io/deis"
dockerTag: "latest"
pullPolicy: "Always"
storage: "s3"
Ένα αρχείο values είναι μορφοποιημένο σε YAML. Ένα chart μπορεί να περιλαμβάνει
ένα προεπιλεγμένο αρχείο values.yaml. Η εντολή helm install επιτρέπει στον
χρήστη να παρακάμψει τιμές παρέχοντας επιπλέον τιμές YAML:
$ helm install --generate-name --values=myvals.yaml wordpress
Όταν οι τιμές περνιούνται με αυτόν τον τρόπο, θα συγχωνευτούν με το προεπιλεγμένο
αρχείο values. Για παράδειγμα, θεωρήστε ένα αρχείο myvals.yaml που μοιάζει
έτσι:
storage: "gcs"
Όταν αυτό συγχωνευτεί με το values.yaml στο chart, το τελικό περιεχόμενο
θα είναι:
imageRegistry: "quay.io/deis"
dockerTag: "latest"
pullPolicy: "Always"
storage: "gcs"
Σημειώστε ότι μόνο το τελευταίο πεδίο παρακάμφθηκε.
ΣΗΜΕΙΩΣΗ: Το προεπιλεγμένο αρχείο values που περιλαμβάνεται μέσα σε ένα
chart πρέπει να ονομάζεται values.yaml. Αλλά τα αρχεία που καθορίζονται
στη γραμμή εντολών μπορούν να έχουν οποιοδήποτε όνομα.
ΣΗΜΕΙΩΣΗ: Αν χρησιμοποιηθεί η σημαία --set στο helm install ή
helm upgrade, αυτές οι τιμές απλά μετατρέπονται σε YAML στην πλευρά
του client.
ΣΗΜΕΙΩΣΗ: Αν υπάρχουν απαιτούμενες εγγραφές στο αρχείο values, μπορούν να δηλωθούν ως υποχρεωτικές στο template του chart χρησιμοποιώντας τη συνάρτηση 'required'
Οποιαδήποτε από αυτές τις τιμές είναι στη συνέχεια προσβάσιμες μέσα σε templates
χρησιμοποιώντας το αντικείμενο .Values:
apiVersion: v1
kind: ReplicationController
metadata:
name: deis-database
namespace: deis
labels:
app.kubernetes.io/managed-by: deis
spec:
replicas: 1
selector:
app.kubernetes.io/name: deis-database
template:
metadata:
labels:
app.kubernetes.io/name: deis-database
spec:
serviceAccount: deis-database
containers:
- name: deis-database
image: {{ .Values.imageRegistry }}/postgres:{{ .Values.dockerTag }}
imagePullPolicy: {{ .Values.pullPolicy }}
ports:
- containerPort: 5432
env:
- name: DATABASE_STORAGE
value: {{ default "minio" .Values.storage }}
Εμβέλεια, Εξαρτήσεις και Values
Τα αρχεία values μπορούν να δηλώσουν τιμές για το chart ανώτατου επιπέδου,
καθώς και για οποιοδήποτε από τα charts που περιλαμβάνονται στον κατάλογο
charts/ αυτού του chart. Ή, για να το θέσουμε διαφορετικά, ένα αρχείο values
μπορεί να παρέχει τιμές στο chart καθώς και σε οποιαδήποτε από τις εξαρτήσεις
του. Για παράδειγμα, το επιδεικτικό WordPress chart παραπάνω έχει τόσο
mysql όσο και apache ως εξαρτήσεις. Το αρχείο values θα μπορούσε να παρέχει
τιμές σε όλα αυτά τα στοιχεία:
title: "My WordPress Site" # Sent to the WordPress template
mysql:
max_connections: 100 # Sent to MySQL
password: "secret"
apache:
port: 8080 # Passed to Apache
Τα charts σε ανώτερο επίπεδο έχουν πρόσβαση σε όλες τις μεταβλητές που ορίζονται
από κάτω. Έτσι το WordPress chart μπορεί να προσπελάσει τον κωδικό MySQL ως
.Values.mysql.password. Αλλά τα charts χαμηλότερου επιπέδου δεν μπορούν να
προσπελάσουν πράγματα στα γονικά charts, οπότε το MySQL δεν θα μπορεί να
προσπελάσει την ιδιότητα title. Ούτε, εξάλλου, μπορεί να προσπελάσει το
apache.port.
Οι τιμές έχουν namespaces, αλλά τα namespaces περικόπτονται. Έτσι για το
WordPress chart, μπορεί να προσπελάσει το πεδίο κωδικού MySQL ως
.Values.mysql.password. Αλλά για το MySQL chart, η εμβέλεια των τιμών
έχει μειωθεί και το πρόθεμα namespace έχει αφαιρεθεί, οπότε θα δει το πεδίο
κωδικού απλά ως .Values.password.
Global Values
Από την έκδοση 2.0.0-Alpha.2, το Helm υποστηρίζει ειδικές "global" τιμές. Θεωρήστε αυτή την τροποποιημένη έκδοση του προηγούμενου παραδείγματος:
title: "My WordPress Site" # Sent to the WordPress template
global:
app: MyWordPress
mysql:
max_connections: 100 # Sent to MySQL
password: "secret"
apache:
port: 8080 # Passed to Apache
Τα παραπάνω προσθέτουν μια ενότητα global με την τιμή app: MyWordPress.
Αυτή η τιμή είναι διαθέσιμη σε όλα τα charts ως .Values.global.app.
Για παράδειγμα, τα templates του mysql μπορούν να προσπελάσουν το app ως
{{ .Values.global.app}}, και το ίδιο μπορεί να κάνει και το chart apache.
Ουσιαστικά, το αρχείο values παραπάνω αναπαράγεται έτσι:
title: "My WordPress Site" # Sent to the WordPress template
global:
app: MyWordPress
mysql:
global:
app: MyWordPress
max_connections: 100 # Sent to MySQL
password: "secret"
apache:
global:
app: MyWordPress
port: 8080 # Passed to Apache
Αυτό παρέχει έναν τρόπο κοινής χρήσης μιας μεταβλητής ανώτατου επιπέδου με
όλα τα subcharts, κάτι που είναι χρήσιμο για ρύθμιση ιδιοτήτων metadata
όπως labels.
Αν ένα subchart δηλώνει μια global μεταβλητή, αυτή η global θα περάσει προς τα κάτω (στα subcharts του subchart), αλλά όχι προς τα πάνω στο γονικό chart. Δεν υπάρχει τρόπος για ένα subchart να επηρεάσει τις τιμές του γονικού chart.
Επίσης, οι global μεταβλητές των γονικών charts υπερισχύουν των global μεταβλητών από τα subcharts.
Αρχεία Schema
Μερικές φορές, ένας συντηρητής chart μπορεί να θέλει να ορίσει μια δομή
για τα values του. Αυτό μπορεί να γίνει ορίζοντας ένα schema στο αρχείο
values.schema.json. Ένα schema αναπαρίσταται ως
JSON Schema. Μπορεί να μοιάζει κάπως έτσι:
{
"$schema": "https://json-schema.org/draft-07/schema#",
"properties": {
"image": {
"description": "Container Image",
"properties": {
"repo": {
"type": "string"
},
"tag": {
"type": "string"
}
},
"type": "object"
},
"name": {
"description": "Service name",
"type": "string"
},
"port": {
"description": "Port",
"minimum": 0,
"type": "integer"
},
"protocol": {
"type": "string"
}
},
"required": [
"protocol",
"port"
],
"title": "Values",
"type": "object"
}
Αυτό το schema θα εφαρμοστεί στα values για να τα επικυρώσει. Η επικύρωση πραγματοποιείται όταν καλούνται οποιεσδήποτε από τις εξής εντολές:
helm installhelm upgradehelm linthelm template
Ένα παράδειγμα αρχείου values.yaml που πληροί τις απαιτήσεις αυτού του
schema μπορεί να μοιάζει κάπως έτσι:
name: frontend
protocol: https
port: 443
Σημειώστε ότι το schema εφαρμόζεται στο τελικό αντικείμενο .Values και
όχι μόνο στο αρχείο values.yaml. Αυτό σημαίνει ότι το ακόλουθο αρχείο
yaml είναι έγκυρο, δεδομένου ότι το chart εγκαθίσταται με την κατάλληλη
επιλογή --set που φαίνεται παρακάτω.
name: frontend
protocol: https
helm install --set port=443
Επιπλέον, το τελικό αντικείμενο .Values ελέγχεται έναντι όλων των schemas
των subcharts. Αυτό σημαίνει ότι οι περιορισμοί σε ένα subchart δεν μπορούν
να παρακαμφθούν από ένα γονικό chart. Αυτό λειτουργεί και αντίστροφα - αν
ένα subchart έχει μια απαίτηση που δεν ικανοποιείται στο αρχείο values.yaml
του subchart, το γονικό chart πρέπει να ικανοποιήσει αυτούς τους περιορισμούς
για να είναι έγκυρο.
Η επικύρωση schema μπορεί να απενεργοποιηθεί ορίζοντας την παρακάτω επιλογή. Αυτό είναι ιδιαίτερα χρήσιμο σε περιβάλλοντα air-gapped όταν το αρχείο JSON Schema ενός chart περιέχει απομακρυσμένες αναφορές.
helm install --skip-schema-validation
Αναφορές
Όσον αφορά τη σύνταξη templates, values και αρχείων schema, υπάρχουν αρκετές τυπικές αναφορές που θα σας βοηθήσουν.
Custom Resource Definitions (CRDs)
Το Kubernetes παρέχει έναν μηχανισμό για τη δήλωση νέων τύπων αντικειμένων Kubernetes. Χρησιμοποιώντας CustomResourceDefinitions (CRDs), οι προγραμματιστές Kubernetes μπορούν να δηλώσουν προσαρμοσμένους τύπους πόρων.
Στο Helm 3, τα CRDs αντιμετωπίζονται ως ειδικός τύπος αντικειμένου. Εγκαθίστανται πριν από το υπόλοιπο chart και υπόκεινται σε ορισμένους περιορισμούς.
Τα αρχεία YAML CRD πρέπει να τοποθετούνται στον κατάλογο crds/ μέσα
σε ένα chart. Πολλά CRDs (διαχωρισμένα με δείκτες αρχής και τέλους YAML)
μπορούν να τοποθετηθούν στο ίδιο αρχείο. Το Helm θα προσπαθήσει να φορτώσει
όλα τα αρχεία στον κατάλογο CRD στο Kubernetes.
Τα αρχεία CRD δεν μπορούν να είναι templated. Πρέπει να είναι απλά έγγραφα YAML.
Όταν το Helm εγκαθιστά ένα νέο chart, θα ανεβάσει τα CRDs, θα περιμένει
μέχρι τα CRDs να γίνουν διαθέσιμα από τον API server, και μετά θα ξεκινήσει
τη μηχανή template, θα αποδώσει το υπόλοιπο chart και θα το ανεβάσει στο
Kubernetes. Λόγω αυτής της σειράς, οι πληροφορίες CRD είναι διαθέσιμες
στο αντικείμενο .Capabilities στα Helm templates, και τα Helm templates
μπορούν να δημιουργήσουν νέα instances αντικειμένων που δηλώθηκαν σε CRDs.
Για παράδειγμα, αν το chart σας είχε ένα CRD για CronTab στον κατάλογο
crds/, μπορείτε να δημιουργήσετε instances του είδους CronTab στον
κατάλογο templates/:
crontabs/
Chart.yaml
crds/
crontab.yaml
templates/
mycrontab.yaml
Το αρχείο crontab.yaml πρέπει να περιέχει το CRD χωρίς οδηγίες template:
kind: CustomResourceDefinition
metadata:
name: crontabs.stable.example.com
spec:
group: stable.example.com
versions:
- name: v1
served: true
storage: true
scope: Namespaced
names:
plural: crontabs
singular: crontab
kind: CronTab
Στη συνέχεια, το template mycrontab.yaml μπορεί να δημιουργήσει ένα νέο
CronTab (χρησιμοποιώντας templates ως συνήθως):
apiVersion: stable.example.com
kind: CronTab
metadata:
name: {{ .Values.name }}
spec:
# ...
Το Helm θα διασφαλίσει ότι το είδος CronTab έχει εγκατασταθεί και είναι
διαθέσιμο από τον Kubernetes API server πριν προχωρήσει στην εγκατάσταση
των πραγμάτων στο templates/.
Περιορισμοί στα CRDs
Σε αντίθεση με τα περισσότερα αντικείμενα στο Kubernetes, τα CRDs εγκαθίστανται globally. Για αυτό τον λόγο, το Helm ακολουθεί μια πολύ προσεκτική προσέγγιση στη διαχείριση CRDs. Τα CRDs υπόκεινται στους εξής περιορισμούς:
- Τα CRDs δεν επανεγκαθίστανται ποτέ. Αν το Helm διαπιστώσει ότι τα CRDs
στον κατάλογο
crds/υπάρχουν ήδη (ανεξαρτήτως έκδοσης), το Helm δεν θα προσπαθήσει να τα εγκαταστήσει ή να τα αναβαθμίσει. - Τα CRDs δεν εγκαθίστανται ποτέ κατά την αναβάθμιση ή το rollback. Το Helm θα δημιουργήσει CRDs μόνο κατά τις λειτουργίες εγκατάστασης.
- Τα CRDs δεν διαγράφονται ποτέ. Η διαγραφή ενός CRD διαγράφει αυτόματα όλα τα περιεχόμενα του CRD σε όλα τα namespaces στο cluster. Κατά συνέπεια, το Helm δεν θα διαγράψει CRDs.
Οι διαχειριστές που θέλουν να αναβαθμίσουν ή να διαγράψουν CRDs ενθαρρύνονται να το κάνουν χειροκίνητα και με μεγάλη προσοχή.
Χρήση του Helm για Διαχείριση Charts
Το εργαλείο helm έχει αρκετές εντολές για εργασία με charts.
Μπορεί να δημιουργήσει ένα νέο chart για εσάς:
$ helm create mychart
Created mychart/
Αφού επεξεργαστείτε ένα chart, το helm μπορεί να το πακετάρει σε ένα
chart archive για εσάς:
$ helm package mychart
Archived mychart-0.1.-.tgz
Μπορείτε επίσης να χρησιμοποιήσετε το helm για να σας βοηθήσει να βρείτε
προβλήματα με τη μορφοποίηση ή τις πληροφορίες του chart σας:
$ helm lint mychart
No issues found
Chart Repositories
Ένα chart repository είναι ένας HTTP server που φιλοξενεί ένα ή περισσότερα
πακεταρισμένα charts. Ενώ το helm μπορεί να χρησιμοποιηθεί για τη διαχείριση
τοπικών καταλόγων chart, όταν πρόκειται για κοινή χρήση charts, ο προτιμώμενος
μηχανισμός είναι ένα chart repository.
Οποιοσδήποτε HTTP server που μπορεί να εξυπηρετεί αρχεία YAML και tar και μπορεί να απαντά σε αιτήματα GET μπορεί να χρησιμοποιηθεί ως server repository. Η ομάδα του Helm έχει δοκιμάσει ορισμένους servers, συμπεριλαμβανομένου του Google Cloud Storage με ενεργοποιημένη τη λειτουργία website και του S3 με ενεργοποιημένη τη λειτουργία website.
Ένα repository χαρακτηρίζεται κυρίως από την παρουσία ενός ειδικού αρχείου
που ονομάζεται index.yaml που έχει μια λίστα με όλα τα πακέτα που παρέχονται
από το repository, μαζί με metadata που επιτρέπουν την ανάκτηση και επαλήθευση
αυτών των πακέτων.
Στην πλευρά του client, τα repositories διαχειρίζονται με τις εντολές
helm repo. Ωστόσο, το Helm δεν παρέχει εργαλεία για την αποστολή charts
σε απομακρυσμένους servers repository. Αυτό συμβαίνει επειδή κάτι τέτοιο
θα πρόσθετε σημαντικές απαιτήσεις σε έναν server υλοποίησης, και επομένως
θα αύξανε το εμπόδιο για τη δημιουργία ενός repository.
Chart Starter Packs
Η εντολή helm create δέχεται μια προαιρετική επιλογή --starter που σας
επιτρέπει να καθορίσετε ένα "starter chart". Επίσης, η επιλογή starter έχει
ένα σύντομο alias -p.
Παραδείγματα χρήσης:
helm create my-chart --starter starter-name
helm create my-chart -p starter-name
helm create my-chart -p /absolute/path/to/starter-name
Τα starters είναι απλά κανονικά charts, αλλά βρίσκονται στο
$XDG_DATA_HOME/helm/starters. Ως προγραμματιστής chart, μπορείτε να
δημιουργήσετε charts που είναι ειδικά σχεδιασμένα για χρήση ως starters.
Τέτοια charts πρέπει να σχεδιάζονται με τις εξής σκέψεις στο μυαλό:
- Το
Chart.yamlθα αντικατασταθεί από τον generator. - Οι χρήστες θα αναμένουν να τροποποιήσουν τα περιεχόμενα ενός τέτοιου chart, οπότε η τεκμηρίωση πρέπει να υποδεικνύει πώς μπορούν οι χρήστες να το κάνουν.
- Όλες οι εμφανίσεις του
<CHARTNAME>θα αντικατασταθούν με το καθορισμένο όνομα chart, ώστε τα starter charts να μπορούν να χρησιμοποιηθούν ως templates, εκτός από ορισμένα αρχεία μεταβλητών. Για παράδειγμα, αν χρησιμοποιείτε προσαρμοσμένα αρχεία στον κατάλογοvarsή ορισμένα αρχείαREADME.md, το<CHARTNAME>ΔΕΝ θα αντικατασταθεί μέσα σε αυτά. Επιπλέον, η περιγραφή chart δεν κληρονομείται.
Προς το παρόν, ο μόνος τρόπος να προσθέσετε ένα chart στο
$XDG_DATA_HOME/helm/starters είναι να το αντιγράψετε χειροκίνητα εκεί.
Στην τεκμηρίωση του chart σας, μπορεί να θέλετε να εξηγήσετε αυτή τη διαδικασία.