jenkins 获取初始化容器作业完成后的日志

moiiocjp  于 2023-04-29  发布在  Jenkins
关注(0)|答案(2)|浏览(169)

我们有一个由2个豆荚组成的多豆荚容器。init container先运行,实际的container运行。最近,我们的init容器作业失败了,这是因为我们的部署失败了。我们需要在init容器完成后获取init容器日志
有办法做到吗??
我知道我们可以在init容器运行时获取日志,但即使在init容器作业完成后,我们也需要日志
任何解决方案,我们都使用jenkins进行构建和部署

toiithl6

toiithl61#

你可以运行cmd:

kubectl logs <pod_name> -c <init_container_name>

即使在运行结束后,这也会获取init容器的日志。
举个例子,对于下面的pod规范,init-container首先运行(直到完成),并只打印“Hello world”。

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: main-container
    image: busybox
    command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
  initContainers:
  - name: init-container
    image: busybox
    command: ['sh', '-c', 'echo "Hello world"']

如果我运行这个命令:

kubectl logs test-pod -c init-container

我得到输出:

Hello world

要获取pod中所有容器的日志,您可以用途:

kubectl logs <pod_name> --all-containers

希望有帮助!

yvt65v4c

yvt65v4c2#

即使您的init容器完成,您也可以获取日志
这就是我试过的

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      initContainers:
        - name: init-myservice
          image: busybox
          command: ['sh', '-c', "echo 'Hello'"]
      containers:
        - name: nginx
          image: nginx
          ports:
          - containerPort: 80

您可以运行

kubectl logs <pod-name> -c <init-container-name>

或者,您可以将日志文件写入主机路径,以便在需要时检索它。

apiVersion: v1
kind: Pod
metadata:
  name: test-logs-mount
spec:
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "Your command/Write logs to >> /work-dir/logs.txt"]
  volumeMounts:
  - name: host
    mountPath: "/"
  containers:
  - image: image
    name: test-container
    volumeMounts:
    - mountPath: /
      name: host
  volumes:
   - name: host
     hostPath:
       path: /data

相关问题