0

所以我有一个部署 pod 的 helm 图表,所以下一个任务是在第一个 pod 运行后创建另一个 pod。

所以我在图表/模板中创建了一个简单的 pod.yaml,它创建了一个简单的 pod-b,所以下一步只在 pod-a 运行后创建 pod-b。

所以只是掌舵钩子,但不认为他们关心吊舱状态。

另一个想法是使用如下所示的 Init 容器,但不确定如何编写命令来查找正在运行的 pod?

spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']

另一个想法是一个简单的脚本来检查 pod 状态,例如:

y=`kubectl get po -l app=am -o 'jsonpath={.items[0].status.phase}'`
   while [ $i -le 5 ]
   do
    if [[ "$y" == "Running" ]]; then
      break
    fi
    sleep 5
   done

任何建议都会很棒。

4

1 回答 1

2

如果您希望您的post-install/post-upgrade 图表挂钩工作,您应该将就绪探针添加到您的第一个 pod 并使用--wait标志。

helm upgrade --install -n test --wait mychart .

豆荚.yaml

apiVersion: v1
kind: Pod
metadata:
  name: readiness-exec
  labels:
    test: readiness
spec:
  containers:
  - name: readiness
    image: k8s.gcr.io/busybox
    args:
    - /bin/sh
    - -c
    - sleep 30; touch /tmp/healthy; sleep 600
    readinessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 10
      periodSeconds: 5
      failureThreshold: 10

钩子.yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: "post-deploy"
  annotations:
    "helm.sh/hook": post-upgrade,post-install
    "helm.sh/hook-delete-policy": before-hook-creation
spec:
  backoffLimit: 1
  template:
    metadata:
      name: "post-deploy"
    spec:
      restartPolicy: Never
      containers:
        - name: post-deploy
          image: k8s.gcr.io/busybox
          args:
          - /bin/sh
          - -c
          - echo "executed only after previous pod is ready"
于 2020-05-27T16:33:59.080 回答