0%

Istio 是一个完全开源的服务网格,以透明的方式构建在现有的分布式应用中。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。Istio 多样化的特性使你能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。

阅读全文 »

Service Mesh 是一个基础设施层,用于处理服务到服务间的网络通信。云原生应用有着复杂的服务拓扑,Service Mesh负责在这些网络拓扑中实现请求的可靠传递。在实践中,Service Mesh通常实现为一组轻量级的网络代理,它们与应用程序部署在一起,但是对应用保持透明

本文作为 「Service Mesh」系列开篇,将理清 Service Mesh 的前世今生,通过对其概念与原理的理解,开始上手 Service Mesh的工作。与此同时,我们也会讨论 Service Mesh 在业界当前的应用现状,探讨其落地的难点与痛点。

阅读全文 »

Ingress 是 Kubernetes 的一种 API 对象,将集群内部的 Service 通过 HTTP/HTTPS 方式暴露到集群外部,并通过规则定义 HTTP/HTTPS 的路由。Ingress 具备如下特性:集群外部可访问的 URL、负载均衡、SSL Termination、按域名路由。

阅读全文 »

Kubernetes 中的 Service 将一组 Pod 以统一的形式对外暴露成一个服务,它利用运行在内核空间的 iptables 或者 ipvs 高效地转发来自节点内部和外部的流量。作为非常重要的 Kubernetes 对象,Service 不仅在逻辑上提供了微服务的概念,还引入 LoadBalancer 类型的 Service 无缝对接云服务商提供的复杂资源。

阅读全文 »

Pod 是 Kubernetes 集群中能够被创建、调度和管理的最小部署单元,是一组容器的集合,是 k8s 中最简单的对象,也是 k8s 中最为基础的概念。同一个 Pod 中的容器可以共享同一个网络命名空间,IP地址和端口空间。从生命周期上来讲,Pod是短暂而不是长久的应用。Pod被调度到节点,保持在这个节点直到被摧毁。

本文将分两个部分对 Pod 解读,第一个部分介绍 Pod 的基本概念和常见特性,第二部分会从源码层面介绍 Pod 从创建到删除的整个生命周期的实现。

阅读全文 »

Controller Manager作为集群的管理控制中心,维护集群中的所有控制器,对维持集群的稳定和自我修复,实现高可用,副本控制等起关键作用。

阅读全文 »

ApiServer作为 Kubernetes 的核心组件,让集群中所有资源可被描述和配置,即包括了pod、ingress、pvc这些基础资源,也包括deployment、rc、hpa等管理对象;ApiServer就像是一个包含一定逻辑的对象数据库代理;提供了RESTful API接口,其他组件或客户端可以通过该接口获取集群中资源对象的配置和状态,以实现各种逻辑处理;ApiServer本身是无状态的,集群所有的数据都会存储在ETCD中,各个组件对于资源对象的List-Watch机制都要通过 ApiServer 的验证授权和准入。

kube-apiserver 是 kubernetes 中与 etcd 直接交互的一个组件,其控制着 kubernetes 中核心资源的变化。它主要提供了以下几个功能:

  • 提供 Kubernetes API,包括认证授权、数据校验以及集群状态变更等,供客户端及其他组件调用
  • 代理集群中的一些附加组件组件,如 Kubernetes UI、metrics-server、npd 等;
  • 允许对于对象状态的操作,比如Pod和Service的状态的改变,实现对象的持久化到Etcd
  • 资源在不同版本之间的转换
阅读全文 »

很久没有出去走走了,趁着夏天还没有结束,在封闭培训前去什刹海走了走,看到了生活的另一种可能。这里是「朝花夕拾」第二十二期,今天我们聊一聊生活。

阅读全文 »

包管理机制

Go 的包管理方式是逐渐演进的, 最初是 monorepo 模式,所有的包都放在 GOPATH 里面,使用类似命名空间的包路径区分包,不过这种包管理显然是有问题,由于包依赖可能会引入破坏性更新,生产环境和测试环境会出现运行不一致的问题。

从 v1.5 开始开始引入 vendor 包模式,如果项目目录下有 vendor 目录,那么 go 工具链会优先使用 vendor 内的包进行编译、测试等,这之后第三方的包管理思路都是通过这种方式来实现,比如说由社区维护准官方包管理工具 dep。

阅读全文 »

Go 语言作为一个原生支持用户态进程(Goroutine)的语言,当提到并发编程、多线程编程时,往往都离不开锁这一概念。锁是一种并发编程中的同步原语(Synchronization Primitives),它能保证多个 Goroutine 在访问同一片内存时不会出现竞争条件(Race condition)等问题。

本节会介绍 Go 语言中常见的同步原语 sync.Mutexsync.RWMutexsync.WaitGroupsync.Oncesync.Cond 以及扩展原语 errgroup.Groupsemaphore.Weightedsingleflight.Group 的实现原理,同时也会涉及互斥锁、信号量等并发编程中的常见概念。

阅读全文 »