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
|
||||
|
||||

|
||||

|
||||
|
||||
<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: Konstantinos <kos.tsakalozos@canonical.com>
|
||||
Date: Thu, 24 Sep 2020 21:06:03 +0300
|
||||
Subject: [PATCH 1/2] kubelite, single binary k8s
|
||||
From de618434d4a4168f11bec34c062700b3ad17d2ca Mon Sep 17 00:00:00 2001
|
||||
From: Konstantinos Tsakalozos <kos.tsakalozos@canonical.com>
|
||||
Date: Wed, 3 Mar 2021 18:19:37 +0200
|
||||
Subject: [PATCH] Kubelite integration
|
||||
|
||||
---
|
||||
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/options/options.go | 78 +++++++++++++++++++++++++++
|
||||
cmd/kubelite/app/server.go | 75 ++++++++++++++++++++++++++
|
||||
cmd/kubelite/app/options/options.go | 79 +++++++++++++++++++++++++++
|
||||
cmd/kubelite/app/server.go | 79 +++++++++++++++++++++++++++
|
||||
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/options/options.go
|
||||
create mode 100644 cmd/kubelite/app/server.go
|
||||
create mode 100644 cmd/kubelite/kubelite.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
|
||||
+++ 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
|
||||
-func NewAPIServerCommand() *cobra.Command {
|
||||
@@ -29,7 +30,7 @@ index 100007bd0ad..1b1f0985e63 100644
|
||||
s := options.NewServerRunOptions()
|
||||
cmd := &cobra.Command{
|
||||
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 {
|
||||
return utilerrors.NewAggregate(errs)
|
||||
}
|
||||
@@ -44,25 +45,9 @@ index 100007bd0ad..1b1f0985e63 100644
|
||||
Args: func(cmd *cobra.Command, args []string) error {
|
||||
for _, arg := range args {
|
||||
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
|
||||
+++ 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 (
|
||||
)
|
||||
|
||||
@@ -72,11 +57,10 @@ index ff7e05feec1..569ada4ef04 100644
|
||||
cleanFlagSet := pflag.NewFlagSet(componentKubelet, pflag.ContinueOnError)
|
||||
cleanFlagSet.SetNormalizeFunc(cliflag.WordSepNormalizeFunc)
|
||||
kubeletFlags := options.NewKubeletFlags()
|
||||
@@ -260,12 +260,16 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API
|
||||
// add the kubelet config controller to kubeletDeps
|
||||
kubeletDeps.KubeletConfigController = kubeletConfigController
|
||||
|
||||
- // set up signal context here in order to be reused by kubelet and docker shim
|
||||
@@ -277,7 +277,12 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API
|
||||
klog.ErrorS(err, "kubelet running with insufficient permissions")
|
||||
}
|
||||
// set up signal context here in order to be reused by kubelet and docker shim
|
||||
- ctx := genericapiserver.SetupSignalContext()
|
||||
+ runctx := context.Background()
|
||||
+ if len(ctx) == 0 {
|
||||
@@ -85,13 +69,17 @@ index ff7e05feec1..569ada4ef04 100644
|
||||
+ 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
|
||||
klog.V(5).Infof("KubeletConfiguration: %#v", kubeletServer.KubeletConfiguration)
|
||||
- if err := Run(ctx, 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
|
||||
new file mode 100644
|
||||
index 00000000000..dbef03cf07e
|
||||
@@ -185,10 +173,10 @@ index 00000000000..dbef03cf07e
|
||||
\ No newline at end of file
|
||||
diff --git a/cmd/kubelite/app/options/options.go b/cmd/kubelite/app/options/options.go
|
||||
new file mode 100644
|
||||
index 00000000000..ca5e7b3d207
|
||||
index 00000000000..80f1d8b09fc
|
||||
--- /dev/null
|
||||
+++ b/cmd/kubelite/app/options/options.go
|
||||
@@ -0,0 +1,78 @@
|
||||
@@ -0,0 +1,79 @@
|
||||
+/*
|
||||
+Copyright 2018 The Kubernetes Authors.
|
||||
+
|
||||
@@ -221,8 +209,8 @@ index 00000000000..ca5e7b3d207
|
||||
+ ProxyArgsFile string
|
||||
+ KubeletArgsFile string
|
||||
+ APIServerArgsFile string
|
||||
+
|
||||
+ KubeconfigFile string
|
||||
+ KubeconfigFile string
|
||||
+ StartControlPlane bool
|
||||
+}
|
||||
+
|
||||
+func NewOptions() (*Options){
|
||||
@@ -233,6 +221,7 @@ index 00000000000..ca5e7b3d207
|
||||
+ "/var/snap/microk8s/current/args/kubelet",
|
||||
+ "/var/snap/microk8s/current/args/kube-apiserver",
|
||||
+ "/var/snap/microk8s/current/credentials/client.config",
|
||||
+ true,
|
||||
+ }
|
||||
+ return &o
|
||||
+}
|
||||
@@ -269,10 +258,10 @@ index 00000000000..ca5e7b3d207
|
||||
+}
|
||||
diff --git a/cmd/kubelite/app/server.go b/cmd/kubelite/app/server.go
|
||||
new file mode 100644
|
||||
index 00000000000..e70f19194a4
|
||||
index 00000000000..e7452a09e3e
|
||||
--- /dev/null
|
||||
+++ b/cmd/kubelite/app/server.go
|
||||
@@ -0,0 +1,75 @@
|
||||
@@ -0,0 +1,79 @@
|
||||
+/*
|
||||
+Copyright © 2020 NAME HERE <EMAIL ADDRESS>
|
||||
+
|
||||
@@ -311,19 +300,22 @@ index 00000000000..e70f19194a4
|
||||
+ // 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)
|
||||
+ go daemon.StartControllerManager(controllerArgs, ctx)
|
||||
+ if opts.StartControlPlane {
|
||||
+ 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)
|
||||
+ go daemon.StartProxy(proxyArgs)
|
||||
+
|
||||
+ schedulerArgs := options.ReadArgsFromFile(opts.SchedulerArgsFile)
|
||||
+ go daemon.StartScheduler(schedulerArgs, ctx)
|
||||
+
|
||||
+ kubeletArgs := options.ReadArgsFromFile(opts.KubeletArgsFile)
|
||||
+ 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.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)")
|
||||
+}
|
||||
diff --git a/cmd/kubelite/kubelite.go b/cmd/kubelite/kubelite.go
|
||||
new file mode 100644
|
||||
@@ -382,84 +375,38 @@ index 00000000000..667b24f68e6
|
||||
+ app.Execute()
|
||||
+ println("Stopping kubelite")
|
||||
+}
|
||||
--
|
||||
2.25.1
|
||||
|
||||
|
||||
From 7d9c9921a6c646cb254c3eb312babb56784af952 Mon Sep 17 00:00:00 2001
|
||||
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,
|
||||
diff --git a/pkg/volume/csi/csi_plugin.go b/pkg/volume/csi/csi_plugin.go
|
||||
index 85c1c1f3db1..b90c82225f5 100644
|
||||
--- a/pkg/volume/csi/csi_plugin.go
|
||||
+++ b/pkg/volume/csi/csi_plugin.go
|
||||
@@ -237,20 +237,24 @@ func (p *csiPlugin) Init(host volume.VolumeHost) error {
|
||||
}
|
||||
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)
|
||||
- go daemon.StartControllerManager(controllerArgs, ctx)
|
||||
+ if opts.StartControlPlane {
|
||||
+ apiserverArgs := options.ReadArgsFromFile(opts.APIServerArgsFile)
|
||||
+ go daemon.StartAPIServer(apiserverArgs, ctx.Done())
|
||||
+ daemon.WaitForAPIServer(opts.KubeconfigFile, 360 * time.Second)
|
||||
// Initializing the label management channels
|
||||
- nim = nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, migratedPlugins)
|
||||
+ localNim := nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, migratedPlugins)
|
||||
|
||||
if 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
|
||||
+ }
|
||||
+
|
||||
+ 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)
|
||||
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)")
|
||||
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
|
||||
|
||||
@@ -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>
|
||||
Date: Wed, 17 Feb 2021 18:50:40 +0200
|
||||
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