kubernetes客户端client-go使用
下载地址: https://github.com/kubernetes/client-go
官方使用文档参考:https://v1-16.docs.kubernetes.io/docs/reference/using-api/client-libraries/
安装,使用的为kubernetes1.15.6版本的kubernetes集群
go get -u -v k8s.io/client-go@kubernetes-1.15.6
在操作外部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属性的为如下结构体
type PodTemplateSpec struct {
// Standard object's metadata.
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
// +optional
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
// Specification of the desired behavior of the pod.
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
// +optional
Spec PodSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
}
故此处需要定义,副本数量,选择器,podspec,而副本数量为一个int32类型的数字,标签选择器为一个map[string]string的数组
故定义如下
repl := int32(1) // 副本数量 match := make(map[string]string) // 标签选择器
match["app"] = "nginx"
var podSpec = apiv1.Container {
Name: "golang-client",
Image:"redis",
ImagePullPolicy:"IfNotPresent",
}
containers := []apiv1.Container{podSpec} var templateSpec = apiv1.PodTemplateSpec{
ObjectMeta:metav1.ObjectMeta{
Name:"testpod",
Labels:match,
},
Spec: apiv1.PodSpec{
Containers:containers,
},
}
定义deployment控制器格式
selecter := metav1.LabelSelector{
MatchLabels: match,
}
deploy := appv1.Deployment{
ObjectMeta:metav1.ObjectMeta{
Name: "testgolangclient",
},
Spec: appv1.DeploymentSpec{
Replicas: &repl,
Selector:&selecter,
Template:templateSpec,
},
}
创建的deplyment 控制器
podsClient,err := clientset.AppsV1().Deployments("default" /* 名称空间 */).Create(&deploy)
kubernetes客户端client-go使用的更多相关文章
- Axis 生成客户端client stub文件
[转自] http://blog.csdn.net/qiao000_000/article/details/5568442 开发前,有个同事先给我们不熟悉Web Service的程序员进行了一些培训, ...
- Kubernetes客户端和管理界面大集合
今天给大家介绍目前市面上常用的kubernetes管理工具,总有一款适合您~~~ 简介 Kubectl K9s Kubernetes-Dashboard Rancher Kuboard Lens Oc ...
- kubernetes 客户端KubeClient使用及常用api
KubeClient是kubernetes 的C#语言客户端简单易用,KubeClient是.NET Core(目标netstandard1.4)的可扩展Kubernetes API客户端, gith ...
- 最好的Kubernetes客户端Java库fabric8io,快来自定义你的操作
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 Kubernetes Java客户端 对于Kubernetes集群的操作,官方提供了命令行工具kubectl,这也是我 ...
- cas单点登录系统:客户端(client)详细配置
最近一直在研究cas登录中心这一块的应用,分享一下记录的一些笔记和心得.后面会把cas-server端的配置和重构,另外还有这几天再搞nginx+cas的https反向代理配置,以及cas的证书相关的 ...
- java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)
原文链接: http://www.cnblogs.com/kenkofox/archive/2010/04/25/1719649.html 代码: http://files.cnblogs.com/k ...
- cas单点登录系统:客户端(client)详细配置(包含统一单点注销配置)
最近一直在研究cas登录中心这一块的应用,分享一下记录的一些笔记和心得.后面会把cas-server端的配置和重构,另外还有这几天再搞nginx+cas的https反向代理配置,以及cas的证书相关的 ...
- Kubernetes 的 Client Libraries 的使用
说明 kubernetes 估计会成为 linux 一样的存在,client-go 是它的 go sdk,client-go/examples/ 给出了一些用例,但是数量比较少. api Resour ...
- Kubernetes Python Client 初体验之node操作
今天讲一下k8s中对于各个实物节点node的操作. 首先是获取所有nodes信息: self.config.kube_config.load_kube_config(config_file=" ...
- Kubernetes Python Client 初体验之Deployment
Kubernetes官方推荐我们使用各种Controller来管理Pod的生命周期,今天写一个最常用的Deployment的操作例子. 首先是创建Deployment: with open(path. ...
随机推荐
- Mysql之锁机制
全局锁 全局锁就是对整个数据库实例加锁.MySQL 提供了一个加全局读锁的方法FTWRL Flush tables with read lock 全局锁的典型使用场景是,做全库逻辑备份,也就是把整库每 ...
- Spring Cloud 升级之路 - 2020.0.x - 1. 背景知识、需求描述与公共依赖
1. 背景知识.需求描述与公共依赖 1.1. 背景知识 & 需求描述 Spring Cloud 官方文档说了,它是一个完整的微服务体系,用户可以通过使用 Spring Cloud 快速搭建一个 ...
- JS基础学习第四天
对象(Object) 对象是JS中的引用数据类型对象是一种复合数据类型,在对象中可以保存多个不同数据类型的属性使用typeof检查一个对象时,会返回object 对象的分类: 1.内建对象- 由ES标 ...
- SQL Server 实用语句
创建临时表 #Test CREATE TABLE #Test( ID INT, Name VARCHAR(50) ) INSERT INTO #Test( ID, Name ) VALUES ( 1, ...
- ES系列(二):基于多播的集群发现实现原理解析
ES作用超强悍的搜索引擎,除了需要具有齐全的功能支持,超高的性能,还必须要有任意扩展的能力.一定程度上,它是一个大数据产品.而要做扩展性,集群自然少不了.然而单独的集群又是不够的,能够做的事情太少,所 ...
- Java后端进阶-JVM参数调优
package com.study.performance; import org.springframework.boot.SpringApplication; import org.springf ...
- 这可能是最容易理解的 Go Mutex 源码剖析
Hi,大家好,我是 haohongfan. 上一篇文章<一文完全掌握 Go math/rand>,我们知道 math/rand 的 global rand 有一个全局锁,我的文章里面有一句 ...
- 面试有关TCP常问的几个问题
在面试中网络问题是一定会考察的,而TCP协议则是考察网络知识的重点.经常会被问道的问题如下: 请讲一下TCP协议建立连接的过程 请介绍TCP协议中的三次握手和四次挥手是怎么样的 为什么TCP协议要三次 ...
- 浅谈在c#中使用Zlib压缩与解压的方法
作者:Compasslg 介绍 近期用c#开发一个游戏的存档编辑工具需要用 Zlib 标准的 Deflate 算法对数据进行解压. 在 StackOverflow 上逛了一圈,发现 c# 比较常用到的 ...
- 【C#】一个Loading窗体载入与销毁的方法
写在前面 Minecraft Command Editor 2跳票了近两年的时间(对不起!!).2021年2月,我重启了MCE项目,并正式命名为Minecraft Command Editor 202 ...