Ephemeral Containers Kubernetes adalah ide yang menarik untuk
men -debug masalah dalam kontainer yang tidak mengandung apa pun selain binar yang dapat dieksekusi.
Beberapa informasi tersedia di situs web Kubernetes dan beberapa contoh dapat ditemukan secara luas.
Fungsi ini eksperimental, di belantara deskripsi versi alpha-beta cubera tidak mengerti.
Diuji pada Kubernetes v1.16.3
Agar dapat menjalankan wadah ephemeral di perapian, Anda harus mengaktifkan fungsi yang sesuai / dan melalui
gerbang fitur .
Secara umum, gerbang fitur adalah opsi dengan mana komponen kubus yang diperlukan harus diluncurkan (kita melihat pada parameter proses yang berjalan melalui ps) yaitu. hanya sebuah cublet yang diluncurkan dengan parameter ini kemungkinan tidak mencukupi, atau fitur yang agak berbeda memerlukan aktivasi pada komponen kubus yang sesuai.
Tergantung pada mode penggunaan kubus, ada opsi berikut
1.
minikube start --feature-gates="EphemeralContainers=true"
2. perluas cluster dengan menambahkan ke bagian
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. Di cluster hidup
/var/lib/kubelet/kubeadm-flags.env
Tambahkan ke parameter
--feature-gates=EphemeralContainers=true
Agar terlihat seperti
KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --feature-gates=EphemeralContainers=true --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1"
Mulai ulang layanan kubelet restart
/etc/kubernetes/manifests/kube-apiserver.yaml
Tambahkan variabel berikut ke akhir daftar cmd:
spec: containers: - command: - --feature-gates=EphemeralContainers=true
Demikian pula, kami berkuasa
kube-scheduler.yaml kube-controller-manager.yaml
Setelah
kubectl get pods -A
Di namespace kube-system, kami mencari pod yang berisi nama
kube-apiserver kube-scheduler kube-controller-manager
Mari kita hapus pod ini melalui pod hapus kubectl
Mereka diciptakan kembali dengan parameter dari file yang dikoreksi.
4. Secara teoritis, ada pilihan lain, tetapi itu tidak berhasil untuk saya
kubeadm upgrade plan --feature-gates EphemeralContainers=true
Kami mencoba menyambung ke wadah pod.
Salinan kecil dari situs Coober.
Kami membuat file ec.json di mana kami mengganti contoh-pod dengan nama pod yang terhubung dengan lembut, dalam gambar kami menulis sebuah wadah dengan alat debugging (misalnya, ubuntu):
{ "apiVersion": "v1", "kind": "EphemeralContainers", "metadata": { "name": "example-pod" }, "ephemeralContainers": [{ "command": [ "sh" ], "image": "busybox", "imagePullPolicy": "IfNotPresent", "name": "debugger", "stdin": true, "tty": true, "terminationMessagePolicy": "File" }] }
Menambal properti penghitung yang akan kita hubungkan, jangan lupa tentang namespace
kubectl replace --raw /api/v1/namespaces/<b>default</b>/pods/<b>example-pod</b>/ephemeralcontainers -f ec.json
Pasang dan jalankan shell di wadah:
kubectl attach -it example-pod -c debugger
Jika Anda membuat "ps auxww" maka tidak ada yang menarik akan datang darinya. butuh dukungan Share Process Namespace.