Как я могу обеспечить Kubernetes копами, используя многодокументный файл yaml? - PullRequest
0 голосов
/ 08 мая 2018

У меня есть многодокументный файл yaml, как я могу подготовить кластер Kubernetes из этого?

Использование kops create -f только импортирует определение кластера и не импортирует группы экземпляров и т. Д., Которые определены в дополнительных «документах» с yaml:

...
    masters: private
    nodes: private

---

apiVersion: kops/v1alpha2
kind: InstanceGroup
...

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

В прошлом это могло быть невозможно, но сейчас возможно.

Вот как я сейчас использую свой кластер копов.

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

  1. devkube.mycompany.com.cluster.kops.yaml
  2. instancegroups.kops.yaml

Второй файл - это многодокументный файл yaml, который вы запрашиваете.
(с несколькими экземплярами instance.yaml внутри него, разделенными ---).
Примечание: я успешно смог объединить оба этих файла .yaml в один многодокументный файл .yaml, и он прекрасно работает, я просто делаю это таким образом, чтобы я мог повторно использовать instancegroups.yaml на нескольких кластеры / держать репо сухим.

Я сгенерировал файлы, используя:

Bash# kops get cluster --name devkube.mycompany.com -o yaml > devkube.mycompany.com.cluster.kops.yaml
Bash# kops get ig --name devkube.mycompany.com -o yaml > instancegroups.kops.yaml

Вот как я использую эти файлы для предоставления кластера kops из git:

export AWS_PROFILE=devkube-kops
export KOPS_STATE_STORE=s3://kops-state-devkube.mycompany.com
clustername="devkube.mycompany.com"

kops replace --name $clustername -f ../kops/qak8s.vibrenthealth.com.cluster.yaml --force
kops replace --name $clustername -f ../kops/instancegroups.yaml --force
kops create secret --name $clustername sshpublickey admin -i ~/.ssh/id_rsa.pub #so the person who provisions the cluster can ssh into the nodes
kops update cluster --name $clustername --yes
0 голосов
/ 08 мая 2018

Согласно исходному коду kops, поддерживается несколько разделов в одном файле.Возможно, вам нужно проверить файл на наличие ошибок.

Вот часть, отвечающая за анализ файла и создание ресурсов.Чтобы сделать код короче, я удалил все проверки ошибок.Для расследования, пожалуйста, см. Оригинальный файл :

func RunCreate(f *util.Factory, out io.Writer, c *CreateOptions) error {
    clientset, err := f.Clientset()

    // Codecs provides access to encoding and decoding for the scheme
    codecs := kopscodecs.Codecs //serializer.NewCodecFactory(scheme)

    codec := codecs.UniversalDecoder(kopsapi.SchemeGroupVersion)

    var clusterName = ""
    //var cSpec = false
    var sb bytes.Buffer
    fmt.Fprintf(&sb, "\n")
    for _, f := range c.Filenames {
        contents, err := vfs.Context.ReadFile(f)

        // TODO: this does not support a JSON array
        sections := bytes.Split(contents, []byte("\n---\n"))
        for _, section := range sections {
            defaults := &schema.GroupVersionKind{
                Group:   v1alpha1.SchemeGroupVersion.Group,
                Version: v1alpha1.SchemeGroupVersion.Version,
            }
            o, gvk, err := codec.Decode(section, defaults, nil)

            switch v := o.(type) {

            case *kopsapi.Cluster:
                // Adding a PerformAssignments() call here as the user might be trying to use
                // the new `-f` feature, with an old cluster definition.
                err = cloudup.PerformAssignments(v)
                _, err = clientset.CreateCluster(v)

            case *kopsapi.InstanceGroup:
                clusterName = v.ObjectMeta.Labels[kopsapi.LabelClusterName]
                cluster, err := clientset.GetCluster(clusterName)
                _, err = clientset.InstanceGroupsFor(cluster).Create(v)

            case *kopsapi.SSHCredential:
                clusterName = v.ObjectMeta.Labels[kopsapi.LabelClusterName]
                cluster, err := clientset.GetCluster(clusterName)
                sshCredentialStore, err := clientset.SSHCredentialStore(cluster)
                sshKeyArr := []byte(v.Spec.PublicKey)
                err = sshCredentialStore.AddSSHPublicKey("admin", sshKeyArr)

            default:
                glog.V(2).Infof("Type of object was %T", v)
                return fmt.Errorf("Unhandled kind %q in %s", gvk, f)
            }
        }

    }
    {
        // If there is a value in this sb, this should mean that we have something to deploy
        // so let's advise the user how to engage the cloud provider and deploy
        if sb.String() != "" {
            fmt.Fprintf(&sb, "\n")
            fmt.Fprintf(&sb, "To deploy these resources, run: kops update cluster %s --yes\n", clusterName)
            fmt.Fprintf(&sb, "\n")
        }
        _, err := out.Write(sb.Bytes())
    }
    return nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...