K8s-client-go:WorkQueue工作队列
K8s-client-go:WorkQueue工作队列WorkQueue队列与普通的FIFO队列,添加了标记和去重功能。有如下特性:
有序:按照顺序处理元素
去重:相同元素同一时间不会被重复处理
并发性:多生产者和消费者
标记机制:ShutDown方法通过信号量通知队列不再接收新的元素,并通知metric goroutine退出
延迟:支持延迟队列,延迟一段时间将元素存入队列
限速:支持限速队列,元素存入队列时进行速率限制。限制一个元素出现排队(REenqueued)的次数
Metric:支持metric监控指标,可用Prometheus监控
WorkQueue支持三种队列,并且提供三种接口:
Interface:FIFO队列,支持去重
Delaying Interface:延迟队列接口,基于Interface接口限制
RateLimtingInterface:限速接口队列
FIFO基本队列位置:k8s.io/client-go/util/workqueue
type Interface interface { //给队列添加元素 ...
K8s-Client-go:四种客户端
K8s-Client-go:四种客户端概述ClientSet、DynamicClient、DiscoveryClient. —> RESTClient —> kubeconfig
其实,前面三种都是依赖于 RESTClient
RESTClient:就是对HTTP Client进行了封装,实现了RESTful风格的API。
ClientSet:在RESTClient之上封装了Resource和Version的管理方法,ClientSet只能访问K8s内置的资源,不能访问CRD资源,它是通过client-gen代码生成器生成的
DynamicClient:比ClientSet多一个支持CRD资源
DiscoveryClient:用于发现kube-apiserver所支持的资源组、资源版本、资源信息(Group、Version、Resource)
kubeconf文件kubeconf文件存储了集群、用户、命名空间和身份验证等信息。
clusters:集群信息
users:K8s机器用户的客户端凭证
contexts:定义K8s集群,用户信息和命名空间
读取ku ...
K8s-常见API Server响应说明
K8s-常见API Server响应说明
状态码
编码
描述
200
OK
请求完成成功
201
Created
创建类的请求完成成功
204
NoContent
请求完全成功,同时HTTP响应不包含响应体,在响应OPTIONS方法的HTTP请求时返回
307
TemporaryRedirect
请求资源地址改变,建议客户端使用Location首部给出的临时URL定位
400
Bad Request
非法请求
401
Unauthorized
表示请求能够到达服务端,并且服务端能理解用户的请求。需要认证
403
Forbidden
拒绝访问
404
NotFound
资源不存在
405
MethodNotAllowed
资源请求不支持这种方法
409
Conflict
资源已存在,冲击,更新操作不能完成
422
UnprocessableEntity
提交请求部分数据非法,创建或者修改失败
429
TooManyRequests
客户端出现了访问频率限制,或者服务端收到太多请求
500
InternalServerError
服 ...
K8s-client-go:源码结构
K8s-client-go:源码结构
目录结构
含义
.github
pull请求的模版
applyconfigurations
applyconfiguration提供了构造服务区应用请求的应用配置的类型安全的go
discovery
提供DiscoverClient发现客户端
dynamic
提供DynamicClient动态客户端
examples
包含client-go的各种用例和功能的演示
informers
每种K8s的各种资源的informer实现
kubernetes
提供ClientSet客户端
kubernetes_test
提供ClientSet客户端的测试
listers
为每一个K8s资源提供Listers功能,该功能对Get和List提供制度的缓存数据
metadata
包含关于client-go的元数据信息
pkg
客户端以及版本的包
plugin/pkg/client/auth
认证插件包auth
rest
提供RestClient客户端,对K8s API Serve ...
K8s-核心数据结构-scheme资源注册表
K8s-核心数据结构-scheme资源注册表所有的K8s资源类型都会注册到Scheme资源注册表中,有如下的特点:
支持多种资源类型,包括内部版本和外部版本
支持多种版本转换机制
支持不同资源的的序列化/反序列化
Scheme资源注册支持俩种类型,分别是UnversionedType和KnowType资源类型。
UnversionedType:无版本资源类型,这类资源对象不需要进行转换。目前比少
KnowType:目前K8s最常用资源类型,UnversionedType通过scheme.AddUnversionedTypes方法进行注册,Knowtype通过scheme.AddKnowType 进行注册
Scheme资源注册表结构字段说明如下:
gvToType:存储GVK与Type的映射关系
typeToGVK:存储type与GVK的映射关系,一个Type会对应一个或多个GVK
unversionedTypes:存储UnversionedType与GVK的映射关系
unversionedKind:存储kind名称和UnversionedType的映射关系
...
K8s-存储系统
K8s-存储系统Config MapapiVersion: v1kind: ConfigMapmetadata: name: game-demodata: # 类属性键;每一个键都映射到一个简单的值 player_initial_lives: "3" ui_properties_file_name: "user-interface.properties" # 类文件键 game.properties: | enemy.types=aliens,monsters player.maximum-lives=5 user-interface.properties: | color.good=purple color.bad=yellow allow.textmode=true---apiVersion: v1kind: Podmetadata: name: cm-test-appspec: containers: - name: cm-test-app image: kubeguide/t ...
K8s-DNS-CoreDNS
K8s-DNS-CoreDNS修改Node上的kubelet的DNS启动参数
–cluster-dns=169.169.10.10:DNS的CLusterIP地址
–cluster-domain=cluster.local:为DNS服务中设置的域名
CoreDNS的配置说明CoreDNS的主要功能是通过插件系统实现的。CoreDNS实现了一种 链式插件结构,将DNS的逻辑抽象成了一个个插件,能够灵活组合使 用。 常用的插件如下。
loadbalance:提供基于DNS的负载均衡功能。
loop:检测在DNS解析过程中出现的简单循环问题。
cache:提供前端缓存功能。
health:对Endpoint进行健康检查。
kubernetes:从Kubernetes中读取zone数据。
etcd:从etcd中读取zone数据,可用于自定义域名记录。
file:从RFC1035格式文件中读取zone数据。
hosts:使用/etc/hosts文件或者其他文件读取zone数据,可用于 自定义域名记录。
auto:从磁盘中自动加载区域文件。 ...
K8s-CNI网络模型
K8s-CNI网络模型背景跨主机容器间的网络互通已经成为基本要求,更 高的要求包括容器固定IP地址、一个容器多个IP地址、多个子网隔离、 ACL控制策略、与SDN集成等。所以提出了Container Network Interface(CNI)
CNM网络模型
主要组件功能:
Network Sandbox:容器内的网络栈,包括网络接口、路由表、DNS等配置
Endpoint:用于容器内的Sandbox与外部的网络相连。一个Endpoint只能加入一个Network
Network:可以直接互连的Endpoint的集合。可以通过Linux网 桥、VLAN等技术进行实现。一个Network包含多个Endpoint
CNI网络模型
在CNI模型中,只有俩个概念:容器和网络。
容器:拥有独立Linux网络命名空间的环境
网络:一组可以互连的一组实体,这些实体拥有各自独立、唯 一的IP地址,可以是容器、物理机或者其他网络设备(比如路由器) 等。可以将容器添加到一个或多个网络中,也可以从一个或多个网络中 删除。
对容器网络的设置和操作都通过插件(Plugin)进行具体实现, CNI插件包 ...
K8s-集群安装认证
K8s-集群安装认证API Server认证三大K8s API访问模式:
以Service Account方式访问K8s的内部服务进程
以匿名方式访问的进程
以证书方式访问的普通用户或进程,包括运维人员及kubectl、 kubelets等进程
K8s的用户认证方式:
HTTPS证书认证:基于CA根证书前面的双向数字证书认证方式
HTTP Bearer Token认证:通过一个Bearer Token识别合法用户
OpenID Connect Token第三方认证:通过第三方OIDC协议进行认证
Webhook Token认证:通过外部Webhook服务进行认证
Authenticating Proxy认证:通过认证代理程序进行认证
HTTPS证书认证这里需要有一个CA证书,CA是PKI系统中通信双方都信任的实 体,被称为可信第三方(Trusted Third Party,TTP)。CA作为可信第三 方的重要条件之一,就是其行为具有非否认性。作为第三方而不是简单 的上级,就必须让信任者有追究自己责任的能力。CA通过证书证实他 人的公钥信息,在证书上有CA的签名。如果用户因为信任 ...
K8s-使用swagger-ui可视化K8s API文档
使用swagger-ui可视化K8s API文档背景需要进行K8s API开发的时候,不方便查看
具体实现# 启动代理kubectl proxy --port=8080# 获取到swagger.jsoncurl localhost:8080/openapi/v2 > k8s-swagger.json# docker启动swaggerdocker run \ --rm \ -d \ -p 8087:8080 \ -e SWAGGER_JSON=/k8s-swagger.json \ -v $(pwd)/k8s-swagger.json:/k8s-swagger.json \ swaggerapi/swagger-ui # 通过http://ip:8087