- 博客(14)
- 收藏
- 关注
原创 API Gateway 技术漫谈
openresty 的 share_dict 就是放在共享内存中的红黑树,每次对它进行修改,就要涉及多个地方的改动(红黑树的操作比较复杂,涉及较多的代码),而如果在改动期间,恰好 worker 进程崩溃了,虽然 nginx 会捕获 SIGCHILD 信号,进行释放锁,但是父进程并不会对这些操作到一半的过程进行撤销恢复,导致数据处于一个诡异的状态。对于一家大型公司来说,它的流量可能会非常的庞大,那么它的数据面需要的节点数量可能会有几十上百个,这就导致控制面也相应的增加,从而对 k8s 产生一定的压力。
2024-03-28 17:20:54
773
1
原创 集群网络连通性校验工具-NetDoctor
Floater是一个客户端服务,它运行在每个节点上,一般是以镜像的形式发布,用户需要将这个镜像推送到自己的镜像仓库中,netctl在执行check命令时,会创建一个dameset,最终效果是在每个节点上启动一个floater服务。首先,挑选一个可以访问集群的节点作为我们运行netdoctor的节点,进一步讲,就是可以在这个节点上使用kubectl --kubeconfig=xxxx这个命令来访问集群资源,然后将netdoctor的可执行文件netctl上传至节点上。
2024-02-28 09:25:06
897
原创 RocketMQ基于Kosmos实现AZ级高可用
(2) Broker组件作为消息中转角色,负责存储消息,转发消息,采用Master/Slave部署模式,在两个可用区上交叉部署(如broker-a的Master部署在可用区1上,Slave节点部署在可用区2上,broker-b的Master部署在可用区2上,Slave节点部署在可用区1上),消息发送到Master节点后会实时同步到Slave节点,保证每个可用区保存了全量的消息。如图所示,我们首先通过kwok创建了20个大规模集群,每个集群包含5000个节点,我们将这些集群使用Kosmos进行纳管。
2024-02-01 14:10:52
895
1
原创 搞懂K8s的鉴权
其中主体就是K8s中的用户,包含了常规用户(User、Group,平时常用的kubectl命令都是普通用户执行的)和服务账户(ServiceAccount,主要用于集群进程与K8s的API通信)。我们发现,ABAC虽然对用户访问进行了一定的划分,但是如果添加了新的ABAC策略,则需要重启API Server以使其生效,资源的访问权限细粒度也只控制到了是否只读,当用户规模增大时,这是远远不能满足需求的。其他的匹配属性,主要描述被访问的访问,分为资源属性和非资源属性(其具体定义可参见官网)。
2024-01-26 13:52:22
922
1
原创 VelaUX的Plugin机制及实现原理
至此我们的Plugin页面已经渲染出来的。有时候我们会发现需要使用的接口VelaUX并没有提供,比如实现一个对集群的监控页面需要调用K8S本身的API接口,VelaUX本身的API是没有提供的,这时就需要借助VelaUX的Plugin机制。从下面代码中可以看到,加载plugin的过程就是:先从指定目录下遍历查找dist目录下的plugin.json文件并读取plugin.json中的内容,保存在foundPlugins变量中, 然后为找到的所有plugin创建的对应的plugin对象。
2024-01-10 16:44:34
886
原创 漫谈全链路灰度发布
Istio Sidecar 对微服务入口和出口流量拦截如上图所示,Sidecar 虽然能将入口流量1 拦截后转给微服务容器(入口流量2),也能将微服务容器出口流量 3 拦截并转发到 Pod 外(出口流量4),但 Sidecar 不知道出口流量 3 和入口流量 2 的对应关系,在实际情况中,Sidecar 会拦截很多的出口流量,也会拦截很多的入口流量,但 Sidecar 并不知道某一个出口流量对应哪个入口流量。基于 Agent 技术,可以在不修改业务代码的情况下,实现流量标识的拦截和传递。
2024-01-04 15:55:54
884
1
原创 Kosmos实战系列:有状态服务(MySQL)跨云灾备实战
对于第一点,一些常见的CNI如Calico、Flannel,我们已经完成了适配。关于IPsec规则的创建,部分代码我们借鉴了Flannel,有些区别的是Flannel部分借助了Strongswan(配置IPsec规则的开源工具)的能力,而我们在Kosmos中直接进行ip xfrm相关的操作,这样无需把Strongswan的二进制工具打到镜像内,可以减少镜像包的大小,但如果引入Strongswan可以更加容易的应对复杂的网络场景,后续我们会考虑引入以处理复杂的跨公网集群网络拓扑。
2023-12-26 10:15:16
916
2
原创 集群istio组件灰度升级
namespaceSelector 有明确的注入标签【istio-injection或istio.io/rev】且objectSelector没有明确的不注入的标签【sidecar.istio.io/inject】namespaceSelector 没有明确的不注入标签【istio-injection】且objectSelector有明确的注入的标签【sidecar.istio.io/inject或istio.io/rev】的istiod的地址连接对应的istiod,获取相关的配置。
2023-12-18 15:53:58
468
1
原创 Kosmos实战系列:MySQL Operator有状态服务的跨AZ集群平滑迁移
验证【场景四】主集群 cluster1(X.X.8.171)、子集群 cluster2(X.X.8.174)和子集群 cluster3(X.X.7.8)中 MySQL 集群的可用性,修改主集群 cluster1(X.X.8.171)中 service 为 NodePort 暴露访问。先在主集群 cluster1(X.X.8.171)中开启 Multi-Cluster Service(MCS)能力,再在子集群 cluster2(X.X.8.174)创建 ServiceImport 的 CR 并执行。
2023-12-14 16:37:32
101
1
原创 浅析 Kubernetes 容器镜像
容器技术是 Kubernetes 成功的基石之一,而容器镜像则是容器技术的核心概念之一,它将应用程序、运行时环境以及所有依赖项打包到一个独立的可执行单元中。镜像摘要唯一标识了镜像的特定版本,因此 Kubernetes 每次启动具有指定镜像名称和摘要的容器时,都会运行相同的代码。如果你有一个 Pod,它包含一个初始容器和一个应用容器,这两个容器的镜像拉取不会并行。本文将深入探讨 Kubernetes 中容器镜像的各个方面,从容器镜像的基本概念开始,一直到高级主题,如镜像拉取策略、安全性和最佳实践。
2023-12-06 16:52:47
58
1
原创 Kosmos实现无状态工作负载跨集群平滑扩展
本文针对移动云开源的Kosmos,通过其提供的命令行工具Kosmosctl,执行Kosmosctl相关命令,可以简单快速的部署好Kosmos服务。ClusterLink轻松实现多集群之间容器网络的连通,ClusterTree实现了应用运行在多集群上的能力。最终,快速实现将一个无状态工作负载部署到多K8s集群上。
2023-12-02 23:10:32
60
1
原创 Kosmos安装教程
正常来说,子集群是knode,会作为node显示在主集群中。只要主集群将pod分配到knode上,便会在子集群上创建pod,并同步pod状态信息至主集群。通过测试结果可以看出,其中一个pod启动到主集群节点my-k8s-cluster-1-control-plane,另外一个pod启动在本文第二步中clustertree join的knode集群kind-m节点上,实现多集群部署的能力。表示子集群kubeconfig在主集群的绝对路径(需要先将子集群kubeconfig上传至主集群对应目录下)。
2023-10-14 20:34:28
251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人