Ephemere Container Kubernetes Erste Schritte

Ephemere Container Kubernetes ist eine interessante Idee für das Debuggen von Problemen in Containern, die nichts anderes als die ausführbare Binärdatei enthalten.

Einige Informationen sind auf der Kubernetes-Website verfügbar, und mehrere Beispiele sind in der großen Auswahl zu finden.

Diese Funktion ist experimentell, in der Wildnis der Beschreibung von Alpha-Beta-Versionen der Cubera nicht verstanden.
Getestet auf Kubernetes v1.16.3

Um den ephemeren Container im Herd laufen zu lassen, müssen Sie die entsprechende Funktion / und durch Feature-Gates aktivieren.

Im Allgemeinen ist Feature-Gates eine Option, mit der die erforderliche Komponente des Cubes gestartet werden soll (wir sehen uns die Parameter für die Ausführung von Prozessen über ps an), d. H. Nur ein Cublet, das mit diesem Parameter gestartet wird, ist wahrscheinlich unzureichend, oder andere Features erfordern die Aktivierung der entsprechenden Komponenten des Cubes.

Abhängig von der Art der Verwendung des Cubes gibt es die folgenden Optionen

1.
minikube start --feature-gates="EphemeralContainers=true" 

2. Erweitern Sie den Cluster, indem Sie ihn dem Abschnitt hinzufügen

 apiVersion: kubeadm.k8s.io/v1beta2 kind: InitConfiguration localAPIEndpoint: {} nodeRegistration: kubeletExtraArgs: "feature-gates": "EphemeralContainers=true" --- apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration apiServer: extraArgs: "feature-gates": "EphemeralContainers=true" scheduler: extraArgs: "feature-gates": "EphemeralContainers=true" controllerManager: extraArgs: "feature-gates": "EphemeralContainers=true" 

3. In einem Live-Cluster

 /var/lib/kubelet/kubeadm-flags.env 

Zu Parametern hinzufügen

 --feature-gates=EphemeralContainers=true 

Um es so aussehen zu lassen

 KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --feature-gates=EphemeralContainers=true --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1" 

Starten Sie den Servicekubelet-Neustart neu

 /etc/kubernetes/manifests/kube-apiserver.yaml 

Fügen Sie die folgenden Variablen am Ende der Cmd-Liste hinzu:

 spec: containers: - command: - --feature-gates=EphemeralContainers=true 

Ebenso herrschen wir

 kube-scheduler.yaml kube-controller-manager.yaml 

Nachher

 kubectl get pods -A 

Im Namespace kube-system suchen wir nach Pods, die den Namen enthalten

 kube-apiserver kube-scheduler kube-controller-manager 

Entfernen wir diese Pods mit kubectl delete pod
Sie werden mit den Parametern aus den korrigierten Dateien neu erstellt.

4. Theoretisch gibt es eine andere Option, aber sie hat bei mir nicht funktioniert

 kubeadm upgrade plan --feature-gates EphemeralContainers=true 

Wir versuchen uns mit den Pod Containern zu verbinden.

Ein kleines Exemplar von der Coober-Site.

Wir erstellen eine ec.json-Datei, in der wir den Beispiel-Pod durch den Namen des Pods ersetzen, mit dem er sanft verbunden ist. Im Bild schreiben wir einen Container mit Debugging-Tools (z. B. Ubuntu):

 { "apiVersion": "v1", "kind": "EphemeralContainers", "metadata": { "name": "example-pod" }, "ephemeralContainers": [{ "command": [ "sh" ], "image": "busybox", "imagePullPolicy": "IfNotPresent", "name": "debugger", "stdin": true, "tty": true, "terminationMessagePolicy": "File" }] } 

Patchen Sie die Eigenschaften des Zählers, zu dem die Verbindung hergestellt werden soll, und vergessen Sie nicht den Namespace

 kubectl replace --raw /api/v1/namespaces/<b>default</b>/pods/<b>example-pod</b>/ephemeralcontainers -f ec.json 

Befestigen Sie die Shell und führen Sie sie im Container aus:

 kubectl attach -it example-pod -c debugger 

Wenn Sie "ps auxww" machen, wird nichts Interessantes daraus. brauchen Unterstützung Share Process Namespace.

Source: https://habr.com/ru/post/de479304/


All Articles