AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 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:如何在容器创建期间在 pod 的容器中安装软件包 [关闭]

  • 772
关闭。这个问题与编程或软件开发无关。目前不接受答案。

这个问题似乎不是关于特定的编程问题、软件算法或主要由程序员使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是切题的,您可以发表评论来解释在哪里可以回答该问题。

10 小时前关闭。

改进这个问题

我正在 Udemy 参加初级 kubernetes 课程。

我正在尝试(作为一项教育任务)仅使用 command/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

但是 pod 没有执行 while 循环,即使它正在执行 apk 命令(如日志所证明):

 $ 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

我看到的失败(来自 kc 描述 pod):

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

我不知道为什么 k8s 不执行 while 循环。

请注意,我知道这(上述)不是推荐的 PROD 方法,最好是(而且我已经成功地完成了这两个方法):

  1. 使用预加载的包创建新映像;或者
  2. exec 到容器中并手动安装它们。

因此,请不要提出这些或其他建议。

我尝试在 command/args 部分安装 pkgs 作为练习,以更好地了解命令的使用方式。因此,我想了解我的 while 循环语法有什么问题。

此外,第三个选项位于线程中,但我无法弄清楚如何将 configmap 连接到 pod,并且上述线程没有帮助。但是,我仍然倾向于仅基于使用命令/参数来找出解决方案。

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 个回答
  • 40 Views

1 个回答

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

    我正在尝试(作为一项教育任务)仅使用 command/args 元素在容器上安装任何任意包。

    我认为这是一种反模式:如果您的服务需要特定的包,您应该构建适当的映像并将其推送到注册表,然后使用自定义映像创建部署。


    您的args配置有错误。请记住,该sh -c命令采用单个参数——要执行的脚本。当你写下这个:

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

    你正在写:

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

    尝试在命令行运行它,您会看到它运行该pk update 命令......并忽略其他所有内容。一般来说,如果你想在 Pod 启动时运行 shell 脚本,你可以这样做:

    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
    

    这使用 YAML 块文字 quote( |) 将包含的脚本(保留换行符)作为参数传递给sh -c.

    此外,第三个选项位于线程中,但我不知道如何将配置映射连接到 Pod...

    文档中明确介绍了这一点。


    关于commandvs args:

    args 作为参数传递给命令。大多数容器镜像都有一个默认命令来接收您的参数,但在这种情况下,我们不关心镜像默认执行的操作;我们想要运行一个 shell 脚本。我们可以覆盖命令。

    考虑到这一点,我们可以像这样重写上面的清单:

    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

相关问题

  • 我如何在 kubectl 中将上下文设置为默认

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve