mirror of
https://github.com/ubuntu/microk8s.git
synced 2021-05-23 02:23:41 +03:00
Prepare for v1.21 (#2156)
This commit is contained in:
committed by
GitHub
parent
af19a2e0a7
commit
3d0cd4d4e9
@@ -1,6 +1,6 @@
|
|||||||
# MicroK8s
|
# MicroK8s
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
<img src="/docs/images/certified_kubernetes_color-222x300.png" align="right" width="200px">
|
<img src="/docs/images/certified_kubernetes_color-222x300.png" align="right" width="200px">
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,27 +1,28 @@
|
|||||||
From 7136e0646e50d26d40db49ae0f6606775d11a56a Mon Sep 17 00:00:00 2001
|
From de618434d4a4168f11bec34c062700b3ad17d2ca Mon Sep 17 00:00:00 2001
|
||||||
From: Konstantinos <kos.tsakalozos@canonical.com>
|
From: Konstantinos Tsakalozos <kos.tsakalozos@canonical.com>
|
||||||
Date: Thu, 24 Sep 2020 21:06:03 +0300
|
Date: Wed, 3 Mar 2021 18:19:37 +0200
|
||||||
Subject: [PATCH 1/2] kubelite, single binary k8s
|
Subject: [PATCH] Kubelite integration
|
||||||
|
|
||||||
---
|
---
|
||||||
cmd/kube-apiserver/app/server.go | 9 ++--
|
cmd/kube-apiserver/app/server.go | 9 ++--
|
||||||
cmd/kubelet/app/server.go | 14 +++--
|
cmd/kubelet/app/server.go | 11 ++--
|
||||||
cmd/kubelite/app/daemons/daemon.go | 84 +++++++++++++++++++++++++++++
|
cmd/kubelite/app/daemons/daemon.go | 84 +++++++++++++++++++++++++++++
|
||||||
cmd/kubelite/app/options/options.go | 78 +++++++++++++++++++++++++++
|
cmd/kubelite/app/options/options.go | 79 +++++++++++++++++++++++++++
|
||||||
cmd/kubelite/app/server.go | 75 ++++++++++++++++++++++++++
|
cmd/kubelite/app/server.go | 79 +++++++++++++++++++++++++++
|
||||||
cmd/kubelite/kubelite.go | 28 ++++++++++
|
cmd/kubelite/kubelite.go | 28 ++++++++++
|
||||||
6 files changed, 280 insertions(+), 8 deletions(-)
|
pkg/volume/csi/csi_plugin.go | 10 ++--
|
||||||
|
7 files changed, 291 insertions(+), 9 deletions(-)
|
||||||
create mode 100644 cmd/kubelite/app/daemons/daemon.go
|
create mode 100644 cmd/kubelite/app/daemons/daemon.go
|
||||||
create mode 100644 cmd/kubelite/app/options/options.go
|
create mode 100644 cmd/kubelite/app/options/options.go
|
||||||
create mode 100644 cmd/kubelite/app/server.go
|
create mode 100644 cmd/kubelite/app/server.go
|
||||||
create mode 100644 cmd/kubelite/kubelite.go
|
create mode 100644 cmd/kubelite/kubelite.go
|
||||||
|
|
||||||
diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go
|
diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go
|
||||||
index 100007bd0ad..1b1f0985e63 100644
|
index 9fb54ec9a64..ade92c7337b 100644
|
||||||
--- a/cmd/kube-apiserver/app/server.go
|
--- a/cmd/kube-apiserver/app/server.go
|
||||||
+++ b/cmd/kube-apiserver/app/server.go
|
+++ b/cmd/kube-apiserver/app/server.go
|
||||||
@@ -91,7 +91,7 @@ const (
|
@@ -106,7 +106,7 @@ func checkNonZeroInsecurePort(fs *pflag.FlagSet) error {
|
||||||
)
|
}
|
||||||
|
|
||||||
// NewAPIServerCommand creates a *cobra.Command object with default parameters
|
// NewAPIServerCommand creates a *cobra.Command object with default parameters
|
||||||
-func NewAPIServerCommand() *cobra.Command {
|
-func NewAPIServerCommand() *cobra.Command {
|
||||||
@@ -29,7 +30,7 @@ index 100007bd0ad..1b1f0985e63 100644
|
|||||||
s := options.NewServerRunOptions()
|
s := options.NewServerRunOptions()
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "kube-apiserver",
|
Use: "kube-apiserver",
|
||||||
@@ -122,8 +122,11 @@ cluster's shared state through which all other components interact.`,
|
@@ -142,8 +142,11 @@ cluster's shared state through which all other components interact.`,
|
||||||
if errs := completedOptions.Validate(); len(errs) != 0 {
|
if errs := completedOptions.Validate(); len(errs) != 0 {
|
||||||
return utilerrors.NewAggregate(errs)
|
return utilerrors.NewAggregate(errs)
|
||||||
}
|
}
|
||||||
@@ -44,25 +45,9 @@ index 100007bd0ad..1b1f0985e63 100644
|
|||||||
Args: func(cmd *cobra.Command, args []string) error {
|
Args: func(cmd *cobra.Command, args []string) error {
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go
|
diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go
|
||||||
index ff7e05feec1..569ada4ef04 100644
|
index 2dc10a512b3..40d01f347ce 100644
|
||||||
--- a/cmd/kubelet/app/server.go
|
--- a/cmd/kubelet/app/server.go
|
||||||
+++ b/cmd/kubelet/app/server.go
|
+++ b/cmd/kubelet/app/server.go
|
||||||
@@ -22,6 +22,7 @@ import (
|
|
||||||
"crypto/tls"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
+ genericapiserver "k8s.io/apiserver/pkg/server"
|
|
||||||
"math"
|
|
||||||
"net"
|
|
||||||
"net/http"
|
|
||||||
@@ -46,7 +47,6 @@ import (
|
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
|
||||||
- genericapiserver "k8s.io/apiserver/pkg/server"
|
|
||||||
"k8s.io/apiserver/pkg/server/healthz"
|
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
|
||||||
@@ -110,7 +110,7 @@ const (
|
@@ -110,7 +110,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -72,11 +57,10 @@ index ff7e05feec1..569ada4ef04 100644
|
|||||||
cleanFlagSet := pflag.NewFlagSet(componentKubelet, pflag.ContinueOnError)
|
cleanFlagSet := pflag.NewFlagSet(componentKubelet, pflag.ContinueOnError)
|
||||||
cleanFlagSet.SetNormalizeFunc(cliflag.WordSepNormalizeFunc)
|
cleanFlagSet.SetNormalizeFunc(cliflag.WordSepNormalizeFunc)
|
||||||
kubeletFlags := options.NewKubeletFlags()
|
kubeletFlags := options.NewKubeletFlags()
|
||||||
@@ -260,12 +260,16 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API
|
@@ -277,7 +277,12 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API
|
||||||
// add the kubelet config controller to kubeletDeps
|
klog.ErrorS(err, "kubelet running with insufficient permissions")
|
||||||
kubeletDeps.KubeletConfigController = kubeletConfigController
|
}
|
||||||
|
// set up signal context here in order to be reused by kubelet and docker shim
|
||||||
- // set up signal context here in order to be reused by kubelet and docker shim
|
|
||||||
- ctx := genericapiserver.SetupSignalContext()
|
- ctx := genericapiserver.SetupSignalContext()
|
||||||
+ runctx := context.Background()
|
+ runctx := context.Background()
|
||||||
+ if len(ctx) == 0 {
|
+ if len(ctx) == 0 {
|
||||||
@@ -85,13 +69,17 @@ index ff7e05feec1..569ada4ef04 100644
|
|||||||
+ runctx = ctx[0]
|
+ runctx = ctx[0]
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
|
// make the kubelet's config safe for logging
|
||||||
|
config := kubeletServer.KubeletConfiguration.DeepCopy()
|
||||||
|
@@ -288,7 +293,7 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API
|
||||||
|
klog.V(5).InfoS("KubeletConfiguration", "configuration", kubeletServer.KubeletConfiguration)
|
||||||
|
|
||||||
// run the kubelet
|
// run the kubelet
|
||||||
klog.V(5).Infof("KubeletConfiguration: %#v", kubeletServer.KubeletConfiguration)
|
|
||||||
- if err := Run(ctx, kubeletServer, kubeletDeps, utilfeature.DefaultFeatureGate); err != nil {
|
- if err := Run(ctx, kubeletServer, kubeletDeps, utilfeature.DefaultFeatureGate); err != nil {
|
||||||
+ if err := Run(runctx, kubeletServer, kubeletDeps, utilfeature.DefaultFeatureGate); err != nil {
|
+ if err := Run(runctx, kubeletServer, kubeletDeps, utilfeature.DefaultFeatureGate); err != nil {
|
||||||
klog.Fatal(err)
|
klog.ErrorS(err, "Failed to run kubelet")
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
},
|
|
||||||
diff --git a/cmd/kubelite/app/daemons/daemon.go b/cmd/kubelite/app/daemons/daemon.go
|
diff --git a/cmd/kubelite/app/daemons/daemon.go b/cmd/kubelite/app/daemons/daemon.go
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..dbef03cf07e
|
index 00000000000..dbef03cf07e
|
||||||
@@ -185,10 +173,10 @@ index 00000000000..dbef03cf07e
|
|||||||
\ No newline at end of file
|
\ No newline at end of file
|
||||||
diff --git a/cmd/kubelite/app/options/options.go b/cmd/kubelite/app/options/options.go
|
diff --git a/cmd/kubelite/app/options/options.go b/cmd/kubelite/app/options/options.go
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..ca5e7b3d207
|
index 00000000000..80f1d8b09fc
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/cmd/kubelite/app/options/options.go
|
+++ b/cmd/kubelite/app/options/options.go
|
||||||
@@ -0,0 +1,78 @@
|
@@ -0,0 +1,79 @@
|
||||||
+/*
|
+/*
|
||||||
+Copyright 2018 The Kubernetes Authors.
|
+Copyright 2018 The Kubernetes Authors.
|
||||||
+
|
+
|
||||||
@@ -221,8 +209,8 @@ index 00000000000..ca5e7b3d207
|
|||||||
+ ProxyArgsFile string
|
+ ProxyArgsFile string
|
||||||
+ KubeletArgsFile string
|
+ KubeletArgsFile string
|
||||||
+ APIServerArgsFile string
|
+ APIServerArgsFile string
|
||||||
+
|
+ KubeconfigFile string
|
||||||
+ KubeconfigFile string
|
+ StartControlPlane bool
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+func NewOptions() (*Options){
|
+func NewOptions() (*Options){
|
||||||
@@ -233,6 +221,7 @@ index 00000000000..ca5e7b3d207
|
|||||||
+ "/var/snap/microk8s/current/args/kubelet",
|
+ "/var/snap/microk8s/current/args/kubelet",
|
||||||
+ "/var/snap/microk8s/current/args/kube-apiserver",
|
+ "/var/snap/microk8s/current/args/kube-apiserver",
|
||||||
+ "/var/snap/microk8s/current/credentials/client.config",
|
+ "/var/snap/microk8s/current/credentials/client.config",
|
||||||
|
+ true,
|
||||||
+ }
|
+ }
|
||||||
+ return &o
|
+ return &o
|
||||||
+}
|
+}
|
||||||
@@ -269,10 +258,10 @@ index 00000000000..ca5e7b3d207
|
|||||||
+}
|
+}
|
||||||
diff --git a/cmd/kubelite/app/server.go b/cmd/kubelite/app/server.go
|
diff --git a/cmd/kubelite/app/server.go b/cmd/kubelite/app/server.go
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..e70f19194a4
|
index 00000000000..e7452a09e3e
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/cmd/kubelite/app/server.go
|
+++ b/cmd/kubelite/app/server.go
|
||||||
@@ -0,0 +1,75 @@
|
@@ -0,0 +1,79 @@
|
||||||
+/*
|
+/*
|
||||||
+Copyright © 2020 NAME HERE <EMAIL ADDRESS>
|
+Copyright © 2020 NAME HERE <EMAIL ADDRESS>
|
||||||
+
|
+
|
||||||
@@ -311,19 +300,22 @@ index 00000000000..e70f19194a4
|
|||||||
+ // has an action associated with it:
|
+ // has an action associated with it:
|
||||||
+ Run: func(cmd *cobra.Command, args []string) {
|
+ Run: func(cmd *cobra.Command, args []string) {
|
||||||
+ ctx := genericapiserver.SetupSignalContext()
|
+ ctx := genericapiserver.SetupSignalContext()
|
||||||
+ apiserverArgs := options.ReadArgsFromFile(opts.APIServerArgsFile)
|
|
||||||
+ go daemon.StartAPIServer(apiserverArgs, ctx.Done())
|
|
||||||
+ daemon.WaitForAPIServer(opts.KubeconfigFile, 360 * time.Second)
|
|
||||||
+
|
+
|
||||||
+ controllerArgs := options.ReadArgsFromFile(opts.ControllerManagerArgsFile)
|
+ if opts.StartControlPlane {
|
||||||
+ go daemon.StartControllerManager(controllerArgs, ctx)
|
+ apiserverArgs := options.ReadArgsFromFile(opts.APIServerArgsFile)
|
||||||
|
+ go daemon.StartAPIServer(apiserverArgs, ctx.Done())
|
||||||
|
+ daemon.WaitForAPIServer(opts.KubeconfigFile, 360 * time.Second)
|
||||||
|
+
|
||||||
|
+ controllerArgs := options.ReadArgsFromFile(opts.ControllerManagerArgsFile)
|
||||||
|
+ go daemon.StartControllerManager(controllerArgs, ctx)
|
||||||
|
+
|
||||||
|
+ schedulerArgs := options.ReadArgsFromFile(opts.SchedulerArgsFile)
|
||||||
|
+ go daemon.StartScheduler(schedulerArgs, ctx)
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ proxyArgs := options.ReadArgsFromFile(opts.ProxyArgsFile)
|
+ proxyArgs := options.ReadArgsFromFile(opts.ProxyArgsFile)
|
||||||
+ go daemon.StartProxy(proxyArgs)
|
+ go daemon.StartProxy(proxyArgs)
|
||||||
+
|
+
|
||||||
+ schedulerArgs := options.ReadArgsFromFile(opts.SchedulerArgsFile)
|
|
||||||
+ go daemon.StartScheduler(schedulerArgs, ctx)
|
|
||||||
+
|
|
||||||
+ kubeletArgs := options.ReadArgsFromFile(opts.KubeletArgsFile)
|
+ kubeletArgs := options.ReadArgsFromFile(opts.KubeletArgsFile)
|
||||||
+ daemon.StartKubelet(kubeletArgs, ctx)
|
+ daemon.StartKubelet(kubeletArgs, ctx)
|
||||||
+ },
|
+ },
|
||||||
@@ -347,6 +339,7 @@ index 00000000000..e70f19194a4
|
|||||||
+ liteCmd.Flags().StringVar(&opts.KubeletArgsFile, "kubelet-args-file", opts.KubeletArgsFile, "file with the arguments for kubelet")
|
+ liteCmd.Flags().StringVar(&opts.KubeletArgsFile, "kubelet-args-file", opts.KubeletArgsFile, "file with the arguments for kubelet")
|
||||||
+ liteCmd.Flags().StringVar(&opts.APIServerArgsFile, "apiserver-args-file", opts.APIServerArgsFile, "file with the arguments for the API server")
|
+ liteCmd.Flags().StringVar(&opts.APIServerArgsFile, "apiserver-args-file", opts.APIServerArgsFile, "file with the arguments for the API server")
|
||||||
+ liteCmd.Flags().StringVar(&opts.KubeconfigFile , "kubeconfig-file", opts.KubeconfigFile, "the kubeconfig file to use to healthcheck the API server")
|
+ liteCmd.Flags().StringVar(&opts.KubeconfigFile , "kubeconfig-file", opts.KubeconfigFile, "the kubeconfig file to use to healthcheck the API server")
|
||||||
|
+ liteCmd.Flags().BoolVar(&opts.StartControlPlane, "start-control-plane", opts.StartControlPlane, "start the control plane (API server, scheduler and controller manager)")
|
||||||
+}
|
+}
|
||||||
diff --git a/cmd/kubelite/kubelite.go b/cmd/kubelite/kubelite.go
|
diff --git a/cmd/kubelite/kubelite.go b/cmd/kubelite/kubelite.go
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
@@ -382,84 +375,38 @@ index 00000000000..667b24f68e6
|
|||||||
+ app.Execute()
|
+ app.Execute()
|
||||||
+ println("Stopping kubelite")
|
+ println("Stopping kubelite")
|
||||||
+}
|
+}
|
||||||
--
|
diff --git a/pkg/volume/csi/csi_plugin.go b/pkg/volume/csi/csi_plugin.go
|
||||||
2.25.1
|
index 85c1c1f3db1..b90c82225f5 100644
|
||||||
|
--- a/pkg/volume/csi/csi_plugin.go
|
||||||
|
+++ b/pkg/volume/csi/csi_plugin.go
|
||||||
From 7d9c9921a6c646cb254c3eb312babb56784af952 Mon Sep 17 00:00:00 2001
|
@@ -237,20 +237,24 @@ func (p *csiPlugin) Init(host volume.VolumeHost) error {
|
||||||
From: Konstantinos Tsakalozos <kos.tsakalozos@canonical.com>
|
|
||||||
Date: Wed, 17 Feb 2021 11:00:26 +0200
|
|
||||||
Subject: [PATCH 2/2] Option to not start the control plane on kubelite
|
|
||||||
|
|
||||||
---
|
|
||||||
cmd/kubelite/app/options/options.go | 5 +++--
|
|
||||||
cmd/kubelite/app/server.go | 20 ++++++++++++--------
|
|
||||||
2 files changed, 15 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/cmd/kubelite/app/options/options.go b/cmd/kubelite/app/options/options.go
|
|
||||||
index ca5e7b3d207..80f1d8b09fc 100644
|
|
||||||
--- a/cmd/kubelite/app/options/options.go
|
|
||||||
+++ b/cmd/kubelite/app/options/options.go
|
|
||||||
@@ -30,8 +30,8 @@ type Options struct {
|
|
||||||
ProxyArgsFile string
|
|
||||||
KubeletArgsFile string
|
|
||||||
APIServerArgsFile string
|
|
||||||
-
|
|
||||||
- KubeconfigFile string
|
|
||||||
+ KubeconfigFile string
|
|
||||||
+ StartControlPlane bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewOptions() (*Options){
|
|
||||||
@@ -42,6 +42,7 @@ func NewOptions() (*Options){
|
|
||||||
"/var/snap/microk8s/current/args/kubelet",
|
|
||||||
"/var/snap/microk8s/current/args/kube-apiserver",
|
|
||||||
"/var/snap/microk8s/current/credentials/client.config",
|
|
||||||
+ true,
|
|
||||||
}
|
}
|
||||||
return &o
|
|
||||||
}
|
|
||||||
diff --git a/cmd/kubelite/app/server.go b/cmd/kubelite/app/server.go
|
|
||||||
index e70f19194a4..e7452a09e3e 100644
|
|
||||||
--- a/cmd/kubelite/app/server.go
|
|
||||||
+++ b/cmd/kubelite/app/server.go
|
|
||||||
@@ -36,19 +36,22 @@ var liteCmd = &cobra.Command{
|
|
||||||
// has an action associated with it:
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
ctx := genericapiserver.SetupSignalContext()
|
|
||||||
- apiserverArgs := options.ReadArgsFromFile(opts.APIServerArgsFile)
|
|
||||||
- go daemon.StartAPIServer(apiserverArgs, ctx.Done())
|
|
||||||
- daemon.WaitForAPIServer(opts.KubeconfigFile, 360 * time.Second)
|
|
||||||
|
|
||||||
- controllerArgs := options.ReadArgsFromFile(opts.ControllerManagerArgsFile)
|
// Initializing the label management channels
|
||||||
- go daemon.StartControllerManager(controllerArgs, ctx)
|
- nim = nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, migratedPlugins)
|
||||||
+ if opts.StartControlPlane {
|
+ localNim := nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, migratedPlugins)
|
||||||
+ apiserverArgs := options.ReadArgsFromFile(opts.APIServerArgsFile)
|
|
||||||
+ go daemon.StartAPIServer(apiserverArgs, ctx.Done())
|
if utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) {
|
||||||
+ daemon.WaitForAPIServer(opts.KubeconfigFile, 360 * time.Second)
|
// This function prevents Kubelet from posting Ready status until CSINode
|
||||||
|
// is both installed and initialized
|
||||||
|
- if err := initializeCSINode(host); err != nil {
|
||||||
|
+ if err := initializeCSINode(host, localNim); err != nil {
|
||||||
|
return errors.New(log("failed to initialize CSINode: %v", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if _, ok := host.(volume.KubeletVolumeHost); ok {
|
||||||
|
+ nim = localNim
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ controllerArgs := options.ReadArgsFromFile(opts.ControllerManagerArgsFile)
|
return nil
|
||||||
+ go daemon.StartControllerManager(controllerArgs, ctx)
|
|
||||||
+
|
|
||||||
+ schedulerArgs := options.ReadArgsFromFile(opts.SchedulerArgsFile)
|
|
||||||
+ go daemon.StartScheduler(schedulerArgs, ctx)
|
|
||||||
+ }
|
|
||||||
|
|
||||||
proxyArgs := options.ReadArgsFromFile(opts.ProxyArgsFile)
|
|
||||||
go daemon.StartProxy(proxyArgs)
|
|
||||||
|
|
||||||
- schedulerArgs := options.ReadArgsFromFile(opts.SchedulerArgsFile)
|
|
||||||
- go daemon.StartScheduler(schedulerArgs, ctx)
|
|
||||||
-
|
|
||||||
kubeletArgs := options.ReadArgsFromFile(opts.KubeletArgsFile)
|
|
||||||
daemon.StartKubelet(kubeletArgs, ctx)
|
|
||||||
},
|
|
||||||
@@ -72,4 +75,5 @@ func init() {
|
|
||||||
liteCmd.Flags().StringVar(&opts.KubeletArgsFile, "kubelet-args-file", opts.KubeletArgsFile, "file with the arguments for kubelet")
|
|
||||||
liteCmd.Flags().StringVar(&opts.APIServerArgsFile, "apiserver-args-file", opts.APIServerArgsFile, "file with the arguments for the API server")
|
|
||||||
liteCmd.Flags().StringVar(&opts.KubeconfigFile , "kubeconfig-file", opts.KubeconfigFile, "the kubeconfig file to use to healthcheck the API server")
|
|
||||||
+ liteCmd.Flags().BoolVar(&opts.StartControlPlane, "start-control-plane", opts.StartControlPlane, "start the control plane (API server, scheduler and controller manager)")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-func initializeCSINode(host volume.VolumeHost) error {
|
||||||
|
+func initializeCSINode(host volume.VolumeHost, nim nodeinfomanager.Interface) error {
|
||||||
|
kvh, ok := host.(volume.KubeletVolumeHost)
|
||||||
|
if !ok {
|
||||||
|
klog.V(4).Info("Cast from VolumeHost to KubeletVolumeHost failed. Skipping CSINode initialization, not running on kubelet")
|
||||||
--
|
--
|
||||||
2.25.1
|
2.25.1
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
From 476871f1ba435f8baa898624d2f889ca04bd6b92 Mon Sep 17 00:00:00 2001
|
From 181019ffd07c6b398595eeb755bc0615b13890b9 Mon Sep 17 00:00:00 2001
|
||||||
From: Konstantinos Tsakalozos <kos.tsakalozos@canonical.com>
|
From: Konstantinos Tsakalozos <kos.tsakalozos@canonical.com>
|
||||||
Date: Wed, 17 Feb 2021 18:50:40 +0200
|
Date: Wed, 17 Feb 2021 18:50:40 +0200
|
||||||
Subject: [PATCH] Handle disconnected leader in three node cluster
|
Subject: [PATCH] Handle disconnected leader in three node cluster
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
From 06848ba08ce2737e9d25ba26d799aba608815b7b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Darren Shepherd <darren@rancher.com>
|
|
||||||
Date: Fri, 30 Aug 2019 11:22:18 -0700
|
|
||||||
Subject: [PATCH] Fix CSI initialization conflict
|
|
||||||
|
|
||||||
CSI is used by both the kubelet and kube-controller-manager. Both
|
|
||||||
components will initialize the csiPlugin with different VolumeHost
|
|
||||||
objects. The csiPlugin will then assign a global variable for
|
|
||||||
the node info manager. It is then possible that the kubelet gets
|
|
||||||
the credentials of the kube-controller-manager and that will cause
|
|
||||||
CSI to fail.
|
|
||||||
---
|
|
||||||
pkg/volume/csi/csi_plugin.go | 10 +++++++---
|
|
||||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/pkg/volume/csi/csi_plugin.go b/pkg/volume/csi/csi_plugin.go
|
|
||||||
index 7fb89f688ba..b973176892e 100644
|
|
||||||
--- a/pkg/volume/csi/csi_plugin.go
|
|
||||||
+++ b/pkg/volume/csi/csi_plugin.go
|
|
||||||
@@ -238,21 +238,25 @@ func (p *csiPlugin) Init(host volume.VolumeHost) error {
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initializing the label management channels
|
|
||||||
- nim = nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, migratedPlugins)
|
|
||||||
+ localNim := nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, migratedPlugins)
|
|
||||||
|
|
||||||
if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) &&
|
|
||||||
utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) {
|
|
||||||
// This function prevents Kubelet from posting Ready status until CSINode
|
|
||||||
// is both installed and initialized
|
|
||||||
- if err := initializeCSINode(host); err != nil {
|
|
||||||
+ if err := initializeCSINode(host, localNim); err != nil {
|
|
||||||
return errors.New(log("failed to initialize CSINode: %v", err))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if _, ok := host.(volume.KubeletVolumeHost); ok {
|
|
||||||
+ nim = localNim
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
-func initializeCSINode(host volume.VolumeHost) error {
|
|
||||||
+func initializeCSINode(host volume.VolumeHost, nim nodeinfomanager.Interface) error {
|
|
||||||
kvh, ok := host.(volume.KubeletVolumeHost)
|
|
||||||
if !ok {
|
|
||||||
klog.V(4).Info("Cast from VolumeHost to KubeletVolumeHost failed. Skipping CSINode initialization, not running on kubelet")
|
|
||||||
--
|
|
||||||
2.25.1
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user