Merge pull request #511 from Garrybest/agent-deploy

fix bugs of agent deployment
This commit is contained in:
karmada-bot 2021-07-14 12:20:32 +08:00 committed by GitHub
commit 9495cf398f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 52 additions and 8 deletions

View File

@ -7,6 +7,7 @@ import (
"os"
"github.com/spf13/cobra"
corev1 "k8s.io/api/core/v1"
kubeclientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
@ -18,7 +19,6 @@ import (
"github.com/karmada-io/karmada/pkg/controllers/execution"
"github.com/karmada-io/karmada/pkg/controllers/mcs"
"github.com/karmada-io/karmada/pkg/controllers/status"
karmadaclientset "github.com/karmada-io/karmada/pkg/generated/clientset/versioned"
"github.com/karmada-io/karmada/pkg/karmadactl"
"github.com/karmada-io/karmada/pkg/util"
"github.com/karmada-io/karmada/pkg/util/gclient"
@ -152,15 +152,22 @@ func setupControllers(mgr controllerruntime.Manager, opts *options.Options, stop
}
func registerWithControlPlaneAPIServer(controlPlaneRestConfig *restclient.Config, memberClusterName string) error {
karmadaClient := karmadaclientset.NewForConfigOrDie(controlPlaneRestConfig)
client := gclient.NewForConfigOrDie(controlPlaneRestConfig)
namespaceObj := &corev1.Namespace{}
namespaceObj.Name = util.NamespaceClusterLease
if err := util.CreateNamespaceIfNotExist(client, namespaceObj); err != nil {
klog.Errorf("Failed to create namespace(%s) object, error: %v", namespaceObj.Name, err)
return err
}
clusterObj := &clusterv1alpha1.Cluster{}
clusterObj.Name = memberClusterName
clusterObj.Spec.SyncMode = clusterv1alpha1.Pull
_, err := karmadactl.CreateClusterObject(karmadaClient, clusterObj, false)
if err != nil {
klog.Errorf("failed to create cluster object. cluster name: %s, error: %v", memberClusterName, err)
if err := util.CreateClusterIfNotExist(client, clusterObj); err != nil {
klog.Errorf("Failed to create cluster(%s) object, error: %v", clusterObj.Name, err)
return err
}

View File

@ -53,7 +53,9 @@ MEMBER_CLUSTER_NAME=$4
source "${REPO_ROOT}"/hack/util.sh
# install agent to member cluster
if [ -n "${KUBECONFIG+x}" ];then
CURR_KUBECONFIG=$KUBECONFIG # backup current kubeconfig
fi
export KUBECONFIG="${MEMBER_CLUSTER_KUBECONFIG}" # switch to member cluster
kubectl config use-context "${MEMBER_CLUSTER_NAME}"
@ -92,5 +94,9 @@ kubectl apply -f "${TEMP_PATH}"/karmada-agent.yaml
# Wait for karmada-etcd to come up before launching the rest of the components.
util::wait_pod_ready "${AGENT_POD_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}"
# recover the kubeconfig before installing agent
# recover the kubeconfig before installing agent if necessary
if [ -n "${CURR_KUBECONFIG+x}" ];then
export KUBECONFIG="${CURR_KUBECONFIG}"
else
unset KUBECONFIG
fi

View File

@ -3,6 +3,7 @@ package util
import (
"context"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"
@ -28,3 +29,17 @@ func GetCluster(hostClient client.Client, clusterName string) (*v1alpha1.Cluster
}
return cluster, nil
}
// CreateClusterIfNotExist try to create the cluster if it does not exist.
func CreateClusterIfNotExist(client client.Client, clusterObj *v1alpha1.Cluster) error {
cluster := &v1alpha1.Cluster{}
if err := client.Get(context.TODO(), types.NamespacedName{Name: clusterObj.Name}, cluster); err != nil {
if !apierrors.IsNotFound(err) {
return err
}
if err := client.Create(context.TODO(), clusterObj); err != nil {
return err
}
}
return nil
}

View File

@ -6,7 +6,9 @@ import (
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
kubeclient "k8s.io/client-go/kubernetes"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// IsNamespaceExist tells if specific already exists.
@ -45,3 +47,17 @@ func DeleteNamespace(client kubeclient.Interface, namespace string) error {
}
return nil
}
// CreateNamespaceIfNotExist try to create the namespace if it does not exist.
func CreateNamespaceIfNotExist(client client.Client, namespaceObj *corev1.Namespace) error {
namespace := &corev1.Namespace{}
if err := client.Get(context.TODO(), types.NamespacedName{Name: namespaceObj.Name}, namespace); err != nil {
if !apierrors.IsNotFound(err) {
return err
}
if err := client.Create(context.TODO(), namespaceObj); err != nil {
return err
}
}
return nil
}