• client-go实战之一:准备工作


    欢迎访问我的GitHub

    https://github.com/zq2599/blog_demos

    内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

    系列文章链接

    1. client-go实战之一:准备工作
    2. client-go实战之二:RESTClient
    3. client-go实战之三:Clientset
    4. client-go实战之四:dynamicClient
    5. client-go实战之五:DiscoveryClient

    关于client-go

    • client-go是kubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作;
    • 除了提供丰富的API用于操作kubernetes资源,client-go还为controller和operator提供了重要支持,如下图,client-go的informer机制可以将controller关注的资源变化及时带给此controller,使controller能够及时响应变化:

    在这里插入图片描述

    关于《client-go实战》系列

    《client-go实战》系列是欣宸推出的实战主题原创,旨在与大家一起动手体验client-go的相关技术,从简单的实践开始,逐步深入了解client-go的强大功能,为后续的operator学习打下扎实的基础;

    重要前提

    • 开始client-go实战之前要对以下知识点有所了解:
    1. kubernetes基本原理和操作;
    2. kubernetes的Group、Version、Resource等概念,推荐阅读《Kubernetes的Group、Version、Resource学习小记》

    本篇概览

    作为整个系列的开篇,除了对client-go做介绍,还要为后面的实战做好如下准备工作:

    1. 列出要用到的硬件;
    2. 列出要用到的软件及其版本;
    3. 同步kubernetes配置文件,使得开发环境可以远程访问kubernetes;

    环境信息

    • 如下图所示,本次实战一共用到两台电脑:

    在这里插入图片描述

    1. Linux电脑:操作系统是CentOS 7.9,已安装1.20.0版本的kubernetes
    2. MacBook Pro:操作系统是macOS Big Sur(11.1),编码工作在此电脑上进行
    3. MacBook Pro上安装的go版本为1.15.7
    4. 您可以按照个人习惯选择IDE,我这里用的是GoLand-2020.2版本

    确定要用的client-go版本

    client-go官方提供了多个版本,并且给出了和kubernetes版本的匹配列表,如下所示:

    Kubernetes 1.15 Kubernetes 1.16 Kubernetes 1.17 Kubernetes 1.18 Kubernetes 1.19 Kubernetes 1.20
    kubernetes-1.15.0 +- +- +- +- +-
    kubernetes-1.16.0 +- +- +- +- +-
    kubernetes-1.17.0/v0.17.0 +- +- +- +- +-
    kubernetes-1.18.0/v0.18.0 +- +- +- +- +-
    kubernetes-1.19.0/v0.19.0 +- +- +- +- +-
    kubernetes-1.20.0/v0.20.0 +- +- +- +- +-
    HEAD +- +- +- +- +- +-

    这里解释一下表格中的+- 的含义:

    • 表示精确匹配,如下图红框,表示v0.20.0版本可以精确匹配1.20.0版本的kubernetes:

    在这里插入图片描述

    • + 表示有的新特性是client-go支持的,但是此kubernetes版本却不支持;
    • - 表示有的新特性是kubernetes支持的,但是此client-go版本却不支持;
    • 我这里kubernetes版本为1.20.0,因此选用client-go的0.20.0版本最合适;

    复制k8s环境的配置文件

    • 为了能让MacBook Pro电脑上的go应用顺利访问K8S,请将K8S环境下的~/.kube/config文件复制到MacBook Pro电脑的~/.kube/目录下;

    客户端对象简述

    • 本篇聚焦准备工作,不做编码,这里提前介绍一下后面的实战内容:通过client-go提供的客户端对象与kubernetes的API Server进行交互,而client-go提供了以下四种客户端对象,后面的实战会逐个体验:
    1. RESTClient:这是最基础的客户端对象,仅对HTTPRequest进行了封装,实现RESTFul风格API,这个对象的使用并不方便,因为很多参数都要使用者来设置,于是client-go基于RESTClient又实现了三种新的客户端对象;
    2. ClientSet:把Resource和Version也封装成方法了,用起来更简单直接,一个资源是一个客户端,多个资源就对应了多个客户端,所以ClientSet就是多个客户端的集合了,这样就好理解了,不过ClientSet只能访问内置资源,访问不了自定义资源;
    3. DynamicClient:可以访问内置资源和自定义资源,个人感觉有点像java的集合操作,拿出的内容是Object类型,按实际情况自己去做强制转换,当然了也会有强转失败的风险;
    4. DiscoveryClient:用于发现kubernetes的API Server支持的Group、Version、Resources等信息;
    • 至此,咱们的环境和知识准备工作就完成了,接下来一同去探索强大的client-go吧!

    你不孤单,欣宸原创一路相伴

    1. Java系列
    2. Spring系列
    3. Docker系列
    4. kubernetes系列
    5. 数据库+中间件系列
    6. DevOps系列

    欢迎关注公众号:程序员欣宸

    微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
    https://github.com/zq2599/blog_demos

  • 相关阅读:
    Delphi中的钩子函数HOOK详解
    Delphi好书推荐
    Windows通知栏图标高级编程概述
    关于开机自动运行程序和自动启动服务
    如何在一个窗体中嵌入另一个窗体
    三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子
    Delphi中的钩子函数HOOK详解
    STL(转)
    默认参数(c++)
    STL2
  • 原文地址:https://www.cnblogs.com/bolingcavalry/p/15232143.html
Copyright © 2020-2023  润新知