版权声明:本文为博主原创文章,未经博主允许不得转载。 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