Как развернуть Kubernetes yaml с использованием C# - PullRequest
0 голосов
/ 03 августа 2020

У меня есть файл yaml

  apiVersion: batch/v1beta1
   kind: CronJob
   metadata:
     name: ct-cron
   spec:
     schedule: "*/1 * * * *"
     concurrencyPolicy: Forbid
     jobTemplate:
       spec:
         template:
           metadata:
             labels:
               app: your-periodic-batch-job
               aadpodidbinding: managedaks
           spec:
             containers:
             - name: redmine-cron
               image: orm.azurecr.io/py-app:v3
               imagePullPolicy: IfNotPresent
             - name: redmine-cron1
               image: orm.azurecr.io/py-app:v5
               imagePullPolicy: IfNotPresent
               volumeMounts:
                 - name: store01-inline1
                   mountPath: "/mnt/secrets-store"
                   readOnly: true            
             restartPolicy: OnFailure
             volumes:
               - name: store01-inline1
                 csi:
                   driver: secrets-store.csi.k8s.io
                   readOnly: true
                   volumeAttributes:
                     secretProviderClass: "azure-kvname-podid"

Я сохранил этот yaml как строку в базе данных. Я хочу развернуть этот YAML, используя код c#. Но мне не удалось найти вариант развертывания yaml-файла с использованием кода c#. Возможно ли это?

1 Ответ

0 голосов
/ 27 августа 2020

Это возможно с пакетом nuget KubernetesClient

он включает синтаксический анализатор yaml, образец

var typeMap = new Dictionary<String, Type>();
typeMap.Add("v1/Pod", typeof(V1Pod));
typeMap.Add("v1/Service", typeof(V1Service));
typeMap.Add("apps/v1beta1/Deployment", typeof(Appsv1beta1Deployment));

var objects = await Yaml.LoadAllFromFileAsync(args[0], typeMap);

Эти объекты можно применять с класс Kubernetes ' Create методы, например, пространство имен

var k8SClientConfig = KubernetesClientConfiguration.BuildConfigFromConfigFile();
IKubernetes client = new Kubernetes(k8SClientConfig);

var ns = new V1Namespace { Metadata = new V1ObjectMeta { Name = "test" } };
var result = client.CreateNamespace(ns);
...