基于OpenVPN建立局域网
基于OpenVPN建立局域网搭建Server安装依赖1234// curl 下载centos7依赖// curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum updateyum install epel-release 官方一键安装123456789101112131415wget https://raw.githubusercontent.com/Angristan/openvpn-install/master/openvpn-install.shsudo chmod +x openvpn-install.shsudo ./openvpn-install.shsystemctl start openvpn@serversystemctl status openvpn@servervim /etc/openvpn/server.conf // 监听网卡tcpdump -i tun0 选择绑定公网IP 选择协议UDP/TCP,记得打开对应端...
K8s-kube-apiserver(启动流程)
K8s-kube-apiserver(启动流程) 基于1.25 APIServer启动流程: Schema资源注册 Cobra命令桉树解析 创建API Server通用配置 创建API EXtensionsServer 创建KubeAPIServer 创建AggregatorServer GenericAPIServer初始化 准备和启动HTTPS服务 Scheme资源注册使用Scheme所有资源注册到APIServer中 Scheme资源注册不算使用显式代码触发,通过init注册。 初始化Scheme资源注册表 Ref:https://github.com/kubernetes/kubernetes/blob/88e994f6bf8fc88114c5b733e09afea339bea66d/pkg/api/legacyscheme/scheme.go#L24 1234567891011121314151617var ( // Scheme is the default instance of runtime.Scheme to which types in the Ku...
K8s-kube-apiserver(Overview)
K8s-kube-apiserver(Overview) 基于1.25 什么是Kube-apiserverkube-apiserver是K8s控制面的组件之一 主要提供集群管理的RESTAPI接口,包括认证授权、数据校验、配置变更 只有kube-apiserver才能直接操作etcd集群中的数据 Pod创建的关键流程: 用户通过客户端向kube-apiserver发起Pod请求 kube-apiserver验证请求的有效性,并将其持久化保存到etcd集群 kube- schedule基于Watch机制感知到新Pod创建的事件 kube- schedule执行调度算法 kube-apiserver验证Bind请求,将结果持久化道etcd集群 kubelet基于Watch机制感知到Pod完成绑定事件 kubelet对应节点的容器运行时交互,启动容器,并向kube-apiserver上报Pod的运行状态 kube-apiserver将Pod的最新状态持久化到etcd集群 用户通过客户端向kube-apiserver发起Pod查询请求 网络通信框架kube-apiserver...
K8s-etcd核心存储实现
K8s-etcd核心存储实现 基于1.25 什么是Etcdetcd是K8s默认的数据持久化端存储,主要用于保存集群配置和状态 etcd是分布式键值存储集群 基于Raft协议提供可靠强一致性数据存取服务 架构设计REST Storage genericregistory.Storegenericregistory.Store封装了资源对象的CRUD操作,并且支持资源版本ResourceVersion的冲突检查 在存储资源对象前执行Beofre Func,存储资源对象后执行(After Func),以及处理DryRun storage.Interface底层通用存储接口,定义了资源的操作方法,Create|Delete|Watch|Get|Count|GETList|GuranteedUpdate|Versioner cachestorage.Cacher为了减轻etcd读取压力和提供了Cache,可以通过设置kube-apiserver的–watch-cache启动或者关闭Cacher,默认开启 Underlying Storage后端存储,默认K8s使用etcd3,使用...
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...


