KubeClient是kubernetes 的C#语言客户端简单易用,KubeClient是.NET Core(目标netstandard1.4)的可扩展Kubernetes API客户端, github地址: https://github.com/tintoy/dotnet-kube-client/,还有一个官方的SDK https://github.com/kubernetes-client/csharp/  ,这两个sdk的设计哲学上是不一样的, 官方的客户端使用代码生成,代码生成的使用是有限的; 生成的客户端倾向于非惯用,并且对于像Kubernetes那样大的Swagger规范,最终会在客户端类上直接放置太多方法。KubeClient的方法是生成模型类并手动编写实际操作方法,以提供改进的开发使用体验(即有用且一致的异常类型)。

Kubernetes API中的某些操作可以根据传入的参数返回不同的响应。例如,删除a的请求如果调用者指定则v1/Pod返回现有v1/Pod(作为PodV1模型)DeletePropagationPolicy.Foreground但是如果任何其他类型则返回v1/Status(作为StatusV1模型)的DeletePropagationPolicy指定。

为了处理这种类型的多态响应,KubeClient使用KubeResultV1模型(及其派生的实现,KubeResourceResultV1<TResource>KubeResourceListResultV1<TResource>)。

KubeResourceResultV1<TResource>可以隐式地转换为a TResource或a StatusV1,因此消费代码可以继续使用客户端,就好像它期望操作只返回资源或期望它只返回StatusV1

PodV1 existingPod = await client.PodsV1().Delete("mypod", propagationPolicy: DeletePropagationPolicy.Foreground);

// OR: StatusV1 deleteStatus = await client.PodsV1().Delete("mypod", propagationPolicy: DeletePropagationPolicy.Background);

KubeClient设计也易于扩展。它的 KubeApiClient提供了Kubernetes API的顶级入口点,扩展方法用于公开更具体的资源客户端。Ocelot的kubernetes 集成模块就是使用KubeClient ,具体代码参见https://github.com/ThreeMammals/Ocelot/tree/develop/src/Ocelot.Provider.Kubernetes,这个模块是我们已经在生产环境下使用过了,最近合并进入Ocelot的主干代码,文档参见:https://ocelot.readthedocs.io/en/latest/features/kubernetes.html

简单代码示例参见

using KubeClient;
using KubeClient.Models;
using Ocelot.Logging;
using Ocelot.ServiceDiscovery.Providers;
using Ocelot.Values;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Ocelot.Provider.Kubernetes
{
     public class Kube : IServiceDiscoveryProvider
     {
         private KubeRegistryConfiguration kubeRegistryConfiguration;
         private IOcelotLogger logger;
         private IKubeApiClient kubeApi;

public Kube(KubeRegistryConfiguration kubeRegistryConfiguration, IOcelotLoggerFactory factory, IKubeApiClientFactory kubeClientFactory)
         {
             this.kubeRegistryConfiguration = kubeRegistryConfiguration;
             this.logger = factory.CreateLogger<Kube>();
             this.kubeApi = kubeClientFactory.Get(kubeRegistryConfiguration);
         }

public async Task<List<Service>> Get()
         {
             var service = await kubeApi.ServicesV1()
                 .Get(kubeRegistryConfiguration.KeyOfServiceInK8s, kubeRegistryConfiguration.KubeNamespace);
             var services = new List<Service>();
             if (IsValid(service))
             {
                 services.Add(BuildService(service));
             }
             else
             {
                 logger.LogWarning($"namespace:{kubeRegistryConfiguration.KubeNamespace }service:{kubeRegistryConfiguration.KeyOfServiceInK8s} Unable to use ,it is invalid. Address must contain host only e.g. localhost and port must be greater than 0");
             }
             return services;
         }

private bool IsValid(ServiceV1 service)
         {
             if (string.IsNullOrEmpty(service.Spec.ClusterIP) || service.Spec.Ports.Count <= 0)
             {
                 return false;
             }

return true;
         }

private Service BuildService(ServiceV1 serviceEntry)
         {
             var servicePort = serviceEntry.Spec.Ports.FirstOrDefault();
             return new Service(
                 serviceEntry.Metadata.Name,
                 new ServiceHostAndPort(serviceEntry.Spec.ClusterIP, servicePort.Port),
                 serviceEntry.Metadata.Uid,
                 string.Empty,
                 Enumerable.Empty<string>());
         }
     }
}

常用api

1.deployment

https://github.com/tintoy/dotnet-kube-client/blob/develop/samples/DeploymentWithRollback/Program.cs

2.service

参看上面ocelot 的代码

3.pod

https://github.com/tintoy/dotnet-kube-client/blob/develop/samples/noob-exec/Program.cs

总结

