K8s-容器
K8s-容器镜像在 Kubernetes 的 Pod 中使用容器镜像之前,您必须将其推送到一个镜像仓库(或者使用仓库中已经有的容器镜像)。在 Kubernetes 的 Pod 定义中定义容器时,必须指定容器所使用的镜像,容器中的 image 字段支持与 docker 命令一样的语法,包括私有镜像仓库和标签。
例如:my-registry.example.com:5000/example/web-example:v1.0.1 由如下几个部分组成:
my-registry.example.com:5000/example/web-example:v1.0.1
my-registry.example.com:registry 地址
5000:registry 端口
example:repository 名字
web-example:image 名字
v1.0.1:image 标签
如果您使用 hub.dokcer.com Registry 中的镜像,可以省略 registry 地址和 registry 端口。例如:nginx:latest,eipwork/kuboar ...
K8s-节点
K8s-节点K8s的node(节点)是一个工作机器。每个节点都是归属master组件管理。
节点的状态
Addresses
Conditions
Capacity and Allocatable
Info
Addresses
HostName: 在节点命令行界面上执行 hostname 命令所获得的值。启动 kubelet 时,可以通过参数 --hostname-override 覆盖
ExternalIP:通常是节点的外部IP(可以从集群外访问的内网IP地址;上面的例子中,此字段为空)
InternalIP:通常是从节点内部可以访问的 IP 地址
ConditionsConditions 描述了节点的状态。
Condition的例子有:
Node Condition
描述
OutOfDisk
如果节点上的空白磁盘空间不够,不能够再添加新的节点时,该字段为 True,其他情况为 False
Ready
如果节点是健康的且已经就绪可以接受新的 Pod。则节点Ready字段为 True。False表明了该节点不健康,不能够接受新的 Pod。
MemoryPressu ...
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插件包 ...