CloudNative 架构

CloudNative|云原生应用架构|云原生架构|容器化架构|微服务架构|平台架构|基础架构


  • 首页

  • 标签

  • 分类

  • 归档

  • k8s离线安装包

  • 搜索

多集群kubernetes dashboard 通过ldap统一登录与授权

发表于 2020-06-12 | 分类于 kubrenetes , ldap , rbac | | 热度: ℃
字数统计: 1,854 字 | 阅读时长 ≈ 9 分钟

logo.png

工具由来

为什么要写这样的一个工具呢?这是因为我司有多个 kubernetes 集群(8+),且都是云托管服务无法接触到Apiserver配置,这就给我们带来一个痛点,开发、sre需要登录k8s dashbaord且不同部门和角色间需要不同的授权,原先都是通过 sa token 进行登录dashboard,但随着k8s集群的增长,每增加一个集群,就需要告知使用方对应dashboard访问地址以及对应的token,这不管是提供方还是使用方都让人感觉非常的痛苦。那是否有一款工具能提供统一地址统一登录多集群dashboard的方案呢?经过一番搜索后,发现并没有,市面上大多数是单集群集成 LDAP 的方案,主要是以 DEX 为主,但光单集群的统一登录授权方案就让人感觉非常的困难。难道就没有简单方便的工具供我们使用吗?好吧,那我就来打造这样一款工具吧。

Dashboard LDAP集成方案:

  • https://k2r2bai.com/2019/09/29/ironman2020/day14/
  • https://blog.inkubate.io/access-your-kubernetes-cluster-with-your-active-directory-credentials

以上两篇文档是成LDAP的方案,个人感觉还不错,供有需要的人参考!

阅读全文 »

自定义 Kubernetes 调度器

发表于 2020-06-08 | 分类于 kubrenetes , 调度器 | | 热度: ℃
字数统计: 9,413 字 | 阅读时长 ≈ 42 分钟

简介

kube-scheduler 是 kubernetes 的核心组件之一,主要负责整个集群资源的调度功能,根据特定的调度算法和策略,将 Pod 调度到最优的工作节点上面去,从而更加合理、更加充分的利用集群的资源,这也是我们选择使用 kubernetes 一个非常重要的理由。如果一门新的技术不能帮助企业节约成本、提供效率,我相信是很难推进的。

调度流程

默认情况下,kube-scheduler 提供的默认调度器能够满足我们绝大多数的要求,我们前面和大家接触的示例也基本上用的默认的策略,都可以保证我们的 Pod 可以被分配到资源充足的节点上运行。但是在实际的线上项目中,可能我们自己会比 kubernetes 更加了解我们自己的应用,比如我们希望一个 Pod 只能运行在特定的几个节点上,或者这几个节点只能用来运行特定类型的应用,这就需要我们的调度器能够可控。

kube-scheduler 的主要作用就是根据特定的调度算法和调度策略将 Pod 调度到合适的 Node 节点上去,是一个独立的二进制程序,启动之后会一直监听 API Server,获取到 PodSpec.NodeName 为空的 Pod,对每个 Pod 都会创建一个 binding。
kube-scheduler-overview

阅读全文 »

k8s v1.17 新增拓扑感知服务路由

发表于 2020-05-22 | 分类于 kubrenetes , 新特性 | | 热度: ℃
字数统计: 2,327 字 | 阅读时长 ≈ 9 分钟

名词解释

  • 拓扑域: 表示在集群中的某一类 “地方”,比如某节点、某机架、某可用区或某地域等,这些都可以作为某种拓扑域。
  • endpoint: k8s 某个服务的某个 ip+port,通常是 pod 的 ip+port。
  • service: k8s 的 service 资源(服务),关联一组 endpoint ,访问 service 会被转发到关联的某个 endpoint 上。

背景

