k8s多集群管理实战(一)集群管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1083062043/article/details/86605522
本系列文章为学习实战;基于k8s1.13实践

k8s架构简介

K8s是一个管理主节点和若干工作节点组成的体系架构,整个体系由一个主节点(master)和多个计算节点构成,计算节点又叫工人节点(worker)。
在这里插入图片描述
主节点为集群提供管理和控制接口(API)。我们可以使用kubectl(CLI)时,输入群集或应用程序的的各种配置参数值。然后由主节点负责解析参数,并把其应用到集群中,生成符合需求的各个容器。
在这里插入图片描述
本系列所有实现均是基于API client(client-go)实现交互

初始化客户端

import (
	"encoding/json"
	"errors"
	"time"

	"k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/fields"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
	kcache "k8s.io/client-go/tools/cache"
	"k8s.io/client-go/tools/clientcmd"
	clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
	clientcmdlatest "k8s.io/client-go/tools/clientcmd/api/latest"
	clientcmdapiv1 "k8s.io/client-go/tools/clientcmd/api/v1"
)

type ClusterManager struct {
	Client  *kubernetes.Clientset
	Config  *rest.Config
}

var (
	clusterManagerSets = make(map[string]*ClusterManager)
)

// master 集群的master地址;如https://192.168.112.38:6443
// kubeconfig  k8s集群的配置内容;/etc/kubernetes/admin.conf
func BuildClient(master string, kubeconfig string) (*kubernetes.Clientset, *rest.Config, error) {
	configV1 := clientcmdapiv1.Config{}
	err := json.Unmarshal([]byte(kubeconfig), &configV1)
	if err != nil {
		logs.Error("json unmarshal kubeconfig error. %v ", err)
		return nil, nil, err
	}
	configObject, err := clientcmdlatest.Scheme.ConvertToVersion(&configV1, clientcmdapi.SchemeGroupVersion)
	configInternal := configObject.(*clientcmdapi.Config)

	// 实例化配置信息
	clientConfig, err := clientcmd.NewDefaultClientConfig(*configInternal, &clientcmd.ConfigOverrides{
		ClusterDefaults: clientcmdapi.Cluster{Server: master},
	}).ClientConfig()

	if err != nil {
		logs.Error("build client config error. %v ", err)
		return nil, nil, err
	}

	clientConfig.QPS = defaultQPS
	clientConfig.Burst = defaultBurst

	// 实例化客户端
	clientSet, err := kubernetes.NewForConfig(clientConfig)

	if err != nil {
		logs.Error("(%s) kubernetes.NewForConfig(%v) error.%v", master, err, clientConfig)
		return nil, nil, err
	}

	return clientSet, clientConfig, nil
}

管理多集群客户端

多集群下,每个集群客户度和配置信息,组成ClusterManager对象,将集群 对象都缓存在一个map中

clusterManager := &ClusterManager{
				Client:  clientSet,
				Config:  config,
			}
clusterManagerSets [clusterName] = clusterManager

猜你喜欢

转载自blog.csdn.net/qq1083062043/article/details/86605522