K8s-服务发现、负载均衡、网络
K8s-服务发现、负载均衡、网络ServiceService 是 Kubernetes 中的一种服务发现机制: Pod 有自己的 IP 地址 Service 被赋予一个唯一的 dns name Service 通过 label selector 选定一组 Pod Service 实现负载均衡,可将请求均衡分发到选定这一组 Pod 中 Service基础基本操作123456789101112apiVersion: v1kind: Servicemetadata: name: my-servicespec:# 管理的Pod的label selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 无label模式 123456789apiVersion: v1kind: Servicemetadata: name: my-servicespec: ports: - protocol: TCP port: 80 targetPo...
K8s-集群内的通信
K8s-集群内的通信Master-WorkNodeCluster to Master集群访问K8s Master,其实本质就是对于apiserver的通信(通信不是节点之间的通信,而是进程之间的通信) K8s安装K8s,apiserver默认是监听HTTPS端口(443),并且配置了客户端认证模式,提供授权模式.节点上必须配置集群(apiserver)的公钥根证书(public root certificate),此时,在提供有效的客户端身份认证的情况下,节点可以安全地访问 APIServer。 kubelet提供TLS认证过程 对于需要调用 APIServer 接口的 Pod,应该为其关联 Service Account,此时,Kubernetes将在创建Pod时自动为其注入公钥根证书(public root certificate)以及一个有效的 bearer token(放在HTTP请求头Authorization字段)。所有名称空间中,都默认配置了名为 kubernetes Kubernetes Service,该 Service对应一个虚拟 IP(默认为 10.9...
K8s-对象
K8s-对象对象的spec和status spec:操作员所期望的状态 status:实际上集群中的状态 必填字段在上述的 .yaml 文件中,如下字段是必须填写的: apiVersion 用来创建对象时所使用的Kubernetes API版本 kind 被创建对象的类型 metadata 用于唯一确定该对象的元数据:包括 name 和 namespace,如果 namespace 为空,则默认值为 default spec 描述您对该对象的期望状态 名称Kubernetes REST API 中,所有的对象都是通过 name 和 UID 唯一性确定。 Names可以通过 namespace + name 唯一性地确定一个 RESTFUL 对象,例如: 1/api/v1/namespaces/{namespace}/pods/{name} 同一个名称空间下,同一个类型的对象,可以通过 name 唯一性确定。如果删除该对象之后,可以再重新创建一个同名对象。 下面是三种广泛使用的资源名称的限制类型: DNS Subdomain Name...
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/kub...
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。 MemoryPre...
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 1234567891011121314type Interface interfa...
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集群,用户信息和命名空间 读...
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 InternalServerErro...
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 Se...
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的映射关...



