分类: 云原生

27 篇文章

thumbnail
K8s面试题
K8s 如何通过 kubeproxy 保证两个 Pod 之间的相互通信? kubeproxy 会监听 pod 的变化,在 node 上配置 iptables规则,将访问的 service ip,做 DNAT,转到 service 负载均衡的endpoint ip。但是 iptables 查找负载均衡的 endpoint 是 O(n)复杂度,当集群 …
thumbnail
在 K8S 节点上使用非 Nodeport 默认端口范围暴漏服务
需求背景 服务 A 部署在 K8S 中,集群外的服务 B 需要调用服务 A,同时调用服务 A 的端口是指定了的,必须是 5000,无法修改。 K8S 集群是客户的,我们只能部署服务,不能修改集群。 服务 A 需要得到真实的客户端 IP。 解决方案一 通过 Nodeport 的方式暴漏服务 A。 5000 端口不在 Nodeport 默认端口范围内(…
thumbnail
在 K8S 中利用 sidecar 控制 Pod 重启
需求一 A 容器负责授权管理,当用户更改了授权时,需要重启 B 容器生效。 解决方案 通过 sidecar 启动一个 http server,并提供两个接口,接口一用于 K8S 的存活探针;接口二用于接收重启信号,供容器 A 调用。当收到重启信号时,修改接口一返回值,使其返回 500 http code,从而让 K8S 重启 Pod 内容器。 方案…
thumbnail
Pod里的容器如何设置IP?
背景 最近遇到一个docker compose部署的产品(旧版本)想部署到k8s中,而该产品应用的多个容器都在docker compose中设置了ip地址,镜像里的应用配置也是配置的这些预设ip,容器之间通过预设IP进行通信。 但是该产品的云化已经在最新版本中完成,并做了大量修改。现在希望对那个旧版本以最小成本部署到k8s中就行,也就是不想动产品应…
thumbnail
使用Kubebuilder实现自定义Controller
背景 还是之前的需求,上一篇文章:Operator示例:通过Operator+CRD实现部署自动化是基于官方的sample-controller来修改,实现我们的逻辑。这次使用kubebuilder来生成代码。 主要步骤 使用kubebuilder生成项目代码 定义 CRD 的 struct 重新生成CRD资源 实现Reconcile逻辑 部署CR…
thumbnail
Operator示例:通过Operator+CRD实现部署自动化
前言 在上一篇通过Operator自动暴露集群内部服务中,遗留了一个问题:开发人员or业务上游是需要关注k8s内建资源,例如deployment如何定义,这和K8S自动化的目标背道而驰。 本篇文章将采用CRD(CustomResourceDefinition)来屏蔽底层K8S资源,让开发人员只需要按照我们制定的规则来定义CR即可。至于创建deplo…
thumbnail
通过Operator自动暴露集群内部服务
需求背景 运维团队希望管控部署在k8s集群里对外暴露的服务,开发团队无需关心服务如何暴露给用户。 红色部分 开发团队创建应用的manifests,开发团队可以为Service:资源添加annotation为ingress/http:true来决定终端用户是否可以访问到该服务,默认不能访问到。至于具体如何让用户可以访问到服务,开发团队不需要关心。 绿…
thumbnail
【笔记】Operator课程(7-9)
client-go 架构图 Indexer原理 Indexer缓存k8s资源对象,并提供便捷的方式查询。例如获取某个namespace下的所有资源 indexer接口继承了store接口,所以indexer的实现类也是store的实现类。add方法被调用的地方和store一样,是reflector调用的。 type Indexer interfac…
thumbnail
【笔记】Operator课程(1-6)
白丁云原生:k8s编程-operator篇【已完结】 clientgo架构 以前以为client-go只是通过restclient去调用api server,其实不然,它还具备controller的逻辑,以实现更强大的k8s操作。 RESTClient原理 创建了所有版本的client,例如corev1,体现k8s向后兼容,只要正式版发布的接口不会…
thumbnail
Gitlab CI/CD 实践五:基础镜像 Dockerfile 仓库 CI 流水线配置
基础镜像Dockerfile集中管理 完整代码:https://github.com/EchoGroot/dockerfile 优点 结合Gitlab CI,可以快速便捷地新建和更新镜像。 可以快速找到镜像对应的 Dockerfile,明确镜像的具体组成,避免重复造轮子。 基于Dockerfile,方便对镜像进行扩展。 如何使用 创建、修改Dock…