拓扑感知服务路由,此特性最初由杜军大佬提出并设计。为什么要设计此特性呢?想象一下,k8s 集群节点分布在不同的地方,service 对应的 endpoints 分布在不同节点,传统转发策略会对所有 endpoint 做负载均衡,通常会等概率转发,当访问 service 时,流量就可能被分散打到这些不同的地方。虽然 service 转发做了负载均衡,但如果 endpoint 距离比较远,流量转发过去网络时延就相对比较高,会影响网络性能,在某些情况下甚至还可能会付出额外的流量费用。要是如能实现 service 就近转发 endpoint,是不是就可以实现降低网络时延,提升网络性能了呢?是的!这也正是该特性所提出的目的和意义。

阅读全文 »

使用NodeLocal DNSCache来提升CoreDNS的性能及压力

发表于 2020-05-22 | 分类于 kubrenetes , coredns | | 热度: ℃
字数统计: 1,966 字 | 阅读时长 ≈ 9 分钟

概况

之前在解决 CoreDNS 的5秒超时问题的时候,除了通过 dnsConfig 去强制使用 tcp 方式解析之外,我们提到过使用 NodeLocal DNSCache 来解决这个问题。NodeLocal DNSCache 通过在集群节点上运行一个 DaemonSet 来提高 clusterDNS 性能和可靠性。处于 ClusterFirst 的 DNS 模式下的 Pod 可以连接到 kube-dns 的 serviceIP 进行 DNS 查询。通过 kube-proxy 组件添加的 iptables 规则将其转换为 CoreDNS 端点。通过在每个集群节点上运行 DNS 缓存,NodeLocal DNSCache 可以缩短 DNS 查找的延迟时间、使 DNS 查找时间更加一致,以及减少发送到 kube-dns 的 DNS 查询次数。

在集群中运行 NodeLocal DNSCache 有如下几个好处:

  • 如果本地没有 CoreDNS 实例,则具有最高 DNS QPS 的 Pod 可能必须到另一个节点进行解析,使用 NodeLocal DNSCache 后,拥有本地缓存将有助于改善延迟
  • 跳过 iptables DNAT 和连接跟踪将有助于减少 conntrack 竞争并避免 UDP DNS 条目填满 conntrack 表(常见的5s超时问题就是这个原因造成的)
  • 从本地缓存代理到 kube-dns 服务的连接可以升级到 TCP,TCP conntrack 条目将在连接关闭时被删除,而 UDP 条目必须超时(默认 nf_conntrack_udp_timeout 是 30 秒)
  • 将 DNS 查询从 UDP 升级到 TCP 将减少归因于丢弃的 UDP 数据包和 DNS 超时的尾部等待时间,通常长达 30 秒(3 次重试+ 10 秒超时)
阅读全文 »

Go 性能优化实战

发表于 2020-05-18 | 分类于 golang , 性能 | | 热度: ℃
字数统计: 6,266 字 | 阅读时长 ≈ 26 分钟

项目背景

网关服务作为统一接入服务,是大部分服务的统一入口。为了避免成功瓶颈,需要对其进行尽可能地优化。因此,特别总结一下 golang 后台服务性能优化的方式,并对网关服务进行优化。

技术背景:

  • 基于 tarsgo 框架的 http 接入服务,下游服务使用 tarsgo 协议进行交互

性能指标

网关服务本身没有业务逻辑处理,仅作为统一入口进行请求转发,因此我们主要关注下列指标

  • 吞吐量:每秒钟可以处理的请求数
  • 响应时间:从客户端发出请求,到收到回包的总耗时

定位瓶颈

一般后台服务的瓶颈主要为 CPU,内存,IO 操作中的一个或多个。若这三者的负载都不高,但系统吞吐量低,基本就是代码逻辑出问题了。

在代码正常运行的情况下,我们要针对某个方面的高负载进行优化,才能提高系统的性能。golang 可通过 benchmark 加 pprof 来定位具体的性能瓶颈。

阅读全文 »
1…8910…22
icyboy

icyboy

109 日志
98 分类
182 标签
RSS
GitHub 微博 知乎
友情链接
  • 张家港水蜜桃
  • 运维开发
  • DevOps
© 2016 — 2021 icyboy | Site words total count: 330.8k
本站访客数:
博客全站共330.8k字