Skip to content

Commit d1a3e78

Browse files
authored
Feature: k0s runtime remain work (#1686)
* feat: add k0s runtime join/delete/reset/upgrade. Signed-off-by: starComingup <1225067236@qq.com> * resolved: log format, cmd in code, simplify code. Signed-off-by: starComingup <1225067236@qq.com> * resolved function name confuse, simplify code. Signed-off-by: starComingup <1225067236@qq.com> * add runtime entrance, diff k0s、k8s、k3s。 Signed-off-by: starComingup <1225067236@qq.com> * resolve conversation and enhanced runtime logic Signed-off-by: starComingup <1225067236@qq.com> Signed-off-by: starComingup <1225067236@qq.com>
1 parent 7291ac8 commit d1a3e78

File tree

19 files changed

+825
-75
lines changed

19 files changed

+825
-75
lines changed

apply/driver/local.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,15 @@ import (
1818
"fmt"
1919
"net"
2020

21-
imagecommon "github.com/sealerio/sealer/pkg/define/options"
22-
23-
"github.com/sealerio/sealer/pkg/auth"
24-
"github.com/sealerio/sealer/pkg/imageengine"
25-
2621
"github.com/sealerio/sealer/apply/processor"
2722
"github.com/sealerio/sealer/common"
23+
"github.com/sealerio/sealer/pkg/auth"
2824
"github.com/sealerio/sealer/pkg/client/k8s"
2925
"github.com/sealerio/sealer/pkg/clusterfile"
26+
imagecommon "github.com/sealerio/sealer/pkg/define/options"
3027
"github.com/sealerio/sealer/pkg/filesystem/clusterimage"
28+
"github.com/sealerio/sealer/pkg/imageengine"
3129
"github.com/sealerio/sealer/pkg/runtime"
32-
"github.com/sealerio/sealer/pkg/runtime/kubernetes"
3330
v2 "github.com/sealerio/sealer/types/api/v2"
3431
"github.com/sealerio/sealer/utils"
3532
osi "github.com/sealerio/sealer/utils/os"
@@ -237,7 +234,7 @@ func (applier *Applier) Upgrade(upgradeImgName string) error {
237234
}
238235

239236
func (applier *Applier) upgrade() error {
240-
runtimeInterface, err := kubernetes.NewDefaultRuntime(applier.ClusterDesired, applier.ClusterFile.GetKubeadmConfig())
237+
runtimeInterface, err := processor.ChooseRuntime(platform.DefaultMountClusterImageDir(applier.ClusterDesired.Name), applier.ClusterDesired, applier.ClusterFile.GetKubeadmConfig())
241238
if err != nil {
242239
return fmt.Errorf("failed to init runtime: %v", err)
243240
}

apply/processor/create.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
"github.com/sealerio/sealer/pkg/guest"
3131
"github.com/sealerio/sealer/pkg/plugin"
3232
"github.com/sealerio/sealer/pkg/runtime"
33-
"github.com/sealerio/sealer/pkg/runtime/kubernetes"
3433
v2 "github.com/sealerio/sealer/types/api/v2"
3534
"github.com/sealerio/sealer/utils/net"
3635
"github.com/sealerio/sealer/utils/platform"
@@ -111,7 +110,8 @@ func (c *CreateProcessor) MountImage(cluster *v2.Cluster) error {
111110
if err = c.cloudImageMounter.MountImage(cluster); err != nil {
112111
return err
113112
}
114-
runTime, err := kubernetes.NewDefaultRuntime(cluster, c.ClusterFile.GetKubeadmConfig())
113+
//TODO split kubeadm config from cluster file.
114+
runTime, err := ChooseRuntime(platform.DefaultMountClusterImageDir(cluster.Name), cluster, c.ClusterFile.GetKubeadmConfig())
115115
if err != nil {
116116
return fmt.Errorf("failed to init runtime: %v", err)
117117
}

apply/processor/delete.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,18 @@ package processor
1717
import (
1818
"fmt"
1919

20-
common2 "github.com/sealerio/sealer/pkg/define/options"
21-
22-
"github.com/sealerio/sealer/pkg/imageengine"
23-
"github.com/sealerio/sealer/pkg/registry"
24-
2520
"github.com/sealerio/sealer/common"
2621
"github.com/sealerio/sealer/pkg/clusterfile"
22+
common2 "github.com/sealerio/sealer/pkg/define/options"
2723
"github.com/sealerio/sealer/pkg/filesystem"
2824
"github.com/sealerio/sealer/pkg/filesystem/cloudfilesystem"
2925
"github.com/sealerio/sealer/pkg/filesystem/clusterimage"
26+
"github.com/sealerio/sealer/pkg/imageengine"
3027
"github.com/sealerio/sealer/pkg/plugin"
31-
"github.com/sealerio/sealer/pkg/runtime/kubernetes"
28+
"github.com/sealerio/sealer/pkg/registry"
3229
v2 "github.com/sealerio/sealer/types/api/v2"
3330
utilsnet "github.com/sealerio/sealer/utils/net"
31+
"github.com/sealerio/sealer/utils/platform"
3432
)
3533

3634
type DeleteProcessor struct {
@@ -40,7 +38,7 @@ type DeleteProcessor struct {
4038
}
4139

4240
func (d *DeleteProcessor) Reset(cluster *v2.Cluster) error {
43-
runTime, err := kubernetes.NewDefaultRuntime(cluster, d.ClusterFile.GetKubeadmConfig())
41+
runTime, err := ChooseRuntime(platform.DefaultMountClusterImageDir(cluster.Name), cluster, d.ClusterFile.GetKubeadmConfig())
4442
if err != nil {
4543
return fmt.Errorf("failed to init runtime: %v", err)
4644
}

apply/processor/gen.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,17 @@ package processor
1919
import (
2020
"fmt"
2121
"net"
22-
23-
"github.com/sealerio/sealer/pkg/auth"
24-
25-
"github.com/sealerio/sealer/pkg/define/options"
26-
2722
"strconv"
2823

29-
"github.com/sealerio/sealer/pkg/imageengine"
30-
31-
"github.com/sealerio/sealer/pkg/registry"
32-
3324
"github.com/sealerio/sealer/common"
25+
"github.com/sealerio/sealer/pkg/auth"
3426
"github.com/sealerio/sealer/pkg/client/k8s"
3527
"github.com/sealerio/sealer/pkg/clusterfile"
28+
"github.com/sealerio/sealer/pkg/define/options"
3629
"github.com/sealerio/sealer/pkg/filesystem"
3730
"github.com/sealerio/sealer/pkg/filesystem/clusterimage"
31+
"github.com/sealerio/sealer/pkg/imageengine"
32+
"github.com/sealerio/sealer/pkg/registry"
3833
"github.com/sealerio/sealer/pkg/runtime/kubernetes"
3934
v2 "github.com/sealerio/sealer/types/api/v2"
4035
utilsnet "github.com/sealerio/sealer/utils/net"
@@ -194,7 +189,7 @@ func (g *GenerateProcessor) MountImage(cluster *v2.Cluster) error {
194189
if err = g.ImageMounter.MountImage(cluster); err != nil {
195190
return err
196191
}
197-
runt, err := kubernetes.NewDefaultRuntime(cluster, nil)
192+
runt, err := ChooseRuntime(platform.DefaultMountClusterImageDir(cluster.Name), cluster, nil)
198193
if err != nil {
199194
return err
200195
}
@@ -207,7 +202,7 @@ func (g *GenerateProcessor) UnmountImage(cluster *v2.Cluster) error {
207202
}
208203

209204
func (g *GenerateProcessor) ApplyRegistry(cluster *v2.Cluster) error {
210-
runt, err := kubernetes.NewDefaultRuntime(cluster, nil)
205+
runt, err := ChooseRuntime(platform.DefaultMountClusterImageDir(cluster.Name), cluster, nil)
211206
if err != nil {
212207
return err
213208
}

apply/processor/scale.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,16 @@ import (
1818
"fmt"
1919
"net"
2020

21-
"github.com/sealerio/sealer/utils/platform"
22-
23-
"github.com/sealerio/sealer/pkg/runtime/kubernetes/kubeadm"
24-
2521
"github.com/sealerio/sealer/common"
2622
"github.com/sealerio/sealer/pkg/clusterfile"
2723
"github.com/sealerio/sealer/pkg/config"
2824
"github.com/sealerio/sealer/pkg/filesystem"
2925
"github.com/sealerio/sealer/pkg/filesystem/cloudfilesystem"
3026
"github.com/sealerio/sealer/pkg/plugin"
3127
"github.com/sealerio/sealer/pkg/runtime"
32-
"github.com/sealerio/sealer/pkg/runtime/kubernetes"
28+
"github.com/sealerio/sealer/pkg/runtime/kubernetes/kubeadm"
3329
v2 "github.com/sealerio/sealer/types/api/v2"
30+
platform "github.com/sealerio/sealer/utils/platform"
3431
)
3532

3633
type ScaleProcessor struct {
@@ -74,14 +71,9 @@ func (s *ScaleProcessor) GetPipeLine() ([]func(cluster *v2.Cluster) error, error
7471
}
7572

7673
func (s *ScaleProcessor) PreProcess(cluster *v2.Cluster) error {
77-
runTime, err := kubernetes.NewDefaultRuntime(cluster, s.KubeadmConfig)
78-
if err != nil {
79-
return fmt.Errorf("failed to init default runtime: %v", err)
80-
}
81-
s.Runtime = runTime
8274
s.Config = config.NewConfiguration(platform.DefaultMountClusterImageDir(cluster.Name))
8375
if s.IsScaleUp {
84-
if err = clusterfile.SaveToDisk(cluster, cluster.Name); err != nil {
76+
if err := clusterfile.SaveToDisk(cluster, cluster.Name); err != nil {
8577
return err
8678
}
8779
}
@@ -130,7 +122,8 @@ func (s *ScaleProcessor) Delete(cluster *v2.Cluster) error {
130122
}
131123

132124
func NewScaleProcessor(kubeadmConfig *kubeadm.KubeadmConfig, clusterFile clusterfile.Interface, masterToJoin, masterToDelete, nodeToJoin, nodeToDelete []net.IP) (Processor, error) {
133-
fs, err := filesystem.NewFilesystem(common.DefaultTheClusterRootfsDir(clusterFile.GetCluster().Name))
125+
cluster := clusterFile.GetCluster()
126+
fs, err := filesystem.NewFilesystem(common.DefaultTheClusterRootfsDir(cluster.Name))
134127
if err != nil {
135128
return nil, err
136129
}
@@ -141,7 +134,13 @@ func NewScaleProcessor(kubeadmConfig *kubeadm.KubeadmConfig, clusterFile cluster
141134
up = true
142135
}
143136

137+
runTime, err := ChooseRuntime(platform.DefaultMountClusterImageDir(cluster.Name), &cluster, clusterFile.GetKubeadmConfig())
138+
if err != nil {
139+
return nil, fmt.Errorf("failed to init default runtime: %v", err)
140+
}
141+
144142
return &ScaleProcessor{
143+
Runtime: runTime,
145144
MastersToDelete: masterToDelete,
146145
MastersToJoin: masterToJoin,
147146
NodesToDelete: nodeToDelete,

apply/processor/utils.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Copyright © 2022 Alibaba Group Holding Ltd.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package processor
16+
17+
import (
18+
"github.com/sealerio/sealer/pkg/runtime"
19+
"github.com/sealerio/sealer/pkg/runtime/k0s"
20+
"github.com/sealerio/sealer/pkg/runtime/kubernetes"
21+
"github.com/sealerio/sealer/pkg/runtime/kubernetes/kubeadm"
22+
v2 "github.com/sealerio/sealer/types/api/v2"
23+
"github.com/sirupsen/logrus"
24+
)
25+
26+
func ChooseRuntime(rootfs string, cluster *v2.Cluster, config *kubeadm.KubeadmConfig) (runtime.Interface, error) {
27+
metadata, err := runtime.LoadMetadata(rootfs)
28+
if err != nil {
29+
return nil, err
30+
}
31+
32+
hintInfo(metadata.ClusterRuntime)
33+
34+
switch metadata.ClusterRuntime {
35+
case runtime.K8s:
36+
return kubernetes.NewDefaultRuntime(cluster, config)
37+
case runtime.K0s:
38+
return k0s.NewK0sRuntime(cluster)
39+
// Todo case runtime.K3s:
40+
default:
41+
return kubernetes.NewDefaultRuntime(cluster, config)
42+
}
43+
}
44+
45+
// hintInfo will hint end-user which cluster runtime will load and move to using new version ClusterImage.
46+
func hintInfo(clusterRuntime runtime.ClusterRuntime) {
47+
if clusterRuntime != "" {
48+
logrus.Infof("using %s as a cluster runtime.", clusterRuntime)
49+
return
50+
}
51+
logrus.Infof("using k8s as a default cluster runtime.")
52+
logrus.Infof("the old sealer version is deprecated, using new version of sealer and ClusterImage is encouraged!")
53+
}

cmd/sealer/cmd/cluster/apply.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
package cluster
1616

1717
import (
18-
"github.com/sealerio/sealer/pkg/runtime/kubernetes"
19-
"github.com/spf13/cobra"
20-
2118
"github.com/sealerio/sealer/apply"
19+
"github.com/sealerio/sealer/pkg/runtime"
20+
21+
"github.com/spf13/cobra"
2222
)
2323

2424
var clusterFile string
@@ -44,6 +44,6 @@ func NewApplyCmd() *cobra.Command {
4444
},
4545
}
4646
applyCmd.Flags().StringVarP(&clusterFile, "Clusterfile", "f", "Clusterfile", "Clusterfile path to apply a Kubernetes cluster")
47-
applyCmd.Flags().BoolVar(&kubernetes.ForceDelete, "force", false, "force to delete the specified cluster if set true")
47+
applyCmd.Flags().BoolVar(&runtime.ForceDelete, "force", false, "force to delete the specified cluster if set true")
4848
return applyCmd
4949
}

cmd/sealer/cmd/cluster/delete.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ import (
1919

2020
"github.com/sealerio/sealer/apply"
2121
"github.com/sealerio/sealer/common"
22-
2322
"github.com/sealerio/sealer/pkg/clusterfile"
24-
"github.com/sealerio/sealer/pkg/runtime/kubernetes"
23+
"github.com/sealerio/sealer/pkg/runtime"
2524

2625
"github.com/spf13/cobra"
2726
)
@@ -100,7 +99,7 @@ func NewDeleteCmd() *cobra.Command {
10099
deleteCmd.Flags().StringVarP(&deleteClusterFile, "Clusterfile", "f", "", "delete a kubernetes cluster with Clusterfile Annotations")
101100
deleteCmd.Flags().StringVarP(&deleteClusterName, "cluster", "c", "", "delete a kubernetes cluster with cluster name")
102101
deleteCmd.Flags().StringSliceVarP(&deleteArgs.CustomEnv, "env", "e", []string{}, "set custom environment variables")
103-
deleteCmd.Flags().BoolVar(&kubernetes.ForceDelete, "force", false, "We also can input an --force flag to delete cluster by force")
102+
deleteCmd.Flags().BoolVar(&runtime.ForceDelete, "force", false, "We also can input an --force flag to delete cluster by force")
104103
deleteCmd.Flags().BoolP("all", "a", false, "this flags is for delete nodes, if this is true, empty all node ip")
105104
return deleteCmd
106105
}

pkg/runtime/interface.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,5 @@ type Interface interface {
3636
// GetClusterMetadata read the rootfs/Metadata file to get some install info for cluster.
3737
GetClusterMetadata() (*Metadata, error)
3838
}
39+
40+
var ForceDelete bool

pkg/runtime/k0s/common.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,16 @@
1515
package k0s
1616

1717
const (
18+
RuntimeFlag = "k0s"
19+
VersionCmd = "k0s version"
20+
1821
DefaultAdminConf = "/var/lib/k0s/pki/admin.conf"
1922

2023
DefaultK0sConfigPath = "/etc/k0s/k0s.yaml"
2124
DefaultK0sWorkerJoin = "/etc/k0s/worker"
2225
DefaultK0sControllerJoin = "/etc/k0s/controller"
2326
WorkerRole = "worker"
2427
ControllerRole = "controller"
28+
29+
ExternalCRI = "/run/containerd/containerd.sock"
2530
)

0 commit comments

Comments
 (0)