diff --git a/cmd/virtual-kubelet/commands/root/flag.go b/cmd/virtual-kubelet/commands/root/flag.go index f2d1e9794..85e04ae16 100644 --- a/cmd/virtual-kubelet/commands/root/flag.go +++ b/cmd/virtual-kubelet/commands/root/flag.go @@ -22,7 +22,6 @@ import ( "github.com/pkg/errors" "github.com/spf13/pflag" - "github.com/virtual-kubelet/virtual-kubelet/trace/opencensus" "k8s.io/klog" ) @@ -74,7 +73,7 @@ func installFlags(flags *pflag.FlagSet, c *Opts) { flags.IntVar(&c.PodSyncWorkers, "pod-sync-workers", c.PodSyncWorkers, `set the number of pod synchronization workers`) flags.BoolVar(&c.EnableNodeLease, "enable-node-lease", c.EnableNodeLease, `use node leases (1.13) for node heartbeats`) - flags.StringSliceVar(&c.TraceExporters, "trace-exporter", c.TraceExporters, fmt.Sprintf("sets the tracing exporter to use, available exporters: %s", opencensus.AvailableTraceExporters())) + flags.StringSliceVar(&c.TraceExporters, "trace-exporter", c.TraceExporters, fmt.Sprintf("sets the tracing exporter to use, available exporters: %s", AvailableTraceExporters())) flags.StringVar(&c.TraceConfig.ServiceName, "trace-service-name", c.TraceConfig.ServiceName, "sets the name of the service used to register with the trace exporter") flags.Var(mapVar(c.TraceConfig.Tags), "trace-tag", "add tags to include with traces in key=value form") flags.StringVar(&c.TraceSampleRate, "trace-sample-rate", c.TraceSampleRate, "set probability of tracing samples") diff --git a/cmd/virtual-kubelet/commands/root/http.go b/cmd/virtual-kubelet/commands/root/http.go index 3668fe0a8..8ffba86f0 100644 --- a/cmd/virtual-kubelet/commands/root/http.go +++ b/cmd/virtual-kubelet/commands/root/http.go @@ -25,8 +25,8 @@ import ( "github.com/pkg/errors" "github.com/virtual-kubelet/virtual-kubelet/log" + "github.com/virtual-kubelet/virtual-kubelet/node/api" "github.com/virtual-kubelet/virtual-kubelet/providers" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" ) // AcceptedCiphers is the list of accepted TLS ciphers, with known weak ciphers elided diff --git a/cmd/virtual-kubelet/commands/root/opts.go b/cmd/virtual-kubelet/commands/root/opts.go index 7bb8496ca..7b3c46da0 100644 --- a/cmd/virtual-kubelet/commands/root/opts.go +++ b/cmd/virtual-kubelet/commands/root/opts.go @@ -22,7 +22,6 @@ import ( "github.com/mitchellh/go-homedir" "github.com/pkg/errors" - "github.com/virtual-kubelet/virtual-kubelet/trace/opencensus" corev1 "k8s.io/api/core/v1" ) @@ -77,7 +76,7 @@ type Opts struct { TraceExporters []string TraceSampleRate string - TraceConfig opencensus.TracingExporterOptions + TraceConfig TracingExporterOptions // Startup Timeout is how long to wait for the kubelet to start StartupTimeout time.Duration diff --git a/cmd/virtual-kubelet/commands/root/root.go b/cmd/virtual-kubelet/commands/root/root.go index 0c91fe644..cafbcb86d 100644 --- a/cmd/virtual-kubelet/commands/root/root.go +++ b/cmd/virtual-kubelet/commands/root/root.go @@ -25,9 +25,9 @@ import ( "github.com/virtual-kubelet/virtual-kubelet/errdefs" "github.com/virtual-kubelet/virtual-kubelet/log" "github.com/virtual-kubelet/virtual-kubelet/manager" + "github.com/virtual-kubelet/virtual-kubelet/node" "github.com/virtual-kubelet/virtual-kubelet/providers" "github.com/virtual-kubelet/virtual-kubelet/providers/register" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -147,12 +147,12 @@ func runRootCommand(ctx context.Context, c Opts) error { } pNode := NodeFromProvider(ctx, c.NodeName, taint, p) - node, err := vkubelet.NewNode( - vkubelet.NaiveNodeProvider{}, + nodeRunner, err := node.NewNodeController( + node.NaiveNodeProvider{}, pNode, client.CoreV1().Nodes(), - vkubelet.WithNodeEnableLeaseV1Beta1(leaseClient, nil), - vkubelet.WithNodeStatusUpdateErrorHandler(func(ctx context.Context, err error) error { + node.WithNodeEnableLeaseV1Beta1(leaseClient, nil), + node.WithNodeStatusUpdateErrorHandler(func(ctx context.Context, err error) error { if !k8serrors.IsNotFound(err) { return err } @@ -176,7 +176,7 @@ func runRootCommand(ctx context.Context, c Opts) error { eb.StartLogging(log.G(ctx).Infof) eb.StartRecordingToSink(&corev1client.EventSinkImpl{Interface: client.CoreV1().Events(c.KubeNamespace)}) - pc, err := vkubelet.NewPodController(vkubelet.PodControllerConfig{ + pc, err := node.NewPodController(node.PodControllerConfig{ PodClient: client.CoreV1(), PodInformer: podInformer, EventRecorder: eb.NewRecorder(scheme.Scheme, corev1.EventSource{Component: path.Join(pNode.Name, "pod-controller")}), @@ -210,7 +210,7 @@ func runRootCommand(ctx context.Context, c Opts) error { } go func() { - if err := node.Run(ctx); err != nil { + if err := nodeRunner.Run(ctx); err != nil { log.G(ctx).Fatal(err) } }() diff --git a/cmd/virtual-kubelet/commands/root/tracing.go b/cmd/virtual-kubelet/commands/root/tracing.go index 445273d34..e3dc619f7 100644 --- a/cmd/virtual-kubelet/commands/root/tracing.go +++ b/cmd/virtual-kubelet/commands/root/tracing.go @@ -25,7 +25,6 @@ import ( "github.com/pkg/errors" "github.com/virtual-kubelet/virtual-kubelet/errdefs" "github.com/virtual-kubelet/virtual-kubelet/log" - "github.com/virtual-kubelet/virtual-kubelet/trace/opencensus" octrace "go.opencensus.io/trace" "go.opencensus.io/zpages" ) @@ -55,7 +54,7 @@ func setupTracing(ctx context.Context, c Opts) error { setupZpages(ctx) continue } - exporter, err := opencensus.GetTracingExporter(e, c.TraceConfig) + exporter, err := GetTracingExporter(e, c.TraceConfig) if err != nil { return err } diff --git a/trace/opencensus/register.go b/cmd/virtual-kubelet/commands/root/tracing_register.go similarity index 98% rename from trace/opencensus/register.go rename to cmd/virtual-kubelet/commands/root/tracing_register.go index a77b5c3f6..6ce7cdb17 100644 --- a/trace/opencensus/register.go +++ b/cmd/virtual-kubelet/commands/root/tracing_register.go @@ -1,4 +1,4 @@ -package opencensus +package root import ( "github.com/virtual-kubelet/virtual-kubelet/errdefs" diff --git a/trace/opencensus/jaeger.go b/cmd/virtual-kubelet/commands/root/tracing_register_jaeger.go similarity index 97% rename from trace/opencensus/jaeger.go rename to cmd/virtual-kubelet/commands/root/tracing_register_jaeger.go index c0461bea0..ce89328f4 100644 --- a/trace/opencensus/jaeger.go +++ b/cmd/virtual-kubelet/commands/root/tracing_register_jaeger.go @@ -1,6 +1,6 @@ // +build !no_jaeger_exporter -package opencensus +package root import ( "errors" diff --git a/trace/opencensus/ocagent.go b/cmd/virtual-kubelet/commands/root/tracing_register_ocagent.go similarity index 98% rename from trace/opencensus/ocagent.go rename to cmd/virtual-kubelet/commands/root/tracing_register_ocagent.go index 7b219a65b..c9502801c 100644 --- a/trace/opencensus/ocagent.go +++ b/cmd/virtual-kubelet/commands/root/tracing_register_ocagent.go @@ -1,6 +1,6 @@ // +build !no_ocagent_exporter -package opencensus +package root import ( "os" diff --git a/trace/opencensus/register_test.go b/cmd/virtual-kubelet/commands/root/tracing_register_test.go similarity index 98% rename from trace/opencensus/register_test.go rename to cmd/virtual-kubelet/commands/root/tracing_register_test.go index 02c2ee4ab..1de04a984 100644 --- a/trace/opencensus/register_test.go +++ b/cmd/virtual-kubelet/commands/root/tracing_register_test.go @@ -1,4 +1,4 @@ -package opencensus +package root import ( "testing" diff --git a/internal/test/e2e/basic_test.go b/internal/test/e2e/basic_test.go index 6e77b816b..1e644d608 100644 --- a/internal/test/e2e/basic_test.go +++ b/internal/test/e2e/basic_test.go @@ -7,9 +7,9 @@ import ( "testing" "time" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet" + "github.com/virtual-kubelet/virtual-kubelet/node" "gotest.tools/assert" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" ) @@ -237,7 +237,7 @@ func TestCreatePodWithOptionalInexistentSecrets(t *testing.T) { } // Wait for an event concerning the missing secret to be reported on the pod. - if err := f.WaitUntilPodEventWithReason(pod, vkubelet.ReasonOptionalSecretNotFound); err != nil { + if err := f.WaitUntilPodEventWithReason(pod, node.ReasonOptionalSecretNotFound); err != nil { t.Fatal(err) } @@ -266,7 +266,7 @@ func TestCreatePodWithMandatoryInexistentSecrets(t *testing.T) { }() // Wait for an event concerning the missing secret to be reported on the pod. - if err := f.WaitUntilPodEventWithReason(pod, vkubelet.ReasonMandatorySecretNotFound); err != nil { + if err := f.WaitUntilPodEventWithReason(pod, node.ReasonMandatorySecretNotFound); err != nil { t.Fatal(err) } @@ -300,7 +300,7 @@ func TestCreatePodWithOptionalInexistentConfigMap(t *testing.T) { } // Wait for an event concerning the missing config map to be reported on the pod. - if err := f.WaitUntilPodEventWithReason(pod, vkubelet.ReasonOptionalConfigMapNotFound); err != nil { + if err := f.WaitUntilPodEventWithReason(pod, node.ReasonOptionalConfigMapNotFound); err != nil { t.Fatal(err) } @@ -329,7 +329,7 @@ func TestCreatePodWithMandatoryInexistentConfigMap(t *testing.T) { }() // Wait for an event concerning the missing config map to be reported on the pod. - if err := f.WaitUntilPodEventWithReason(pod, vkubelet.ReasonMandatoryConfigMapNotFound); err != nil { + if err := f.WaitUntilPodEventWithReason(pod, node.ReasonMandatoryConfigMapNotFound); err != nil { t.Fatal(err) } diff --git a/vkubelet/api/doc.go b/node/api/doc.go similarity index 100% rename from vkubelet/api/doc.go rename to node/api/doc.go diff --git a/vkubelet/api/exec.go b/node/api/exec.go similarity index 100% rename from vkubelet/api/exec.go rename to node/api/exec.go diff --git a/vkubelet/api/helpers.go b/node/api/helpers.go similarity index 100% rename from vkubelet/api/helpers.go rename to node/api/helpers.go diff --git a/vkubelet/api/logs.go b/node/api/logs.go similarity index 100% rename from vkubelet/api/logs.go rename to node/api/logs.go diff --git a/vkubelet/api/pods.go b/node/api/pods.go similarity index 100% rename from vkubelet/api/pods.go rename to node/api/pods.go diff --git a/vkubelet/api/server.go b/node/api/server.go similarity index 100% rename from vkubelet/api/server.go rename to node/api/server.go diff --git a/vkubelet/api/stats.go b/node/api/stats.go similarity index 100% rename from vkubelet/api/stats.go rename to node/api/stats.go diff --git a/node/doc.go b/node/doc.go new file mode 100644 index 000000000..a55d0d054 --- /dev/null +++ b/node/doc.go @@ -0,0 +1,48 @@ +/* +Package node implements the components for operating a node in Kubernetes. +This includes controllers for managin the node object, running scheduled pods, +and exporting HTTP endpoints expected by the Kubernets API server. + +There are two primary controllers, the node runner and the pod runner. + + nodeRunner, _ := node.NewNodeController(...) + // setup other things + podRunner, _ := node.NewPodController(...) + + go podRunner.Run(ctx) + + select { + case <-podRunner.Ready(): + go nodeRunner.Run(ctx) + case <-ctx.Done() + return ctx.Err() + } + +After calling start, cancelling the passed in context will shutdown the +controller. +Note this example elides error handling. + +Up to this point you have an active node in Kubernetes which can have pods scheduled +to it. However the API server expects nodes to implement API endpoints in order +to support certain features such as fetching logs or execing a new process. +The api package provides some helpers for this: +`api.AttachPodRoutes` and `api.AttachMetricsRoutes`. + + mux := http.NewServeMux() + api.AttachPodRoutes(provider, mux) + +You must configure your own HTTP server, but these helpers will add handlers at +the correct URI paths to your serve mux. You are not required to use go's +built-in `*http.ServeMux`, but it does implement the `ServeMux` interface +defined in this package which is used for these helpers. + +Note: The metrics routes may need to be attached to a different HTTP server, +depending on your configuration. + +For more fine-grained control over the API, see the `node/api` package which +only implements the HTTP handlers that you can use in whatever way you want. + +This uses open-cenesus to implement tracing (but no internal metrics yet) which +is propagated through the context. This is passed on even to the providers. +*/ +package node diff --git a/vkubelet/env.go b/node/env.go similarity index 99% rename from vkubelet/env.go rename to node/env.go index 542c15110..95ea8ba33 100755 --- a/vkubelet/env.go +++ b/node/env.go @@ -1,4 +1,4 @@ -package vkubelet +package node import ( "context" diff --git a/vkubelet/env_internal_test.go b/node/env_internal_test.go similarity index 99% rename from vkubelet/env_internal_test.go rename to node/env_internal_test.go index ceb54eefb..7279c0b17 100644 --- a/vkubelet/env_internal_test.go +++ b/node/env_internal_test.go @@ -1,4 +1,4 @@ -package vkubelet +package node import ( "context" diff --git a/vkubelet/node.go b/node/node.go similarity index 90% rename from vkubelet/node.go rename to node/node.go index 10e5b8f20..d653ef6de 100644 --- a/vkubelet/node.go +++ b/node/node.go @@ -1,4 +1,4 @@ -package vkubelet +package node import ( "context" @@ -40,16 +40,16 @@ type NodeProvider interface { NotifyNodeStatus(ctx context.Context, cb func(*corev1.Node)) } -// NewNode creates a new node. +// NewNodeController creates a new node controller. // This does not have any side-effects on the system or kubernetes. // // Use the node's `Run` method to register and run the loops to update the node // in Kubernetes. // -// Note: When if there are multiple NodeOpts which apply against the same -// underlying options, the last NodeOpt will win. -func NewNode(p NodeProvider, node *corev1.Node, nodes v1.NodeInterface, opts ...NodeOpt) (*Node, error) { - n := &Node{p: p, n: node, nodes: nodes, chReady: make(chan struct{})} +// Note: When if there are multiple NodeControllerOpts which apply against the same +// underlying options, the last NodeControllerOpt will win. +func NewNodeController(p NodeProvider, node *corev1.Node, nodes v1.NodeInterface, opts ...NodeControllerOpt) (*NodeController, error) { + n := &NodeController{p: p, n: node, nodes: nodes, chReady: make(chan struct{})} for _, o := range opts { if err := o(n); err != nil { return nil, pkgerrors.Wrap(err, "error applying node option") @@ -58,8 +58,8 @@ func NewNode(p NodeProvider, node *corev1.Node, nodes v1.NodeInterface, opts ... return n, nil } -// NodeOpt are the functional options used for configuring a node -type NodeOpt func(*Node) error +// NodeControllerOpt are the functional options used for configuring a node +type NodeControllerOpt func(*NodeController) error // nolint: golint // WithNodeEnableLeaseV1Beta1 enables support for v1beta1 leases. // If client is nil, leases will not be enabled. @@ -75,8 +75,8 @@ type NodeOpt func(*Node) error // - When node leases are enabled, node status updates are colled by the // node status update interval option. // To set a custom node status update interval, see WithNodeStatusUpdateInterval(). -func WithNodeEnableLeaseV1Beta1(client v1beta1.LeaseInterface, baseLease *coord.Lease) NodeOpt { - return func(n *Node) error { +func WithNodeEnableLeaseV1Beta1(client v1beta1.LeaseInterface, baseLease *coord.Lease) NodeControllerOpt { + return func(n *NodeController) error { n.leases = client n.lease = baseLease return nil @@ -86,8 +86,8 @@ func WithNodeEnableLeaseV1Beta1(client v1beta1.LeaseInterface, baseLease *coord. // WithNodePingInterval sets the interval for checking node status // If node leases are not supported (or not enabled), this is the frequency // with which the node status will be updated in Kubernetes. -func WithNodePingInterval(d time.Duration) NodeOpt { - return func(n *Node) error { +func WithNodePingInterval(d time.Duration) NodeControllerOpt { + return func(n *NodeController) error { n.pingInterval = d return nil } @@ -98,8 +98,8 @@ func WithNodePingInterval(d time.Duration) NodeOpt { // node status, not the node lease. // When node leases are not enabled (or are not supported on the cluster) this // has no affect and node status is updated on the "ping" interval. -func WithNodeStatusUpdateInterval(d time.Duration) NodeOpt { - return func(n *Node) error { +func WithNodeStatusUpdateInterval(d time.Duration) NodeControllerOpt { + return func(n *NodeController) error { n.statusInterval = d return nil } @@ -112,8 +112,8 @@ func WithNodeStatusUpdateInterval(d time.Duration) NodeOpt { // // The error passed to the handler will be the error received from kubernetes // when updating node status. -func WithNodeStatusUpdateErrorHandler(h ErrorHandler) NodeOpt { - return func(n *Node) error { +func WithNodeStatusUpdateErrorHandler(h ErrorHandler) NodeControllerOpt { + return func(n *NodeController) error { n.nodeStatusUpdateErrorHandler = h return nil } @@ -124,9 +124,10 @@ func WithNodeStatusUpdateErrorHandler(h ErrorHandler) NodeOpt { // progress can continue (or a retry is possible). type ErrorHandler func(context.Context, error) error -// Node deals with creating and managing a node object in Kubernetes. +// NodeController deals with creating and managing a node object in Kubernetes. // It can register a node with Kubernetes and periodically update its status. -type Node struct { +// NodeController manages a single node entity. +type NodeController struct { // nolint: golint p NodeProvider n *corev1.Node @@ -162,7 +163,7 @@ const ( // node status update (because some things still expect the node to be updated // periodically), otherwise it will only use node status update with the configured // ping interval. -func (n *Node) Run(ctx context.Context) error { +func (n *NodeController) Run(ctx context.Context) error { if n.pingInterval == time.Duration(0) { n.pingInterval = DefaultPingInterval } @@ -201,7 +202,7 @@ func (n *Node) Run(ctx context.Context) error { return n.controlLoop(ctx) } -func (n *Node) ensureNode(ctx context.Context) error { +func (n *NodeController) ensureNode(ctx context.Context) error { err := n.updateStatus(ctx, true) if err == nil || !errors.IsNotFound(err) { return err @@ -219,11 +220,11 @@ func (n *Node) ensureNode(ctx context.Context) error { // Ready returns a channel that gets closed when the node is fully up and // running. Note that if there is an error on startup this channel will never // be started. -func (n *Node) Ready() <-chan struct{} { +func (n *NodeController) Ready() <-chan struct{} { return n.chReady } -func (n *Node) controlLoop(ctx context.Context) error { +func (n *NodeController) controlLoop(ctx context.Context) error { pingTimer := time.NewTimer(n.pingInterval) defer pingTimer.Stop() @@ -278,7 +279,7 @@ func (n *Node) controlLoop(ctx context.Context) error { } } -func (n *Node) handlePing(ctx context.Context) (retErr error) { +func (n *NodeController) handlePing(ctx context.Context) (retErr error) { ctx, span := trace.StartSpan(ctx, "node.handlePing") defer span.End() defer func() { @@ -296,7 +297,7 @@ func (n *Node) handlePing(ctx context.Context) (retErr error) { return n.updateLease(ctx) } -func (n *Node) updateLease(ctx context.Context) error { +func (n *NodeController) updateLease(ctx context.Context) error { l, err := UpdateNodeLease(ctx, n.leases, newLease(n.lease)) if err != nil { return err @@ -306,7 +307,7 @@ func (n *Node) updateLease(ctx context.Context) error { return nil } -func (n *Node) updateStatus(ctx context.Context, skipErrorCb bool) error { +func (n *NodeController) updateStatus(ctx context.Context, skipErrorCb bool) error { updateNodeStatusHeartbeat(n.n) node, err := UpdateNodeStatus(ctx, n.nodes, n.n) diff --git a/vkubelet/node_test.go b/node/node_test.go similarity index 98% rename from vkubelet/node_test.go rename to node/node_test.go index 55f502355..700a448d2 100644 --- a/vkubelet/node_test.go +++ b/node/node_test.go @@ -1,4 +1,4 @@ -package vkubelet +package node import ( "context" @@ -33,14 +33,14 @@ func testNodeRun(t *testing.T, enableLease bool) { leases := c.Coordination().Leases(corev1.NamespaceNodeLease) interval := 1 * time.Millisecond - opts := []NodeOpt{ + opts := []NodeControllerOpt{ WithNodePingInterval(interval), WithNodeStatusUpdateInterval(interval), } if enableLease { opts = append(opts, WithNodeEnableLeaseV1Beta1(leases, nil)) } - node, err := NewNode(testP, testNode(t), nodes, opts...) + node, err := NewNodeController(testP, testNode(t), nodes, opts...) assert.NilError(t, err) chErr := make(chan error) @@ -160,7 +160,7 @@ func TestNodeCustomUpdateStatusErrorHandler(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - node, err := NewNode(testP, testNode(t), nodes, + node, err := NewNodeController(testP, testNode(t), nodes, WithNodeStatusUpdateErrorHandler(func(_ context.Context, err error) error { cancel() return nil diff --git a/vkubelet/pod.go b/node/pod.go similarity index 99% rename from vkubelet/pod.go rename to node/pod.go index 7f8720922..9d0a80bc6 100644 --- a/vkubelet/pod.go +++ b/node/pod.go @@ -1,4 +1,4 @@ -package vkubelet +package node import ( "context" diff --git a/vkubelet/pod_test.go b/node/pod_test.go similarity index 99% rename from vkubelet/pod_test.go rename to node/pod_test.go index e2ed7902e..cbdcfc69c 100644 --- a/vkubelet/pod_test.go +++ b/node/pod_test.go @@ -1,4 +1,4 @@ -package vkubelet +package node import ( "context" diff --git a/vkubelet/podcontroller.go b/node/podcontroller.go similarity index 99% rename from vkubelet/podcontroller.go rename to node/podcontroller.go index 503c78f8b..eb28d43dc 100644 --- a/vkubelet/podcontroller.go +++ b/node/podcontroller.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package vkubelet +package node import ( "context" diff --git a/vkubelet/queue.go b/node/queue.go similarity index 99% rename from vkubelet/queue.go rename to node/queue.go index c215d6eee..8918310b4 100644 --- a/vkubelet/queue.go +++ b/node/queue.go @@ -1,4 +1,4 @@ -package vkubelet +package node import ( "context" diff --git a/providers/alibabacloud/eci.go b/providers/alibabacloud/eci.go index 080ef0549..6f5b3c294 100644 --- a/providers/alibabacloud/eci.go +++ b/providers/alibabacloud/eci.go @@ -20,8 +20,8 @@ import ( "github.com/virtual-kubelet/virtual-kubelet/errdefs" "github.com/virtual-kubelet/virtual-kubelet/log" "github.com/virtual-kubelet/virtual-kubelet/manager" + "github.com/virtual-kubelet/virtual-kubelet/node/api" "github.com/virtual-kubelet/virtual-kubelet/providers/alibabacloud/eci" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" v1 "k8s.io/api/core/v1" k8serr "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" diff --git a/providers/aws/fargate/cluster.go b/providers/aws/fargate/cluster.go index dc07be79d..a8355c228 100644 --- a/providers/aws/fargate/cluster.go +++ b/providers/aws/fargate/cluster.go @@ -13,7 +13,7 @@ import ( "github.com/aws/aws-sdk-go/service/cloudwatchlogs" "github.com/aws/aws-sdk-go/service/ecs" "github.com/virtual-kubelet/virtual-kubelet/errdefs" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" + "github.com/virtual-kubelet/virtual-kubelet/node/api" k8sTypes "k8s.io/apimachinery/pkg/types" ) diff --git a/providers/aws/provider.go b/providers/aws/provider.go index accfcc360..be4de071b 100644 --- a/providers/aws/provider.go +++ b/providers/aws/provider.go @@ -8,8 +8,8 @@ import ( "time" "github.com/virtual-kubelet/virtual-kubelet/manager" + "github.com/virtual-kubelet/virtual-kubelet/node/api" "github.com/virtual-kubelet/virtual-kubelet/providers/aws/fargate" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/providers/aws/provider_test.go b/providers/aws/provider_test.go index 03b0efe81..984b502b4 100644 --- a/providers/aws/provider_test.go +++ b/providers/aws/provider_test.go @@ -15,8 +15,8 @@ import ( "github.com/aws/aws-sdk-go/service/ec2" "github.com/aws/aws-sdk-go/service/ecs" "github.com/aws/aws-sdk-go/service/iam" + "github.com/virtual-kubelet/virtual-kubelet/node/api" vkAWS "github.com/virtual-kubelet/virtual-kubelet/providers/aws" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/providers/azure/aci.go b/providers/azure/aci.go index 10355e42e..35e2e35d9 100644 --- a/providers/azure/aci.go +++ b/providers/azure/aci.go @@ -26,8 +26,8 @@ import ( "github.com/virtual-kubelet/virtual-kubelet/errdefs" "github.com/virtual-kubelet/virtual-kubelet/log" "github.com/virtual-kubelet/virtual-kubelet/manager" + "github.com/virtual-kubelet/virtual-kubelet/node/api" "github.com/virtual-kubelet/virtual-kubelet/trace" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" v1 "k8s.io/api/core/v1" k8serr "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" diff --git a/providers/azurebatch/batch.go b/providers/azurebatch/batch.go index 0f8bffd92..910d956c2 100644 --- a/providers/azurebatch/batch.go +++ b/providers/azurebatch/batch.go @@ -17,8 +17,8 @@ import ( "github.com/Azure/go-autorest/autorest/to" "github.com/lawrencegripper/pod2docker" "github.com/virtual-kubelet/virtual-kubelet/manager" + "github.com/virtual-kubelet/virtual-kubelet/node/api" azureCreds "github.com/virtual-kubelet/virtual-kubelet/providers/azure" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/providers/azurebatch/batch_test.go b/providers/azurebatch/batch_test.go index dc7b9dd6c..8ee5aeedd 100644 --- a/providers/azurebatch/batch_test.go +++ b/providers/azurebatch/batch_test.go @@ -12,7 +12,7 @@ import ( "github.com/Azure/azure-sdk-for-go/services/batch/2017-09-01.6.0/batch" "github.com/Azure/go-autorest/autorest" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" + "github.com/virtual-kubelet/virtual-kubelet/node/api" apiv1 "k8s.io/api/core/v1" ) diff --git a/providers/cri/cri.go b/providers/cri/cri.go index 93368a4e0..1f858261b 100644 --- a/providers/cri/cri.go +++ b/providers/cri/cri.go @@ -19,8 +19,8 @@ import ( log "github.com/sirupsen/logrus" "github.com/virtual-kubelet/virtual-kubelet/errdefs" "github.com/virtual-kubelet/virtual-kubelet/manager" + "github.com/virtual-kubelet/virtual-kubelet/node/api" "github.com/virtual-kubelet/virtual-kubelet/providers" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" "google.golang.org/grpc" v1 "k8s.io/api/core/v1" k8serr "k8s.io/apimachinery/pkg/api/errors" diff --git a/providers/huawei/cci.go b/providers/huawei/cci.go index 5a722eb0d..3e4465260 100644 --- a/providers/huawei/cci.go +++ b/providers/huawei/cci.go @@ -17,8 +17,8 @@ import ( "github.com/virtual-kubelet/virtual-kubelet/errdefs" "github.com/virtual-kubelet/virtual-kubelet/manager" + "github.com/virtual-kubelet/virtual-kubelet/node/api" "github.com/virtual-kubelet/virtual-kubelet/providers/huawei/auth" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/providers/mock/mock.go b/providers/mock/mock.go index 2d4e2ae83..a217b03c2 100644 --- a/providers/mock/mock.go +++ b/providers/mock/mock.go @@ -12,8 +12,8 @@ import ( "github.com/virtual-kubelet/virtual-kubelet/errdefs" "github.com/virtual-kubelet/virtual-kubelet/log" + "github.com/virtual-kubelet/virtual-kubelet/node/api" "github.com/virtual-kubelet/virtual-kubelet/trace" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -37,7 +37,7 @@ const ( var ( _ providers.Provider = (*MockLegacyProvider)(nil) _ providers.PodMetricsProvider = (*MockLegacyProvider)(nil) - _ vkubelet.PodNotifier = (*MockProvider)(nil) + _ node.PodNotifier = (*MockProvider)(nil) ) */ diff --git a/providers/mock/mock_test.go b/providers/mock/mock_test.go index ced61c3b7..82e961cae 100644 --- a/providers/mock/mock_test.go +++ b/providers/mock/mock_test.go @@ -6,7 +6,7 @@ package mock /* func TestMockLegacyInterface(t *testing.T) { var mlp providers.Provider = &MockLegacyProvider{} - _, ok := mlp.(vkubelet.PodNotifier) + _, ok := mlp.(node.PodNotifier) assert.Assert(t, !ok) } */ diff --git a/providers/nomad/nomad.go b/providers/nomad/nomad.go index 60ce9d8ca..68f741570 100644 --- a/providers/nomad/nomad.go +++ b/providers/nomad/nomad.go @@ -11,8 +11,8 @@ import ( nomad "github.com/hashicorp/nomad/api" "github.com/virtual-kubelet/virtual-kubelet/manager" + "github.com/virtual-kubelet/virtual-kubelet/node/api" "github.com/virtual-kubelet/virtual-kubelet/providers" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/providers/openstack/zun.go b/providers/openstack/zun.go index 29debbc78..a08b37423 100644 --- a/providers/openstack/zun.go +++ b/providers/openstack/zun.go @@ -17,8 +17,8 @@ import ( "github.com/gophercloud/gophercloud/openstack/container/v1/capsules" "github.com/gophercloud/gophercloud/pagination" "github.com/virtual-kubelet/virtual-kubelet/manager" + "github.com/virtual-kubelet/virtual-kubelet/node/api" "github.com/virtual-kubelet/virtual-kubelet/providers" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/providers/provider.go b/providers/provider.go index f0976fc7a..4257b5769 100644 --- a/providers/provider.go +++ b/providers/provider.go @@ -4,8 +4,8 @@ import ( "context" "io" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" + "github.com/virtual-kubelet/virtual-kubelet/node" + "github.com/virtual-kubelet/virtual-kubelet/node/api" v1 "k8s.io/api/core/v1" stats "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" ) @@ -16,7 +16,7 @@ import ( // github.com/virtual-kubelet/virtual-kubelet/errdefs package in order for the // core logic to be able to understand the type of failure. type Provider interface { - vkubelet.PodLifecycleHandler + node.PodLifecycleHandler // GetContainerLogs retrieves the logs of a container by name from the provider. GetContainerLogs(ctx context.Context, namespace, podName, containerName string, opts api.ContainerLogOpts) (io.ReadCloser, error) diff --git a/providers/web/broker.go b/providers/web/broker.go index 32e33f336..93eed0c5f 100644 --- a/providers/web/broker.go +++ b/providers/web/broker.go @@ -30,7 +30,7 @@ import ( "github.com/cenkalti/backoff" "github.com/virtual-kubelet/virtual-kubelet/errdefs" - "github.com/virtual-kubelet/virtual-kubelet/vkubelet/api" + "github.com/virtual-kubelet/virtual-kubelet/node/api" v1 "k8s.io/api/core/v1" ) diff --git a/vkubelet/doc.go b/vkubelet/doc.go deleted file mode 100644 index 47597ba77..000000000 --- a/vkubelet/doc.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Package vkubelet implements the core virtual-kubelet framework. -It contains everything reuired to implement a virtuak-kubelet, including the -core controller which reconciles pod states and API endpoints for things like -pod logs, exec, attach, etc. - -To get started, call the `New` with the appropriate config. When you are ready -to start the controller, which registers the node and starts watching for pod -changes, call `Run`. Taints can be used ensure the sceduler only schedules -certain workloads to your virtual-kubelet. - - vk := vkubelet.New(...) - // setup other things - ... - vk.Run(ctx, ...) - -After calling start, cancelling the passed in context will shutdown the -controller. - -Up to this point you have a running virtual kubelet controller, but no HTTP -handlers to deal with requests forwarded from the API server for things like -pod logs (e.g. user calls `kubectl logs myVKPod`). The api package provides some -helpers for this: `api.AttachPodRoutes` and `api.AttachMetricsRoutes`. - - mux := http.NewServeMux() - api.AttachPodRoutes(provider, mux) - -You must configure your own HTTP server, but these helpers will add handlers at -the correct URI paths to your serve mux. You are not required to use go's -built-in `*http.ServeMux`, but it does implement the `ServeMux` interface -defined in this package which is used for these helpers. - -Note: The metrics routes may need to be attached to a different HTTP server, -depending on your configuration. - -For more fine-grained control over the API, see the `vkubelet/api` package which -only implements the HTTP handlers that you can use in whatever way you want. - -This uses open-cenesus to implement tracing (but no internal metrics yet) which -is propagated through the context. This is passed on even to the providers. We -may look at supporting custom propagaters for providers who would like to use a -different tracing format. -*/ -package vkubelet