Conteneurs éphémères Kubernetes Premiers pas

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.

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


All Articles