mirror of
https://git.vectorsigma.ru/public/k3s.git
synced 2026-07-30 18:29:41 +00:00
Watch the local Node object instead of get/sleep looping
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
(cherry picked from commit 5acd0b9008)
This commit is contained in:
committed by
Brad Davidson
parent
44a5978135
commit
c73aaf839b
@@ -6,14 +6,16 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/rancher/k3s/pkg/agent/util"
|
||||
"github.com/rancher/k3s/pkg/daemons/config"
|
||||
"github.com/rancher/k3s/pkg/version"
|
||||
"github.com/sirupsen/logrus"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
v1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||
"k8s.io/apimachinery/pkg/fields"
|
||||
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -77,22 +79,10 @@ func Prepare(ctx context.Context, nodeConfig *config.Node) error {
|
||||
return createFlannelConf(nodeConfig)
|
||||
}
|
||||
|
||||
func Run(ctx context.Context, nodeConfig *config.Node, nodes v1.NodeInterface) error {
|
||||
nodeName := nodeConfig.AgentConfig.NodeName
|
||||
|
||||
for {
|
||||
node, err := nodes.Get(ctx, nodeName, metav1.GetOptions{})
|
||||
if err == nil && node.Spec.PodCIDR != "" {
|
||||
break
|
||||
}
|
||||
if err == nil {
|
||||
logrus.Info("Waiting for node " + nodeName + " CIDR not assigned yet")
|
||||
} else {
|
||||
logrus.Infof("Waiting for node %s: %v", nodeName, err)
|
||||
}
|
||||
time.Sleep(2 * time.Second)
|
||||
func Run(ctx context.Context, nodeConfig *config.Node, nodes typedcorev1.NodeInterface) error {
|
||||
if err := waitForPodCIDR(ctx, nodeConfig.AgentConfig.NodeName, nodes); err != nil {
|
||||
return errors.Wrap(err, "failed to wait for PodCIDR assignment")
|
||||
}
|
||||
logrus.Info("Node CIDR assigned for: " + nodeName)
|
||||
|
||||
go func() {
|
||||
err := flannel(ctx, nodeConfig.FlannelIface, nodeConfig.FlannelConf, nodeConfig.AgentConfig.KubeConfigKubelet)
|
||||
@@ -102,6 +92,28 @@ func Run(ctx context.Context, nodeConfig *config.Node, nodes v1.NodeInterface) e
|
||||
return nil
|
||||
}
|
||||
|
||||
// waitForPodCIDR watches nodes with this node's name, and returns when the PodCIDR has been set.
|
||||
func waitForPodCIDR(ctx context.Context, nodeName string, nodes typedcorev1.NodeInterface) error {
|
||||
fieldSelector := fields.Set{metav1.ObjectNameField: nodeName}.String()
|
||||
watch, err := nodes.Watch(ctx, metav1.ListOptions{FieldSelector: fieldSelector})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer watch.Stop()
|
||||
|
||||
for ev := range watch.ResultChan() {
|
||||
node, ok := ev.Object.(*corev1.Node)
|
||||
if !ok {
|
||||
return fmt.Errorf("could not convert event object to node: %v", ev)
|
||||
}
|
||||
if node.Spec.PodCIDR != "" {
|
||||
break
|
||||
}
|
||||
}
|
||||
logrus.Info("PodCIDR assigned for node " + nodeName)
|
||||
return nil
|
||||
}
|
||||
|
||||
func createCNIConf(dir string) error {
|
||||
if dir == "" {
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user