Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 用于运行ConfigMap的CronJob_Kubernetes_Apache Kafka - Fatal编程技术网

Kubernetes 用于运行ConfigMap的CronJob

Kubernetes 用于运行ConfigMap的CronJob,kubernetes,apache-kafka,Kubernetes,Apache Kafka,我正在尝试编写一个CronJob,用于在用于Kafka的ConfigMap中执行shell脚本 我的意图是在特定的时间间隔重新分配分区 然而,我面临着它的问题。我对它很陌生。任何帮助都将不胜感激 cron-job.yaml apiVersion: batch/v1beta1 kind: CronJob metadata: name: partition-cron spec: schedule: "*/10 * * * *" startingDeadlineSeconds: 20

我正在尝试编写一个CronJob,用于在用于Kafka的ConfigMap中执行shell脚本

我的意图是在特定的时间间隔重新分配分区

然而,我面临着它的问题。我对它很陌生。任何帮助都将不胜感激

cron-job.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: partition-cron
spec:
  schedule: "*/10 * * * *"
  startingDeadlineSeconds: 20
  successfulJobsHistoryLimit: 5
  jobTemplate:
    spec:
      completions: 2
      template:
        spec:
          containers:
          - name: partition-reassignment
            image: busybox
            command: ["/configmap/runtimeConfig.sh"]
            volumeMounts:
            - name: configmap
              mountPath: /configmap
          restartPolicy: Never
          volumes:
            - name: configmap
              configMap:
                name: configmap-config
configmap-config.yaml

{{- if .Values.topics -}}
{{- $zk := include "zookeeper.url" . -}}
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app: {{ template "kafka.fullname" . }}
    chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
    heritage: "{{ .Release.Service }}"
    release: "{{ .Release.Name }}"
  name: {{ template "kafka.fullname" . }}-config
data:
  runtimeConfig.sh: |
    #!/bin/bash
    set -e
    cd /usr/bin
    until kafka-configs --zookeeper {{ $zk }} --entity-type topics --describe || (( count++ >= 6 ))
    do
      echo "Waiting for Zookeeper..."
      sleep 20
    done
    until nc -z {{ template "kafka.fullname" . }} 9092 || (( retries++ >= 6 ))
    do
      echo "Waiting for Kafka..."
      sleep 20
    done
    echo "Applying runtime configuration using {{ .Values.image }}:{{ .Values.imageTag }}"
  {{- range $n, $topic := .Values.topics }}
    {{- if and $topic.partitions $topic.replicationFactor $topic.reassignPartitions }}
    cat << EOF > {{ $topic.name }}-increase-replication-factor.json
  {"version":1, "partitions":[
    {{- $partitions := (int $topic.partitions) }}
    {{- $replicas := (int $topic.replicationFactor) }}
    {{- range $i := until $partitions }}
      {"topic":"{{ $topic.name }}","partition":{{ $i }},"replicas":[{{- range $j := until $replicas }}{{ $j }}{{- if ne $j (sub $replicas 1) }},{{- end }}{{- end }}]}{{- if ne $i (sub $partitions 1) }},{{- end }}
    {{- end }}
  ]}
EOF
kafka-reassign-partitions --zookeeper {{ $zk }} --reassignment-json-file {{ $topic.name }}-increase-replication-factor.json --execute
kafka-reassign-partitions --zookeeper {{ $zk }} --reassignment-json-file {{ $topic.name }}-increase-replication-factor.json --verify
  {{- end }}
{{- end -}}
修改的Cron作业YAML

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: partition-cron
spec:
  schedule: "*/5 * * * *"
  startingDeadlineSeconds: 20
  successfulJobsHistoryLimit: 5
  jobTemplate:
    spec:
      completions: 1
      template:
        spec:
          containers:
          - name: partition-reassignment
            image: busybox
            command: ["/configmap/runtimeConfig.sh"]
            volumeMounts:
              - name: configmap
                mountPath: /configmap
          restartPolicy: Never
          volumes:
            - name: configmap
              configMap:
                name: {{ template "kafka.fullname" . }}-config

现在,我得到Cron作业吊舱的状态为ContainerCannotRun

您已经将ConfigMap设置为
名称:{{template“kafka.fullname”。}}-config
,但是在作业中您正在装载
ConfigMap config
。除非您使用
configmap
作为版本名称安装了舵图,否则该作业将永远不会启动

解决此问题的一种方法是将卷定义为:

          volumes:
            - name: configmap
              configMap:
                name: {{ template "kafka.fullname" . }}-config


我根据您的建议修改了cron作业,但无法运行容器。已使用更新的Cron作业YAML和相应的“ContainerCannotRun”输出修改了问题。我认为问题在于“image”标记。您可以运行
kubectl Descripte pod
,查看发生了什么,还有一件事,busybox不包含kafka客户端,您需要使用包含该脚本所需的所有二进制文件的图像。
          volumes:
            - name: configmap
              configMap:
                name: {{ template "kafka.fullname" . }}-config