K8s-kubectl(变更对比策略和拓展命令)
K8s-kubectl(变更对比策略和拓展命令) 基于1.25 什么是变更对比策略 kuebctl apply 通过JSON/YAML,标准输入输出获取K8s集群进行配置更新 Kubectl edit 实时编辑K8s资源对象 kubectl patch 提供更新资源对象 kubectl diff 本地文件和实时资源对比 所以存在了不同的对比策略场景: 变更对比逻辑在哪进行(服务端还是客户端) 针对什么资源对象可以进行变更对象 使用说明变更对比算法 服务端应用和客户端应用服务端应用通过声明式的方法,kuebctl 发送完整的对象描述去创建和更新对象。 kubectl提供了俩个命令参数实现支持服务端: server-side:服务端应用的开关,当设置为true时,开启并使用服务端应用 force-conflicts:冲突解决策略,当设置为true;会强制应用变更 kubectl apply 和kubectl diff 都支持启用服务端应用 kubectl patch 值提供服务端应用的变更方式 客户端应用与服务端不同,客户端在处理变更和冲突逻辑之后...
K8s-kubectl(缓存机制)
K8s-kubectl(缓存机制) 基于1.25 kubectl的关键步骤是构造操作/查询资源的请求 kubectl为了减小kube-apiserver的压力,使用Client-go中的CacheDisoveryClient提供的本地磁盘能力。 缓存数据结构kubectl使用servergroups.json文件缓存从kube-apiserver获取所有的资源信息 缓存文件存在$KUBECACHEDIR/disocvery中 没有设置环境变量KUBECACHEDIR,默认位置$HOME/.kube/cache 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108...
K8s-kubectl(执行流程)
K8s-kubectl(执行流程) 基于1.25 什么是kubectlkubectl是kube-apiserver的客户端,通过向kube-apiserver发送HTTP请求,实现对K8s集群的控制 初始化命令对象kubectl使用NewCmdXX 进行初始化,主要有俩类对象: cobra.Command:提供命令对象 XXXoptions:Options命令参数对象 补全命令参数支持补全成命令执行的相关工具类,形成完整的Options,主要工具包含三种 Genericclioptions.Recorder:用于记录资源对象发生变化的原因,对于由kubectl触发的变更,genericclioptions.Recoder会将完整的命令记录到资源对象的kubernetes.io/change-cause注解中 resource.QueryParamVerifier:用于检查资源对象是否支持DryRun和资源对象娇艳 options.ToPrinter/options.PrintObj:打印相关函数,用于获取命令执行结果之后,执行结果打印到终端 校验命令...
K8s-client-go(常用工具类:事件管理机制+Leader选举机制)
K8s-client-go(常用工具类:事件管理机制+Leader选举机制) 基于1.25 事件管理机制Event是一种对象资源,展示集群中发生的事件,包含调度器的操作、Pod为什么被驱逐 存储在kube-apiserver的Pod中,有强制保留策略,在最后一次事件发生之后,删除一个小时之前的事件 Ref:https://github.com/kubernetes/api/blob/f7b7ea4f0fcc6cb8c8dd42eb46a94c7e163d1b9d/core/v1/types.go#L5776 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162type Event struct { // metav1.TypeMeta 嵌入类型,包含 APIVersion 和 Kind 字段,用于标识对象的 API 版本和类型 metav1.TypeMeta `...
K8s-client-go(Informer机制)
K8s-client-go(Informer机制) 基于1.25 什么是InformerInformer实现了组件之间使用HTTP通信,但是不依赖任何中间件的情况下,实现了保证消息的实时性、可靠性、顺序性等 使用示例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990package mainimport ( "flag" "fmt" "path/filepath" "time" v1 "k8s.io/api/apps/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/informers" &quo...
K8s-client-go
K8s-client-go什么是Client-goClient-go是K8s提供的调用K8s对西那个的客户端,实现了访问kube-apiserver,对K8s集群中的资源对象管理 Link:https://github.com/kubernetes/client-go 客户端client-go支持Client Set、DynamicClient、Discovery Client、RESTClient四种 RESTClient是最基础的客户端,对HTTP请求进行了封装 ClientSet对在RESTClient基础上,封装了Resource和Version的管理方法 ClientSet只能处理K8s内置资源 通过client-gen代码生成器生成 DynamicClient:DynamicClient可以处理所有的资源,包括CRD DiscoveryClient:用于发现kube-apisever所支持的Group、Versions、Resources kuebconfig配置管理kubeconfig就是管理访问kube-apiserver的配置信息,支持管理访问多个k...
K8s核心资源对象-CRD
K8s核心资源对象-CRD 基于1.25 什么是CRDK8s的拓展主要通过几类实现: 客户端拓展:实现kubectl插件 API拓展:包含使用CRD API访问拓展:在请求到达kube-apiserver之前,经过的认证、授权、动态准入都可以拓展 基础设施拓展:设备拓展啊发现新的节点资源、存储插件、网络插件 最广泛使用的目前还是从1.7版本出现的CRD,属于资源组apiextension.k8s.io Ref:https://github.com/kubernetes/apiextensions-apiserver/blob/cb213f096359711547f69316aeac67982b626b07/pkg/apis/apiextensions/v1/types.go#L390 1234567891011121314151617181920// +genclient// +genclient:nonNamespaced// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object// +...
K8s核心资源对象-配置和存储资源
K8s核心资源对象-配置和存储资源 基于1.25 卷什么是卷容器中的文件在磁盘上是临时存放,Pod重启数据可能就会消息,卷就是为了实现持久化而出现 卷的类型emptyDir卷当Pod被分配到某个节点上的时候,emptyDir卷会被创建 Pod在节点运行中,emptyDir卷一直存在 emptyDir卷最初是空的 emptyDir卷在Pod在该节点被删除之后,也会消失 hostPath卷能把主机节点系统上的文件目录挂载到Pod configMap卷提供向Pod注入ConfigMap的方法 ConfigMap对象中存储的数据可以被ConfigMap卷引用,之后被Pod中运行的容器化应用使用 downwardAPI卷为应用服务器提供DownwardAPI数据 允许容器在不使用K8s客户端的情况下,获得到自己或者集群的信息 secret卷用来给Pod传递一些敏感的信息 可以通过文件的形式挂到Pod中 nfs卷把NFS挂到Pod中 nfs数据不会随着Pod消减,而消减 cephfs卷允许把现存的cephfs卷挂载到Pod中 cephfs卷数据不随着Pod消减,而消减...
K8s发现和负载均衡-NetworkPolicy
K8s发现和负载均衡-NetworkPolicy 基于1.25 什么是NetworkPolicyK8s的网络模型和各种网络方法关心是容器之间的联通,而NetworkPolicy负责网络隔离 NetworkPolicy网络隔离,在多租户和安全性要求比较高的情况下使用 NetworkPolicy使用在一端或者俩端于Pod的连接 NetworkPolicy的作用范围:Pod、命名空间、Ingress、Egress流量等 NetworkPolicy作为在L3/4层,目的是限制IP地址和端口的访问,如果需要对应用层访问限制,需要使用Istio这类的Service Mesh NetworkPolicy对象 需要NetworkPolicy控制器才能生效 Pod的隔离类型Pod有俩种隔离类型:出口隔离和入口隔离 默认情况下,没有出口隔离 通过设置NetworkPolicy在PolicyType设置为Egress,进行出口隔离 默认情况下,没有入口隔离 通过设置NetworkPolicy在PolicyType设置为Igress,进行入口隔离 网络策略是相加的 Netwo...
K8s发现和负载均衡-Endpoints和EndpointSlice
K8s发现和负载均衡-Endpoints和EndpointSlice 基于1.25 什么是EndPointsEndPoints定义了网络端点的列表 K8s限制单个EndPoints对象容纳的端点数量 Endpoints字段 Ref:https://github.com/kubernetes/api/blob/f7b7ea4f0fcc6cb8c8dd42eb46a94c7e163d1b9d/core/v1/types.go#L4768 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960// Endpoints is a collection of endpoints that implement the actual service. Example://// Name: "mysvc",// Subsets: [// {// Addresses: [...


