* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* openFuyao is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package kubelet
import (
_ "embed"
"fmt"
"os"
"time"
configv1beta1 "gopkg.openfuyao.cn/cluster-api-provider-bke/api/bkecommon/v1beta1"
yaml2 "sigs.k8s.io/yaml"
"gopkg.openfuyao.cn/bkeadm/pkg/executor/k8s"
"gopkg.openfuyao.cn/bkeadm/pkg/global"
"gopkg.openfuyao.cn/bkeadm/utils"
"gopkg.openfuyao.cn/bkeadm/utils/log"
)
var (
kubeletCrd []byte
kubeletDefault []byte
)
func ApplyKubeletCfg() error {
err := applyKubeletdCrd()
if err != nil {
return fmt.Errorf("apply kubelet crd failed: %v", err)
}
err = applyContainerdDefault()
if err != nil {
return fmt.Errorf("apply kubelet default failed: %v", err)
}
log.Info("Apply kubelet crd and default success")
return nil
}
func applyKubeletdCrd() error {
var err error
if global.K8s == nil {
global.K8s, err = k8s.NewKubernetesClient("")
if err != nil {
return err
}
}
kubeletCrdFile := fmt.Sprintf("%s/tmpl/kubelet_crd.yaml", global.Workspace)
err = os.WriteFile(kubeletCrdFile, kubeletCrd, utils.DefaultFilePermission)
if err != nil {
return err
}
time.Sleep(1 * time.Second)
log.Info("Install kubelet CRD...")
err = global.K8s.InstallYaml(kubeletCrdFile, nil, "")
if err != nil {
return err
}
return nil
}
func applyContainerdDefault() error {
runtimeParam := map[string]string{}
conf := &configv1beta1.KubeletConfig{}
if err := yaml2.Unmarshal(kubeletDefault, conf); err != nil {
return fmt.Errorf("unmarshal kubelet default failed: %v", err)
}
if err := k8s.CreateNamespace(global.K8s, conf.Namespace); err != nil {
return err
}
kubeletDefaultFile := fmt.Sprintf("%s/tmpl/kubelet_default.yaml", global.Workspace)
err := os.WriteFile(kubeletDefaultFile, kubeletDefault, utils.DefaultFilePermission)
if err != nil {
return err
}
time.Sleep(1 * time.Second)
log.Infof("Submit kubelet default yaml to the cluster")
err = global.K8s.InstallYaml(kubeletDefaultFile, runtimeParam, "")
if err != nil {
log.Errorf("Failed to install kubelet default, %v", err)
return nil
}
log.Infof("Submit the kubelet configuration to the cluster")
return nil
}