【问题标题】:How to run a utils POD on K8S which doesn't run a process如何在不运行进程的 K8S 上运行 utils POD
【发布时间】:2020-01-16 14:58:58
【问题描述】:

我有这个 docker 镜像,其中安装了许多有用的工具。我在 docker 中使用它来调试东西,比如测试与其他容器的连接。现在我想在 Kubernetes 中使用这个镜像。但是,因为它没有运行进程,所以 pod 不会启动

Dockerfile:

FROM ubuntu:latest
RUN .... useful tools ...

还有 kubernetes 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: uitls
spec:
  replicas: 1
  selector:
    matchLabels:
      bar: utils-xxl
  template:
    metadata:
      labels:
        bar: utils-xxl
    spec:
      containers:
      - name: utils
        image: jeanluca/base

当我尝试应用此 pod 时,它最终处于 CrashLoopBackOff 状态。 kubernetes 有没有办法启动这个 pod?也许execbash?有什么建议吗?

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    您可以kubectl run 一次性 pod 进行交互式调试。

    kubectl run jeanluca-debug \
      --generator=run-pod/v1 \
      --rm -it \
      --image=jeanluca/base
    

    这基本上等价于docker run 命令,具有相同的选项,只是 pod 名称是必需的位置参数。

    此技术对于您描述的各种调试任务很有用。如果您的映像具有 redis-climysqlpsql 客户端之类的工具、hostdig 之类的 DNS 查找工具等,那么找出您的组合系统究竟为什么会损坏可能会很有用.图像的默认命令可以是CMD ["/bin/bash"],这很好,但如果它没有附加输入流,它将立即退出,因此您需要像这样通过kubectl run 运行它,而不是尝试让部署保持它还活着。

    一般来说,让一个实际上什么都不做的容器或 pod 保持运行是没有意义的。当然有一些技巧可以防止 Docker 容器退出,但我建议避免使用它们。

    【讨论】:

      【解决方案2】:

      如果您想要一个始终处于运行状态的 pod,您可以使用它来执行和运行命令,您可以告诉容器打开一个 shell 并休眠。

      类似这样的:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: uitls
      spec:
        replicas: 1
        selector:
          matchLabels:
            bar: utils-xxl
        template:
          metadata:
            labels:
              bar: utils-xxl
          spec:
            containers:
            - name: utils
              image: jeanluca/base
              command: ["/bin/sh"]
              args: ["-c", "while true; sleep 999; done"]
      
      

      【讨论】:

        【解决方案3】:

        你可以试试这样的:

        • dockerfile 末尾添加CMD tail -f /dev/null。在这种情况下,相同的部署 yaml 应该可以工作。

        • 修改您的 k8s 部署。
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: uitls
        spec:
          replicas: 1
          selector:
            matchLabels:
              bar: utils-xxl
          template:
            metadata:
              labels:
                bar: utils-xxl
            spec:
              containers:
              - name: utils
                image: jeanluca/base
                command: ["tail"]
                args: ["-f", "/dev/null"]
        

        • 使用kubectl run 在k8s 中运行容器,例如docker run,请参考this

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2020-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-22
          • 2020-06-16
          • 1970-01-01
          • 2019-12-19
          • 2018-10-24
          相关资源
          最近更新 更多