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.