Recipientes Efêmeros Kubernetes Primeiros Passos

Contêineres Efêmeros O Kubernetes é uma idéia interessante para depurar problemas em contêineres que não contêm nada além do binário executável.

Algumas informações estão disponíveis no site da Kubernetes e vários exemplos podem ser encontrados na vasta.

Esta função é experimental, na natureza da descrição de versões alfa-beta da cubera não entendeu.
Testado no Kubernetes v1.16.3

Para poder executar o contêiner efêmero na lareira, você precisa ativar a função correspondente / e através dos portões de recursos .

Em geral, feature-gates é uma opção com a qual o componente necessário do cubo deve ser iniciado (examinamos os parâmetros dos processos em execução via ps), ou seja, é provável que apenas uma publicação secundária lançada com esse parâmetro seja insuficiente ou recursos diferentes requerem ativação nos componentes correspondentes do cubo.

Dependendo do modo de uso do cubo, as seguintes opções

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

2. expanda o cluster adicionando à seção

 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. Em um cluster ativo

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

Adicionar aos parâmetros

 --feature-gates=EphemeralContainers=true 

Para fazer parecer

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

Reiniciar o serviço kubelet restart

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

Adicione as seguintes variáveis ​​ao final da lista de cmd:

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

Da mesma forma, nós governamos

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

Depois

 kubectl get pods -A 

No espaço de nomes kube-system, procuramos pods contendo o nome

 kube-apiserver kube-scheduler kube-controller-manager 

Vamos remover esses pods via kubectl delete pod
Eles são recriados com os parâmetros dos arquivos corrigidos.

4. Teoricamente, existe outra opção, mas não funcionou para mim

 kubeadm upgrade plan --feature-gates EphemeralContainers=true 

Tentamos nos conectar aos contêineres de vagem.

Uma cópia pequena do site Coober.

Criamos um arquivo ec.json no qual substituímos example-pod pelo nome do pod ao qual ele se conecta suavemente. Na imagem, escrevemos um contêiner com ferramentas de depuração (por exemplo, ubuntu):

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

Corrija as propriedades do contador ao qual vamos nos conectar, não se esqueça do espaço para nome

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

Anexe e execute o shell no contêiner:

 kubectl attach -it example-pod -c debugger 

Se você criar "ps auxww", nada de interessante surgirá. precisa de suporte ao Share Process Namespace.

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


All Articles