北凉山

个人技术笔记,关于系统架构设计、云原生、Kubernetes、Golang等

Kubernetes 多集群管理

多集群背景与内容 为何需要多集群: 单个集群节点数量有限 研发流程上不同用途 可用性要求多云、多地、多中心 企业采购或成本方面要求需要使用多家供应商 等等 Kubernetes多集群管理主要解决三类问题: 多Kubernetes集群管理 多集群中workload管理 多集群中Service通信 多集群开源项目 KubeFed v2 Cluster...

Service Mesh 技术与 istio 架构简介

Service Mesh 是什么 服务网格(ServiceMesh)是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。 典型的服务网格是在每台节点上同时运行着业务逻辑和代理,这个代理被形象地称为 Sidecar。服务之间通过 S...

Kubernetes CNI 实现原理

CNI是什么 Container Nerwork Interface,由一组用于配置 Linux 容器的网络接口的规范和库组成,同时还包含了一些插件。 CNI插件可以分为下面三类(可见官方库https://github.com/containernetworking/plugins): Main插件:用来创建具体的网络设备的二进制文件,包括: bridge:在宿主机上创建网桥然后通...

Rust 语言初次浅尝

Rust简介 Rust 致力于成为优雅解决高并发和高安全性系统问题的编程语言,支持函数式和命令式以及泛型等编程范式,适用于大型场景,即创造维护能够保持大型系统完整的边界。这就导致了它强调安全,内存布局控制和并发的特点。在性能上,标准Rust性能与标准C++性能不相上下。 安装 Linux 下可在终端输入如下命令安装: $ curl --proto '=https' --tlsv1.2 h...

Kubernetes Scheduler 扩展开发

Kubernetes Scheduler是什么 在 Kubernetes 中,调度是指将 Pod 放置到合适的节点上,以便对应节点上的 Kubelet 能够运行这些 Pod。 调度器通过 Kubernetes 的监测(Watch)机制来发现集群中新创建且尚未被调度到节点上的 Pod,Kube-scheduler 会根据调度策略选择一个最佳节点来调度该Pod。 由于 Pod 中的容器和 Po...

使用 kubebuilder 开发 Kubernetes Operator

Operator 是什么 Kubernetes Operator 是一种特定于应用的控制器,可扩展 Kubernetes API 的功能,来代表 Kubernetes 用户创建、配置和管理复杂应用的实例。 它基于基本 Kubernetes 资源和控制器概念构建,但又涵盖了特定于域或应用的知识,用于实现其所管理软件的整个生命周期的自动化。 Kubernetes Operator 通过自定义...

Kubernetes Controller 工作机制

Controller 原理 在 Kubernetes 中,用户通过 声明式 API 定义资源的 “预期状态”,Controller 则负责监视资源的实际状态,当资源的实际状态和“预期状态”不一致时,Controller 则对系统进行必要的更改,以确保两者一致,这个过程被称之为 调谐(Reconcile)。 K8s的 Controller Manager 包含多种类型的 Controller...

eBPF 技术简介与实践

基础概念 内核虚拟机技术,通过sys_bpf加载到内核中,绑定到事件执行 访问内核数据结构和API,如网络数据包、系统调用、内核跟踪点,对数据进行过滤、修改、分析 安全性和可验证性,可通过Verifier进行严格检查 技术原理和实现 字节码,JIT编译器优化,转化为机器码 指令集是虚拟机的执行单元,并提供辅助函数来完成内存访问、系统调用和跟踪等 传统虚拟机提供...

一个单点登录系统设计

最近半年设计开发了一个单点登录系统(TnSSO),这是一个很常见的系统,但我们在功能与体验上有很多深入精细的探究,这里总结记录一下。下文中SSO也指代本系统。 TnSSO为PC版和移动版各提供多种登录方式,有常规的邮箱账号或手机号登录,有使用新浪、QQ等账号的联合登录,也有使用手机动态口令登录,另外还针对不同平台也各提供了一些特色登录方式来提升用户体验,比如微信中打开公司的分享链接可以使用...

使用一致性哈希实现Redis分布式缓存

背景前言 补充说明:本文行文时Redis尚不支持集群。 像Memcache以及其它一些内存K/V数据库一样,Redis本身不提供分布式支持,所以在部署多台Redis服务器时,就需要解决如何把数据分散到各个服务器的问题,并且在服务器数量变化时,能做到最大程度的不令数据重新分布。 通常使用的分布式方法是根据所要存储数据的键的hash值与服务器数量N,按 hash % N 取模的算法来将数据分...