当前位置:首页 > Web开发 > 正文

kubernetes客户端client

2024-03-31 Web开发

官方使用文档参考:https://v1-16.docs.kubernetes.io/docs/reference/using-api/client-libraries/

安装,使用的为kubernetes1.15.6版本的kubernetes集群

go get -u -v k8s.io/[email protected]

在操作外部k8s集群示例

创建一个clientSet

package main import ( "flag" "fmt" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" appv1 "k8s.io/api/apps/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" ) func main() { var ( k8sconfig = flag.String("k8sconfig", "./admin.conf", "kubernetes auth config") //使用kubeconfig配置文件进行集群权限认证 config *rest.Config err error ) flag.Parse() config, err = clientcmd.BuildConfigFromFlags("", *k8sconfig) if err != nil { fmt.Println(err) return } // 从指定的config创建一个新的clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { fmt.Println(err) return } else { fmt.Println("connect kubernetes cluster success.") }

获取指定namespace中的pod信息

// 获取pod列表 pod为名称空间级别资源需指定名称空间 pods, err := clientset.CoreV1().Pods("default").List(metav1.ListOptions{}) if err != nil { panic(err) } // 循环打印pod的信息 for _,pod := range pods.Items { fmt.Println(pod.ObjectMeta.Name,pod.Status.Phase) }

创建namespace

nsClient := clientset.CoreV1().Namespaces() ns := &apiv1.Namespace{ ObjectMeta:metav1.ObjectMeta{ Name: "testzhangsan", }, Status:apiv1.NamespaceStatus{ Phase:apiv1.NamespaceActive, }, } ns,err = nsClient.Create(ns) if err != nil{ panic(err) } fmt.Println(ns.ObjectMeta.Name,ns.Status.Phase)

获取指定名称空间下svc信息

svclist,err := clientset.CoreV1().Services("kube-system").List(metav1.ListOptions{}) for _,svc := range svclist.Items { fmt.Println(svc.Name,svc.Spec.ClusterIP,svc.Spec.Ports) }

创建一个deployment控制器

kubernetes中控制器的资源清单如下列所示,故需要按照资源清单的示例来根据客户端库创建控制器

apiVersion: v1 kind: Pod metadata: name: test-pod namespace: default labels: app: redis spec: containers: - name: redis-app image: redis imagePullPolicy: IfNotPresent ports: - name: redis containerPort: 6379 - name: busybox image: busybox command: - "/bin/sh" - "-c" - "sleep 3600"

deployment控制器格式是如下结构体,需要根据此结构体创建

// Deployment enables declarative updates for Pods and ReplicaSets. type Deployment struct { metav1.TypeMeta `json:",inline"` // Standard object metadata. // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of the Deployment. // +optional Spec DeploymentSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Most recently observed status of the Deployment. // +optional Status DeploymentStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` }

需要metadata和spec两个选项

故需创建两个结构体,metadate只需要简单的名称和标签定义即可

ObjectMeta:metav1.ObjectMeta{ Name: "testgolangclient", },

spec为pod的属性定义和副本数量等信息。一个完整的deployment控制器的结构体格式如下

type DeploymentSpec struct { // Number of desired pods. This is a pointer to distinguish between explicit // zero and not specified. Defaults to 1. // +optional Replicas *int32 `json:"replicas,omitempty" protobuf:"varint,1,opt,name=replicas"` // Label selector for pods. Existing ReplicaSets whose pods are // selected by this will be the ones affected by this deployment. // It must match the pod template‘s labels. Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,2,opt,name=selector"` // Template describes the pods that will be created. Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,3,opt,name=template"` // The deployment strategy to use to replace existing pods with new ones. // +optional // +patchStrategy=retainKeys Strategy DeploymentStrategy `json:"strategy,omitempty" patchStrategy:"retainKeys" protobuf:"bytes,4,opt,name=strategy"` // Minimum number of seconds for which a newly created pod should be ready // without any of its container crashing, for it to be considered available. // Defaults to 0 (pod will be considered available as soon as it is ready) // +optional MinReadySeconds int32 `json:"minReadySeconds,omitempty" protobuf:"varint,5,opt,name=minReadySeconds"` // The number of old ReplicaSets to retain to allow rollback. // This is a pointer to distinguish between explicit zero and not specified. // Defaults to 10. // +optional RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty" protobuf:"varint,6,opt,name=revisionHistoryLimit"` // Indicates that the deployment is paused. // +optional Paused bool `json:"paused,omitempty" protobuf:"varint,7,opt,name=paused"` // The maximum time in seconds for a deployment to make progress before it // is considered to be failed. The deployment controller will continue to // process failed deployments and a condition with a ProgressDeadlineExceeded // reason will be surfaced in the deployment status. Note that progress will // not be estimated during the time a deployment is paused. Defaults to 600s. ProgressDeadlineSeconds *int32 `json:"progressDeadlineSeconds,omitempty" protobuf:"varint,9,opt,name=progressDeadlineSeconds"` }

此处简单创建一个deployment控制器,故只需副本数量 选择器 template即可。

在资源清单中的spec属性的为如下结构体

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/40263.html