AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 77226124
Accepted
mbsf
mbsf
Asked: 2023-10-04 08:34:57 +0800 CST2023-10-04 08:34:57 +0800 CST 2023-10-04 08:34:57 +0800 CST

kubernetes: como instalar um pacote no contêiner de um pod durante a criação do contêiner [fechado]

  • 772
Fechado. Esta questão não é sobre programação ou desenvolvimento de software . No momento não está aceitando respostas.

Esta questão não parece ser sobre um problema específico de programação, um algoritmo de software ou ferramentas de software usadas principalmente por programadores . Se você acredita que a pergunta estaria no tópico de outro site do Stack Exchange , você pode deixar um comentário para explicar onde a pergunta pode ser respondida.

Fechado há 10 horas .

Melhore esta questão

Estou fazendo o curso de Kubernetes para iniciantes na Udemy.

Estou tentando (como uma tarefa educacional) instalar qualquer pacote arbitrário em um contêiner usando apenas elementos de comando/args.

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: curl-nginx
  name: curl-nginx
spec:
  containers:
  - image: alpine
    name: curl-nginx
    args:
    - /bin/sh
    - -c
    - apk update;
    - apk upgrade;
    - apk add curl;
    - while true; do curl nginx-loadbalancer >> /tmp/curl.txt 2>&1 ; done;
  restartPolicy: Always

Mas o pod não está executando o loop while, embora esteja executando os comandos apk (conforme comprovado pelos logs):

 $ kc logs curl-nginx
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/main/aarch64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/community/aarch64/APKINDEX.tar.gz
v3.18.4-8-g72c62a84ddf [https://dl-cdn.alpinelinux.org/alpine/v3.18/main]
v3.18.4-7-g75aa72add9b [https://dl-cdn.alpinelinux.org/alpine/v3.18/community]
OK: 19941 distinct packages available

A falha que estou vendo (do pod kc description):

  Warning  BackOff    2s (x3 over 21s)  kubelet            Back-off restarting failed container curl-nginx in pod curl-nginx_dev(613a7fa7-952a-4d2a-b226-df87aa866f06)

E não sei por que o k8s não está executando o loop while.

Observe que eu sei que este (o acima) não é o método PROD recomendado e é melhor fazê-lo (e já fiz os dois com sucesso):

  1. crie uma nova imagem com pacotes pré-carregados; OU
  2. exec no contêiner e instale-os manualmente.

Então, por favor, não faça nenhuma dessas ou outras sugestões.

Estou tentando instalar os pacotes na seção command/args como um exercício para entender melhor como os comandos são usados. Portanto, quero aprender o que há de errado com minha sintaxe de loop while.

Além disso, uma terceira opção foi colocada no thread , mas NÃO consigo descobrir como conectar o configmap ao pod e o thread mencionado acima não é útil. No entanto, ainda estou inclinado a descobrir a solução baseada apenas no uso de comandos/args.

apiVersion: v1
kind: ConfigMap
metadata:
  name: curl-nginx-cm
data:
  entrypoint: |
    #!/bin/bash
    set -xe
    apk update
    apk upgrade
    apk add curl
---
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: curl-nginx
  name: curl-nginx
spec:
  containers:
  - image: alpine
    name: curl-nginx
    args:
    - /bin/sh
    - -c
    - while true; do curl nginx-loadbalancer >> /tmp/curl.txt 2>&1 ; done;
  dnsPolicy: ClusterFirst
  restartPolicy: Always
kubernetes
  • 1 1 respostas
  • 40 Views

1 respostas

  • Voted
  1. Best Answer
    larsks
    2023-10-04T09:59:57+08:002023-10-04T09:59:57+08:00

    Estou tentando (como uma tarefa educacional) instalar qualquer pacote arbitrário em um contêiner usando apenas elementos de comando/args.

    Eu diria que isso é um antipadrão: se você precisar de pacotes específicos para o seu serviço, você deve criar imagens apropriadas e enviá-las para um registro e, em seguida, criar implantações usando suas imagens personalizadas.


    Você tem erros em sua argsconfiguração. Lembre-se de que o sh -ccomando leva um único argumento – o script a ser executado. Quando você escreve isso:

        args:
        - /bin/sh
        - -c
        - apk update;
        - apk upgrade;
        - apk add curl;
        - while true; do curl nginx-loadbalancer >> /tmp/curl.txt 2>&1 ; done;
    

    Tu estás a escrever:

    sh -c 'apk update;' 'apk upgrade;' 'apk add curl;' '...etc...'
    

    Tente executar isso na linha de comando e você verá que ele executa o pk update comando... e ignora todo o resto. Geralmente, se quiser executar um script de shell quando o pod for iniciado, você faria algo assim:

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: curl-nginx
      name: curl-nginx
    spec:
      restartPolicy: Always
      containers:
      - image: docker.io/alpine:latest
        name: curl-nginx
        command:
        - /bin/sh
        - -c
        - |
          apk update
          apk upgrade
          apk add curl
          while true; do
            curl nginx-loadbalancer >> /tmp/curl.txt 2>&1
          done
    

    Isso usa a citação literal do bloco YAML ( |) para passar o script incluído - preservando novas linhas - como argumento para sh -c.

    Além disso, uma terceira opção foi colocada no thread, mas NÃO consigo descobrir como conectar o configmap ao pod...

    Isso é abordado explicitamente na documentação .


    Em relação commanda vs args:

    Os argumentos são passados ​​como argumentos para o comando. A maioria das imagens de contêiner possui um comando padrão que receberá seus argumentos, mas neste caso não nos importamos com o que a imagem faz por padrão; queremos executar um script de shell. Podemos simplesmente substituir o comando.

    Com isso em mente, poderíamos reescrever o manifesto acima assim:

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: curl-nginx
      name: curl-nginx
    spec:
      restartPolicy: Always
      containers:
      - image: docker.io/alpine:latest
        name: curl-nginx
        command:
        - /bin/sh
        - -c
        args:
          -|
            apk update
            apk upgrade
            apk add curl
            while true; do
              curl nginx-loadbalancer >> /tmp/curl.txt 2>&1
            done
    
    • 0

relate perguntas

  • Como defino o contexto para ser padrão no kubectl

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve