Manifeste sind die Grundlage für die deklarative Verwaltung der Konfiguration in Kubernetes. Sie dienen der Festlegung des gewünschten Zustands für Ressourcen im Cluster. Die Definition dieser Konfigurationsdateien erfolgt üblicherweise im YAML-Format, wobei auch JSON unterstützt wird.
Ein Kubernetes-Manifest ermöglicht die Deklaration von gewünschten Eigenschaften und Beziehungen von Clusterressourcen in einem formatierten, menschenlesbaren Textdokument. Kubernetes strebt anschließend danach, den tatsächlichen Zustand des Clusters an diesen gewünschten Zustand anzupassen.
Jedes Kubernetes-Manifest beinhaltet die folgenden Schlüsselelemente:
apiVersion: Gibt die Version der Kubernetes API an, die
für die Ressourcenerstellung verwendet wird.kind: Bestimmt die Art der Ressource (z.B. Pod,
Service, Deployment).metadata: Beinhaltet Metadaten der Ressource, wie den
Namen und Namensraum.spec: Spezifiziert die Charakteristiken und das
gewünschte Verhalten der Ressource.Ein exemplarisches Manifest in YAML-Struktur sieht wie folgt aus:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
labels:
purpose: demonstrate-manifest
spec:
containers:
- name: example-container
image: nginx:1.14.2
ports:
- containerPort: 80Dieses Format standardisiert die Cluster-Konfiguration und erleichtert sowohl die manuelle als auch maschinelle Bearbeitung.
Die apiVersion in einer Kubernetes-Spezifikation ist
entscheidend, da sie die Version der Kubernetes-API angibt, mit der das
Objekt erstellt wird. Diese Information ist notwendig, um die
Kompatibilität zwischen den Objekten und dem Cluster zu
gewährleisten.
apiVersionDie apiVersion stellt die Kompatibilität sicher und
definiert, welche Version der Kubernetes-API für das Erstellen des
Objekts verwendet wird.
apiVersionDie apiVersion wird in zwei Teile unterteilt:
apiGroup und version.
| Schlüssel | Beschreibung |
|---|---|
apiGroup |
Die API-Gruppe des Objekts, wie apps,
batch, extensions, etc. |
version |
Die spezifische Version der API in der Gruppe, z.B. v1,
v1beta1, v1alpha1. |
apiVersion |
Beschreibung |
|---|---|
apiVersion: v1 |
Die erste stabile Version der Kubernetes-API; umfasst viele Kernobjekte. |
apiVersion: apps/v1 |
Teil der apps API-Gruppe; beinhaltet Kernobjekte wie
Deployments, RollingUpdates und ReplicaSets. |
apiVersion: autoscaling/v1 |
API-Gruppe und Version für Autoscaling-Ressourcen. |
apiVersion findetUm die richtige apiVersion für eine Ressource zu finden,
kann man den Befehl
kubectl api-versionsverwenden, um eine Liste aller auf dem Cluster verfügbaren API-Versionen zu erhalten
apiVersion
bei API-ÄnderungenWenn Kubernetes eine Veröffentlichung hat, die das, was für die
Verwendung verfügbar ist, aktualisiert oder etwas in seiner API ändert,
wird eine neue apiVersion erstellt
Die Wahl der richtigen apiVersion ist entscheidend, da
sie beeinflusst, welche Eigenschaften und Methoden in den
Objektspezifikationen verwendet werden können.
kubectl api-versionsacme.cert-manager.io/v1
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
.
.
.
traefik.containo.us/v1alpha1
v1
| Group | Version | Erläuterung |
|---|---|---|
| acme.cert-manager.io | v1 | Spezifische API-Gruppe und Version für ACME im Cert-Manager. |
| admissionregistration.k8s.io | v1 | API-Gruppe für die Registrierung von Admission Controllern in Kubernetes. |
| apiextensions.k8s.io | v1 | API-Gruppe für die Erweiterung der Kubernetes-API. |
| apiregistration.k8s.io | v1 | API-Gruppe für die Registrierung von APIs in Kubernetes. |
| apps | v1 | Häufig verwendete API-Gruppe in Kubernetes für Kernobjekte wie Deployments und ReplicaSets. |
| authentication.k8s.io | v1 | API-Gruppe für Authentifizierungsprozesse in Kubernetes. |
| authorization.k8s.io | v1 | API-Gruppe für Autorisierungsprozesse in Kubernetes. |
| autoscaling | v1 | API-Gruppe für Autoscaling-Funktionen in Kubernetes. |
| autoscaling | v2 | Erweiterte oder aktualisierte Version der Autoscaling-API in Kubernetes. |
| batch | v1 | API-Gruppe für Batch-Prozess-Ressourcen wie Jobs und CronJobs. |
| cert-manager.io | v1 | API-Gruppe für die Verwaltung von Zertifikaten in Kubernetes. |
| certificates.k8s.io | v1 | API-Gruppe für die Verwaltung von Zertifikatanfragen in Kubernetes. |
| coordination.k8s.io | v1 | API-Gruppe für Koordinationsprozesse in Kubernetes. |
| discovery.k8s.io | v1 | API-Gruppe für Discovery-Prozesse in Kubernetes. |
| events.k8s.io | v1 | API-Gruppe für Ereignisberichterstattung in Kubernetes. |
| flowcontrol.apiserver.k8s.io | v1beta2 | Beta-Version der API-Gruppe für Flow-Control-Funktionen im API-Server. |
| flowcontrol.apiserver.k8s.io | v1beta3 | Weiterentwickelte Beta-Version der API-Gruppe für Flow-Control-Funktionen im API-Server. |
| helm.cattle.io | v1 | Spezifische API-Gruppe und Version für Helm in der Cattle-Plattform. |
| k3s.cattle.io | v1 | Spezifische API-Gruppe und Version für K3s in der Cattle-Plattform. |
| longhorn.io | v1beta1 | Beta-Version der API-Gruppe für Longhorn, eine Cloud-native Speicherplattform. |
| longhorn.io | v1beta2 | Weiterentwickelte Beta-Version der API-Gruppe für Longhorn. |
| metrics.k8s.io | v1beta1 | Beta-Version der API-Gruppe für Metrik-Daten in Kubernetes. |
| monitoring.coreos.com | v1 | API-Gruppe für Monitoring-Funktionen in der CoreOS-Plattform. |
| monitoring.coreos.com | v1alpha1 | Alpha-Version der API-Gruppe für Monitoring-Funktionen in der CoreOS-Plattform. |
| networking.k8s.io | v1 | API-Gruppe für Netzwerkfunktionalitäten in Kubernetes. |
| node.k8s.io | v1 | API-Gruppe für Node-bezogene Operationen in Kubernetes. |
| policy | v1 | API-Gruppe für Policy-bezogene Ressourcen und Operationen in Kubernetes. |
| rbac.authorization.k8s.io | v1 | API-Gruppe für RBAC (Role-Based Access Control) in Kubernetes. |
| scheduling.k8s.io | v1 | API-Gruppe für Scheduling-Operationen in Kubernetes. |
| storage.k8s.io | v1 | API-Gruppe für Speicherressourcen und -operationen in Kubernetes. |
| storage.k8s.io | v1beta1 | Beta-Version der API-Gruppe für Speicherressourcen und -operationen in Kubernetes. |
| traefik.containo.us | v1alpha1 | Alpha-Version der API-Gruppe für Traefik, einen modernen HTTP-Reverse-Proxy und Load-Balancer. |
| v1 | Kernversion der Kubernetes-API, enthält viele Kernobjekte und -funktionen. |
kind in
Kubernetes SpecDas Feld kind in der Spezifikation eines
Kubernetes-Objekts definiert den Typ des Objekts, das erstellt oder
manipuliert werden soll. Es ist eines der erforderlichen Felder in jedem
Kubernetes-Manifest.
kindDas kind-Feld gibt den Typ der Ressource an, die in dem
Manifest definiert ist. Es sagt Kubernetes, welche Art von Objekt Sie
erstellen oder anderweitig manipulieren möchten.
kindkind |
Beschreibung |
|---|---|
Pod |
Definiert einen Pod, der eine oder mehrere Container enthält. |
Service |
Definiert einen Service, der den Zugriff auf Pods ermöglicht. |
Deployment |
Definiert ein Deployment, das Pods und ReplicaSets verwaltet. |
ReplicaSet |
Definiert ein ReplicaSet, das die Replikation von Pods gewährleistet. |
StatefulSet |
Definiert ein StatefulSet für stateful Anwendungen. |
DaemonSet |
Definiert ein DaemonSet, das sicherstellt, dass alle Nodes einen Kopie eines bestimmten Pods ausführen. |
Namespace |
Definiert einen Namespace, der zur Trennung von Ressourcen in einem Cluster dient. |
Node |
Definiert einen Knoten im Cluster. |
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginxapiVersion: v1
kind: Service
metadata:
name: myservice
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376apiVersion: apps/v1
kind: Deployment
metadata:
name: mydeployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: mycontainer
image: nginxkind
verwendetDas kind-Feld wird in allen Kubernetes-Manifesten
verwendet und ist erforderlich, um den Typ des Objekts anzugeben, das
erstellt oder manipuliert werden soll. Das ermöglicht es Kubernetes, die
notwendige Logik anzuwenden, um die gewünschte Ressource korrekt zu
behandeln.
Um alle verfügbaren kinds in einem Kubernetes-Cluster
aufzulisten, können Sie den folgenden Befehl verwenden:
kubectl api-resources --verbs=list -o nameDer Befehl kubectl api-resources gibt eine Liste aller
Ressourcentypen im Cluster zurück. Die Option --verbs=list
filtert die Ausgabe auf Ressourcentypen, die gelistet werden können. Die
Option -o name formatiert die Ausgabe, um nur die Namen der
Ressourcentypen anzuzeigen.
Durch Ausführen des obigen Befehls erhalten Sie eine Liste aller
Ressourcentypen, die im Cluster verfügbar sind, was Ihnen einen Hinweis
auf die verschiedenen kinds gibt, die Sie in Ihren
Kubernetes-Spezifikationen verwenden können.
Durch das Verständnis des kind-Feldes und seiner
Verwendung können Sie effektiv mit verschiedenen Ressourcentypen in
Kubernetes arbeiten und verstehen, wie Sie sie in Ihren Manifesten
definieren können.
Die vollständige Auflistung der Resourcen sieht in einem k3s Cluster z.B. so aus:
kubectl api-resources --verbs=list| NAME | SHORTNAMES | APIVERSION | NAMESPACED | KIND |
|---|---|---|---|---|
| componentstatuses | cs | v1 | false | ComponentStatus |
| configmaps | cm | v1 | true | ConfigMap |
| endpoints | ep | v1 | true | Endpoints |
| events | ev | v1 | true | Event |
| limitranges | limits | v1 | true | LimitRange |
| namespaces | ns | v1 | false | Namespace |
| nodes | no | v1 | false | Node |
| persistentvolumeclaims | pvc | v1 | true | PersistentVolumeClaim |
| persistentvolumes | pv | v1 | false | PersistentVolume |
| pods | po | v1 | true | Pod |
| podtemplates | v1 | true | PodTemplate | |
| replicationcontrollers | rc | v1 | true | ReplicationController |
| resourcequotas | quota | v1 | true | ResourceQuota |
| secrets | v1 | true | Secret | |
| serviceaccounts | sa | v1 | true | ServiceAccount |
| services | svc | v1 | true | Service |
| challenges | acme.cert-manager.io/v1 | true | Challenge | |
| orders | acme.cert-manager.io/v1 | true | Order | |
| mutatingwebhookconfigurations | admissionregistration.k8s.io/v1 | false | MutatingWebhookConfiguration | |
| validatingwebhookconfigurations | admissionregistration.k8s.io/v1 | false | ValidatingWebhookConfiguration | |
| customresourcedefinitions | crd,crds | apiextensions.k8s.io/v1 | false | CustomResourceDefinition |
| apiservices | apiregistration.k8s.io/v1 | false | APIService | |
| controllerrevisions | apps/v1 | true | ControllerRevision | |
| daemonsets | ds | apps/v1 | true | DaemonSet |
| deployments | deploy | apps/v1 | true | Deployment |
| replicasets | rs | apps/v1 | true | ReplicaSet |
| statefulsets | sts | apps/v1 | true | StatefulSet |
| horizontalpodautoscalers | hpa | autoscaling/v2 | true | HorizontalPodAutoscaler |
| cronjobs | cj | batch/v1 | true | CronJob |
| jobs | batch/v1 | true | Job | |
| certificaterequests | cr,crs | cert-manager.io/v1 | true | CertificateRequest |
| certificates | cert,certs | cert-manager.io/v1 | true | Certificate |
| clusterissuers | cert-manager.io/v1 | false | ClusterIssuer | |
| issuers | cert-manager.io/v1 | true | Issuer | |
| certificatesigningrequests | csr | certificates.k8s.io/v1 | false | CertificateSigningRequest |
| leases | coordination.k8s.io/v1 | true | Lease | |
| endpointslices | discovery.k8s.io/v1 | true | EndpointSlice | |
| events | ev | events.k8s.io/v1 | true | Event |
| flowschemas | flowcontrol.apiserver.k8s.io/v1beta3 | false | FlowSchema | |
| prioritylevelconfigurations | flowcontrol.apiserver.k8s.io/v1beta3 | false | PriorityLevelConfiguration | |
| helmchartconfigs | helm.cattle.io/v1 | true | HelmChartConfig | |
| helmcharts | helm.cattle.io/v1 | true | HelmChart | |
| addons | k3s.cattle.io/v1 | true | Addon | |
| backingimagedatasources | lhbids | longhorn.io/v1beta2 | true | BackingImageDataSource |
| backingimagemanagers | lhbim | longhorn.io/v1beta2 | true | BackingImageManager |
Die metadata-Sektion in der Spezifikation eines
Kubernetes-Objekts enthält Informationen, die zur Identifizierung und
Organisation des Objekts verwendet werden.
metadataDie metadata-Sektion ist für die Speicherung von
Informationen über die Ressource verantwortlich, wie z.B. Name, Labels,
Annotations usw. Diese Informationen sind wichtig für die Erstellung,
Aktualisierung und Verwaltung von Objekten in einem
Kubernetes-Cluster.
metadata| Schlüssel | Beschreibung |
|---|---|
name |
Der eindeutige Name des Objekts im Kubernetes-Cluster. |
labels |
Schlüssel-Wert-Paare, die zur Identifizierung und Gruppierung von Objekten verwendet werden. |
annotations |
Schlüssel-Wert-Paare, die dazu dienen, zusätzliche Informationen zu speichern, die nicht zur eindeutigen Identifizierung dienen. |
Im folgenden Beispiel wird ein Deployment mit dem Namen
nginx-deployment erstellt, das im Feld
.metadata.name angegeben wird:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
...Labels können zur Klassifizierung und Auswahl von Objekten verwendet
werden. Im folgenden Beispiel wird dem Deployment ein Label
app: nginx zugewiesen:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
...Annotations können verwendet werden, um nicht identifizierende Informationen zu speichern. Sie können beliebige Daten speichern, die nützlich sind, aber nicht zur Identifizierung des Objekts verwendet werden:
apiVersion: v1
kind: Pod
metadata:
name: mypod
annotations:
description: This is a sample pod.
...metadata verwendetDie metadata-Sektion wird in vielen verschiedenen Arten
von Kubernetes-Objekten verwendet, einschließlich Pods, Deployments,
Services, ReplicaSets und vielen anderen. Sie ist ein kritischer Teil
der Objektdefinition und wird verwendet, um das Objekt im Cluster zu
identifizieren und zu organisieren.
Die metadata-Sektion in Kubernetes-Objektspezifikationen
ist ein mächtiges Werkzeug zur Verwaltung und Organisation von
Ressourcen im Cluster.
spec in
Kubernetes SpecDie spec-Sektion ist ein wesentlicher Bestandteil der
Spezifikation eines Kubernetes-Objekts, in dem die gewünschten Zustände
und Eigenschaften der Ressource definiert werden.
specspec-Sektion enthält die Konfiguration und die
gewünschten Zustände für die Ressource, die Sie erstellen oder
aktualisieren möchten. Die genaue Struktur und die verfügbaren Felder in
der spec-Sektion können je nach Art des Objekts
variieren.spec| Feld | Beschreibung |
|---|---|
replicas |
Die Anzahl der gewünschten Instanzen eines Pods. |
selector |
Ein Ausdruck, der verwendet wird, um die Pods zu identifizieren, die von der Ressource verwaltet werden. |
template |
Die Pod-Spezifikation, die verwendet wird, um neue Pods zu erstellen. |
ports |
Die Port-Konfiguration für einen Service. |
volumes |
Die Volumen-Konfiguration für einen Pod. |
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginxspec
verwendetDie spec-Sektion wird in vielen verschiedenen Arten von
Kubernetes-Objekten verwendet, einschließlich Pods, Deployments,
Services, ReplicaSets, und vielen anderen. Sie ist ein zentraler
Bestandteil der Objektdefinition und wird verwendet, um die gewünschten
Zustände und Eigenschaften der Ressource anzugeben.
Die spec-Sektion ist entscheidend für die Definition des
gewünschten Zustands einer Ressource in Kubernetes und bietet eine
flexible und umfangreiche Konfiguration, um die Betriebsanforderungen zu
erfüllen.