你能在github上找到完整的例子
这个例子是为了展示k8s的go client的以下几个方面:- 如何去连接 – 资源列表的检索和遍历 – 对象监听
Setup
client-go支持Godep和dep作为vendor的管理程序,我觉得dep便于使用所以继续使用dep。例如,以下是client-go v6.0和k8s API v1.9所需最低限度的Gopkg.toml。
- [[constraint]]
- name = "k8s.io/api"
- version = "kubernetes-1.9.0"
- [[constraint]]
- name = "k8s.io/apimachinery"
- version = "kubernetes-1.9.0"
- [[constraint]]
- name = "k8s.io/client-go"
- version = "6.0.0"
运行dep ensure确保剩下的工作。
连接 API Server
我们Go client的第一步就是建立一个与API Server的连接。为了做到这一点,我们要使用实体包中的clientcmd,如下代码所示:
- import (
- …
- "k8s.io/client-go/tools/clientcmd"
- )
- func main() {
- kubeconfig := filepath.Join(
- os.Getenv("HOME"), ".kube", "config",
- )
- config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
- if err != nil {
- log.Fatal(err)
- }
- …
- }
_Client-go_通过提供实体功能来从不同的上下文中获取你的配置,从而使之成为一个不重要的任务。
从config文件
正如上面的例子所做的那样,你能从kubeconfig文件启动配置来连接API server。当你的代码运行在集群之外的时候这是一个理想的方案。clientcmd.BuildConfigFromFlags("", configFile)
从集群
当你的代码运行在这个集群中的时候,你可以用上面的函数并且不使用任何参数,这个函数就会通过集群的信息去连接api server。
clientcmd.BuildConfigFromFlags("", "")
或者我们可以通过rest包来创建一个使用集群中的信息去配置启动的(译者注:k8s里所有的Pod都会以Volume的方式自动挂载k8s里面默认的ServiceAccount,所以会用默认的ServiceAccount的授权信息),如下:
- import "k8s.io/client-go/rest"
- …
- rest.InClusterConfig()
创建一个clientset
我们需要创建一个序列化的client为了让我们获取API对象。在kubernetes包中的Clientset类型定义,提供了去访问公开的API对象的序列化client,如下:
- type Clientset struct {
- *authenticationv1beta1.AuthenticationV1beta1Client
- *authorizationv1.AuthorizationV1Client
- …
- *corev1.CoreV1Client
- }
一旦我们有正确的配置连接,我们就能使用这个配置去初始化一个clientset,如下: