Создание Kubernetes Cronjob

import (
    "context"
    "fmt"

    infinimeshv1beta1 "github.com/infinimesh/operator/pkg/apis/infinimesh/v1beta1"
    v1beta1 "k8s.io/api/batch/v1beta1"
    corev1 "k8s.io/api/core/v1"
    "k8s.io/apimachinery/pkg/api/errors"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/apimachinery/pkg/types"
    "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
    "sigs.k8s.io/controller-runtime/pkg/reconcile"
)

func (r *ReconcilePlatform) reconcileResetRootAccount(request reconcile.Request, instance *infinimeshv1beta1.Platform) error {
    log := logger.WithName("Reset Root Account Pwd")
    job := &v1beta1.CronJob{
        ObjectMeta: metav1.ObjectMeta{
            Name: "example",
        },
        Spec: v1beta1.CronJobSpec{
            Schedule:          "* * * * *",
            ConcurrencyPolicy: v1beta1.ForbidConcurrent,
            JobTemplate: v1beta1.JobTemplate{
                Spec: v1beta1.JobTemplateSpec{
                    Template: corev1.PodTemplateSpec{
                        Spec: corev1.PodSpec{
                            RestartPolicy: "Never",
                            Containers: []corev1.Container{
                                {
                                    Name:  "cli",
                                    Image: "busybox",
                                    Command: []string{
                                        "/bin/bash",
                                        "-c",
                                        "echo 1",
                                    },
                                    ImagePullPolicy: "Always",
                                },
                            },
                        },
                    },
                },
            },
        },
    }

Я получаю ошибку здесь

JobTemplate: v1beta1.JobTemplate{
                Spec: v1beta1.JobTemplateSpec{
                    Template: corev1.PodTemplateSpec{

как может быть, я не определяю это правильно. Пожалуйста, помогите мне правильно создать cronjob в Go. Вы также можете написать свой собственный способ написания cronjobs в golang, так как я хочу автоматизировать cronjob в операторе kubernetes, так как при перезапуске платформы cronjob будет создаваться автоматически.


person ayesha kaleem    schedule 15.12.2020    source источник
comment
Примечание по терминологии: Вы говорите о Go-скрипте, а такого понятия, как Go компилируется, а скрипты по определению нет.   -  person Flimzy    schedule 15.12.2020


Ответы (1)


Cronjob оборачивает задание, которое оборачивает pod. Поэтому вам нужно поместить PodTemplateSpec внутри JobSpec внутри CronJobSpec.

    cronjob := &v1beta1.CronJob{
        ObjectMeta: metav1.ObjectMeta{
            Name:      "demo-cronjob",
            Namespace: "gitlab",
        },
        Spec: v1beta1.CronJobSpec{
            Schedule:          "* * * * *",
            ConcurrencyPolicy: v1beta1.ForbidConcurrent,
            JobTemplate: v1beta1.JobTemplateSpec{
                Spec: batchv1.JobSpec{
                    Template: v1.PodTemplateSpec{
                        Spec: v1.PodSpec{
                          ...
                        },
                    },
                },
            },
        },
    }
person Arghya Sadhu    schedule 15.12.2020