Я пытаюсь использовать kops для создания новой группы экземпляров программно как часть настраиваемого оператора kubernetes.
Я последовал примеру здесь
https://github.com/kubernetes/kops/tree/master/examples/kops-api-example
Я могу успешно add
включить группы экземпляров в кластер. Но я не могу их apply
правильно. Оператор запускается, и из моего локального я вижу, что узлы dedicated
были добавлены моим оператором. Но они не применяются (не создаются как настоящие группы автоматического масштабирования).
kops get instancegroup
NAME ROLE MACHINETYPE MIN MAX ZONES
master-us-east-1a Master t3.medium 1 1 us-east-1a
bla.dedicated Node t3.medium 1 1 us-east-1a,us-east-1b,us-east-1c
nodez Node m5.xlarge 3 8 us-east-1a,us-east-1b,us-east-1c
foo.dedicated Node t3.medium 1 1 us-east-1a,us-east-1b,us-east-1c
Похоже, он пытается заменить все IG, и я получаю следующую ошибку, которая происходит в cloudup.ApplyClusterCmd
must configure at least one Master InstanceGroup
Может кто-нибудь указать мне, что я делаю не так?
func (snip Snip) {
ctx := context.TODO()
instanceGroupName := snip.Name + ".dedicated"
var size int32 = 1
registryBase, err := vfs.Context.BuildVfsPath("s3://example.kops")
if err != nil {
logger.Error(err, "Could not build vfs path")
return reconcile.Result{}, err
}
clientset := vfsclientset.NewVFSClientset(registryBase)
cluster, err := clientset.GetCluster(ctx, "example.com")
if err != nil {
logger.Error(err, "Could not get cluster")
return reconcile.Result{}, err
}
igf := clientset.InstanceGroupsFor(cluster)
_, err = igf.Get(ctx, instanceGroupName, metav1.GetOptions{})
if err == nil {
return reconcile.Result{}, nil
}
logger.Info("Creating new dedicated instance group")
if !errors.IsNotFound(err) {
logger.Error(err, "Could not get instance group")
return reconcile.Result{}, err
}
igs, err := igf.List(ctx, metav1.ListOptions{})
if err != nil {
logger.Error(err, "Could not get instance groups for cluster ")
return reconcile.Result{}, err
}
var newIg = &kops.InstanceGroup{
ObjectMeta: metav1.ObjectMeta{
Name: instanceGroupName,
},
Spec: kops.InstanceGroupSpec{
MachineType: "t3.medium",
MinSize: &size,
MaxSize: &size,
Role: kops.InstanceGroupRoleNode,
Taints: []string{
"NoSchedule",
},
Subnets: []string{
"us-east-1a",
"us-east-1b",
"us-east-1c",
},
},
}
_, err = igf.Create(ctx, newIg, metav1.CreateOptions{})
if err != nil {
logger.Error(err, "Could not create instance group")
return reconcile.Result{}, err
}
var newIgs []*kops.InstanceGroup
for _, item := range igs.Items {
newIgs = append(newIgs, &item)
}
newIgs = append(newIgs, newIg)
applyCmd := &cloudup.ApplyClusterCmd{
Cluster: cluster,
Clientset: clientset,
TargetName: cloudup.TargetDirect,
}
err = applyCmd.Run(ctx)
if err != nil {
logger.Error(err, "Could not update cluster")
return reconcile.Result{}, err
}
logger.Info("Done creating dedicated instance group!")
return reconcile.Result{}, nil