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. 二十一、Hadoop学记笔记————kafka的初识

    这些场景的共同点就是数据由上层框架产生,需要由下层框架计算,其中间层就需要有一个消息队列传输系统 Apache flume系统,用于日志收集 Apache storm系统,用于实时数据处理 Spark ...

  2. Activity的运行过程

    今天看到了这个关于Activity的过程这个方面的知识,之前我其实也是做过安卓项目的,也是有安卓开发的一定经验的,但是我发现之前似乎是知其然,而不知其所以然,之前来说只知道activity里的onCr ...

  3. Spring Boot ConfigurationProperties validate

    使用@Query可以在自定义的查询方法上使用@Query来指定该方法要执行的查询语句,比如:@Query("select o from UserModel o where o.uuid=?1 ...

  4. Array.prototype.slice.call()方法详解

    在很多时候经常看到Array.prototype.slice.call()方法,比如Array.prototype.slice.call(arguments),下面讲一下其原理: 1.基本讲解 1.在 ...

  5. Linux上配置使用iSCSI详细说明

    本文详细介绍iSCSI相关的内容,以及在Linux上如何实现iSCSI. 第1章 iSCSI简介 1.1 scsi和iscsi 传统的SCSI技术是存储设备最基本的标准协议,但通常需要设备互相靠近并用 ...

  6. 纯CSS打造进度条

    进度条效果如下: CSS部分 body { background-color: white; } .progress-bar { display: flex; flex-direction: row; ...

  7. linux安装tomcat Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

    这两天我们的开发机重启了好几次,发现每次重启后我的tomcat总是没有启动.检查java路径,配置正确,后来拿普通账号启动tomcat时报如下的错: Neither the JAVA_HOME nor ...

  8. 如何解决-win7系统打开截图工具显示“截图工具当前未在计算机上运行”

    打开win7系统自带截图工具,显示"截图工具当前未在计算机上运行.请重新启动计算机,然后重试",  解决方法  1.首先在C盘中搜索tpcps.dll: 2.将数据最大那个tpcp ...

  9. 我TM菜爆

    我怎么什么都能爆零啊! 我太神了!

  10. BZOJ_5015_[Snoi2017]礼物_矩阵乘法

    BZOJ_5015_[Snoi2017]礼物_矩阵乘法 Description 热情好客的请森林中的朋友们吃饭,他的朋友被编号为 1-N,每个到来的朋友都会带给他一些礼物:.其中,第 一个朋友会带给他 ...