一般操作kubernetes ,二次开发的时候只需要对deployment、service做相关工作。操作起来还是比较简便的。

kubernetes 客户端KubeClient使用及常用api的更多相关文章

  1. 在kubernetes 集群内访问k8s API服务

    所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户).基于角色的访问控制(“RBAC”)使用 ...

  2. 【Kubernetes】深入解析声明式API

    在Kubernetes中,一个API对象在Etcd里的完整资源路径,是由:Group(API组).Version(API版本)和Resource(API资源类型)三个部分组成的. 通过这样的结构,整个 ...

  3. request对象常用API 获取请求参数的值 request应用 MVC设计模式

    1 request对象常用API   1)表示web浏览器向web服务端的请求   2)url表示访问web应用的完整路径:http://localhost:8080/day06/Demo1     ...

  4. Express ( MiddleWare/中间件 路由 在 Express 中使用模板引擎 常用API

    A fast, un-opinionated, minimalist web framework for Node.js applications. In general, prefer simply ...

  5. 常用API接口汇总

    下面列举了100多个国内常用API接口,并按照 笔记.出行.词典.电商.地图.电影.即时通讯.开发者网站.快递查询.旅游.社交.视频.天气.团队协作.图片与图像处理.外卖.消息推送.音乐.云.语义识别 ...

  6. Kubernetes 在生产环境中常用架构

    Kubernetes 在生产环境中常用架构 首先,我们来梳理下Kubernetes生产架构,其设计适用于绝大多数环境.如下图所示 在该架构中,我们可以将其分为四层,如下: Client层:即Kuber ...

  7. jedis常用API

    一.Redis Client介绍 1.1.简介 Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对各类API进行封装调用. Jedis源码工程地址:https://g ...

  8. Servlet 常用API学习(三)

    Servlet常用API学习 (三) 一.HTTPServletRequest简介 Servlet API 中定义的 ServletRequest 接口类用于封装请求消息. HttpServletRe ...

  9. Netty的常用API(二)

    在使用Netty之前先介绍下Netty的常用API,对其有一个大概的了解. 一.EventLoop和EventLoopGroup EventLoop如同它的名字,它是一个无限循环(Loop),在循环中 ...

随机推荐

  1. Day2 《机器学习》第二章学习笔记

    这一章应该算是比价了理论的一章,我有些概率论基础,不过起初有些地方还是没看多大懂.其中有些公式的定义和模型误差的推导应该还是很眼熟的,就是之前在概率论课上提过的,不过有些模糊了,当时课上学得比较浅. ...

  2. Matlab与C混编的介绍

    原本写给一个朋友的,帮助她入门matlab与C混编的 >#####环境: * Matlab:MATLAB R2013a * C编译器VC++2012 === #####配置环境: 在**Matl ...

  3. 详解MUI顶部选项卡(tab-top-webview-main)的用法

    最近用MUI做手机app的时候,遇到了一点问题.然后就对这个tab-top-webview-main的源码做了点研究,接下来我将和大家详解一下 tab-top-webview-main的用法和应该注意 ...

  4. HSLA色相饱和透明度

    H:Hue(色调),取值为:0 - 360.将色相值想成一个圆环中的度数,随着在圆环上移动,得到不同的颜色. S:Saturation(饱和度),取值为:0.0% - 100.0%.数值越低(降低饱和 ...

  5. testng生成自定义html报告

    转自:https://blog.csdn.net/kdslkd/article/details/51198433 testng原生的或reportng的报告总有些不符合需要,尝试生成自定义测试报告,用 ...

  6. Linux.Centos6编译安装nginx

    环境 系统环境:CentOS release 6.7 (Final) 需求 centos6.7编译安装nginx1.x 准备 安装依赖 yum install -y gcc gcc-c++ autoc ...

  7. intelij IDEA破解

    破解intelij IDEA请见链接:https://blog.csdn.net/weixin_37937646/article/details/79119540

  8. 开机出现loading (hd0)/ntldr。。。

    电脑一开机就出现ntldr is missing的原因:1.操作系统文件损坏.2.MBR表损坏.3.硬盘数据线松了.4.硬盘坏了.解决方法:1.重新安装操作系统.2.用U盘或光盘引导,进入PE系统,用 ...

  9. BZOJ_4518_[Sdoi2016]征途_斜率优化

    BZOJ_4518_[Sdoi2016]征途_斜率优化 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到 ...

  10. [NOIP2002]字串变换 T2 双向BFS

    题目描述 已知有两个字串  A,B  及一组字串变换的规则(至多6个规则): A1−>B1 A2−>B2 规则的含义为:在  A$中的子串  A1可以变换为可以变换为B1.A2可以变换为可 ...