Conteneurs éphémères Kubernetes est une idée intéressante pour déboguer des problèmes dans des conteneurs qui, en plus du binaire exécutable, ne contiennent rien.
Certaines informations sont disponibles sur le site Web de Kubernetes et plusieurs exemples peuvent être trouvés dans le vaste.
Cette fonction est expérimentale, dans la nature de la description des versions alpha-bêta de la cubera ne comprenait pas.
Testé sur Kubernetes v1.16.3
Afin de pouvoir exécuter le conteneur éphémère dans le foyer, vous devez activer la fonction correspondante / et à travers les
portes de fonctionnalité .
En général, les portes fonctionnelles sont une option avec laquelle le composant nécessaire du cube doit être lancé (nous examinons les paramètres de l'exécution des processus via ps), c'est-à-dire juste un cublet lancé avec ce paramètre est susceptible d'être insuffisant, ou plutôt des fonctionnalités différentes nécessitent une activation sur les composants correspondants du cube.
Selon le mode d'utilisation du cube, il existe les options suivantes
1.
minikube start --feature-gates="EphemeralContainers=true"
2. développez le cluster en ajoutant à la section
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. Sur un cluster en direct
/var/lib/kubelet/kubeadm-flags.env
Ajouter aux paramètres
--feature-gates=EphemeralContainers=true
Pour le faire ressembler
KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --feature-gates=EphemeralContainers=true --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1"
Redémarrez le redémarrage du kubelet de service
/etc/kubernetes/manifests/kube-apiserver.yaml
Ajoutez les variables suivantes à la fin de la liste cmd:
spec: containers: - command: - --feature-gates=EphemeralContainers=true
De même, nous gouvernons
kube-scheduler.yaml kube-controller-manager.yaml
Après
kubectl get pods -A
Dans kube-system de l'espace de noms, nous recherchons des pods contenant le nom
kube-apiserver kube-scheduler kube-controller-manager
Supprimons ces pods via kubectl delete pod
Ils sont recréés avec les paramètres des fichiers corrigés.
4. Théoriquement, il existe une autre option, mais cela n'a pas fonctionné pour moi
kubeadm upgrade plan --feature-gates EphemeralContainers=true
Nous essayons de nous connecter aux conteneurs pod.
Une petite copie du site Coober.
Nous créons un fichier ec.json dans lequel example-pod est remplacé par le nom du pod auquel il se connecte doucement, dans l'image nous écrivons un conteneur avec des outils de débogage (ubuntu par exemple):
{ "apiVersion": "v1", "kind": "EphemeralContainers", "metadata": { "name": "example-pod" }, "ephemeralContainers": [{ "command": [ "sh" ], "image": "busybox", "imagePullPolicy": "IfNotPresent", "name": "debugger", "stdin": true, "tty": true, "terminationMessagePolicy": "File" }] }
Corrigez les propriétés du compteur auquel nous allons nous connecter, n'oubliez pas l'espace de noms
kubectl replace --raw /api/v1/namespaces/<b>default</b>/pods/<b>example-pod</b>/ephemeralcontainers -f ec.json
Attachez et exécutez le shell dans le conteneur:
kubectl attach -it example-pod -c debugger
Si vous faites "ps auxww" alors rien d'intéressant n'en sortira. besoin de support Partager l'espace de noms de processus.