使用Go创造Kubernetes应用

你能在github上找到完整的例子

这个例子是为了展示k8s的go client的以下几个方面:- 如何去连接 – 资源列表的检索和遍历 – 对象监听

Setup

client-go支持Godep和dep作为vendor的管理程序,我觉得dep便于使用所以继续使用dep。例如,以下是client-go v6.0和k8s API v1.9所需最低限度的Gopkg.toml。


  1. [[constraint]]  
  2.   name = "k8s.io/api"  
  3.   version = "kubernetes-1.9.0"  
  4. [[constraint]]  
  5.   name = "k8s.io/apimachinery"  
  6.   version = "kubernetes-1.9.0"  
  7. [[constraint]]  
  8.   name = "k8s.io/client-go"  
  9.   version = "6.0.0" 

运行dep ensure确保剩下的工作。

连接 API Server

我们Go client的第一步就是建立一个与API Server的连接。为了做到这一点,我们要使用实体包中的clientcmd,如下代码所示:


  1. import (  
  2. …  
  3.     "k8s.io/client-go/tools/clientcmd"  
  4.  
  5. func main() {  
  6.     kubeconfig :filepath.Join(  
  7.          os.Getenv("HOME"), ".kube", "config",  
  8.     )  
  9.     config, err :clientcmd.BuildConfigFromFlags("", kubeconfig)  
  10.     if err != nil {  
  11.         log.Fatal(err)  
  12.     }  
  13. …  

_Client-go_通过提供实体功能来从不同的上下文中获取你的配置,从而使之成为一个不重要的任务。

从config文件

正如上面的例子所做的那样,你能从kubeconfig文件启动配置来连接API server。当你的代码运行在集群之外的时候这是一个理想的方案。clientcmd.BuildConfigFromFlags("", configFile)

从集群

当你的代码运行在这个集群中的时候,你可以用上面的函数并且不使用任何参数,这个函数就会通过集群的信息去连接api server。

clientcmd.BuildConfigFromFlags("", "")

或者我们可以通过rest包来创建一个使用集群中的信息去配置启动的(译者注:k8s里所有的Pod都会以Volume的方式自动挂载k8s里面默认的ServiceAccount,所以会用默认的ServiceAccount的授权信息),如下:


  1. import "k8s.io/client-go/rest"  
  2. …  
  3. rest.InClusterConfig() 

创建一个clientset

我们需要创建一个序列化的client为了让我们获取API对象。在kubernetes包中的Clientset类型定义,提供了去访问公开的API对象的序列化client,如下:


  1. type Clientset struct {  
  2.     *authenticationv1beta1.AuthenticationV1beta1Client  
  3.     *authorizationv1.AuthorizationV1Client  
  4. …  
  5.     *corev1.CoreV1Client  

一旦我们有正确的配置连接,我们就能使用这个配置去初始化一个clientset,如下:

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章