现阶段实际往 Kubernetes 中迁移的 SpringCloud 项目大多数都是之前未使用 Kubernetes 的项目,项目比较依赖依赖注册中心 Eureka Server,SpringCloud 的服务都是依赖它进行服务的注册与获取服务地址,由于 Eureka 是作为基础组件使用,需要保证它的稳定性,所以决定用 StatefulSet 方式部署 Eureka,这里记录下这个过程。
Kubernetes 资源管理QoS、LimitRange和ResourceQuota
Kubernetes 集群是一群资源的集合,资源是有限的,当 Kubernetes 集群中计算资源不足时(如 Pod 占用资源过多),为了避免 Kubernetes 某个 Node 瘫痪,Kubernetes 会清理已经存在的资源,比如杀死 Pod 来完成资源释放。为了避免或降低由于资源不足时导致 Pod 被杀死这种情况发生导致的风险,Kubernetes 提供了资源限制的机制。这里介绍下 Kubernetes 下的资源范围限制对象 LimitRange 和资源配额对象 ResourceQuota 以及 Pod 的优先级 QoS。
Kubernetes 开发 SpringCloud (四)、Kubnernetes 部署 Zipkin 搭配 Kafka+ElasticSearch 实现链路追踪
微服务架构是通过业务来划分服务的,对外暴露的接口,可能需要很多个服务协同才能完成一个接口功能,如果链路上任何一个服务出现问题,都会形成导致接口调用失败。此时查找出现问题的微服务是很困难的。Spring Cloud Sleuth主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了zipkin。这里演示如何在 Kubernetes 下部署 Zipkin Server,并且创建 SpringCloud Sleuth 项目产生链路数据。
Kubernetes 开发 SpringCloud (二)、使用 SpringCloud Kubernetes 组件进行动态配置
Kubernetes 本身存在 ConfigMap 与 Secret 对象来存储配置,所以在 Kubernetes 部署 SpringCloud 的应用尝试不再采用统一配置中心管理配置,而是将配置文件存入 Kubernetes 的 ConfigMap 与 Secret 资源中,经过尝试这种做法确实可行。不过用这种方法还面临一个问题是直接存入 ConfigMap 或者 Secret 中如果配置发生变化,程序是无法感知到变化从而不会进行自动重启或刷新配置。由于上面问题,SpringCloud Kubernetes 提供了 spring-cloud-starter-kubernetes-config 组件来解决在 Kubernetes 环境中使用 ConfigMap 或 Secret 动态配置发现与更新问题,当存在 ConfigMap 中的配置或者存在 Secret 中的密码发生更改时候,在 Kubernetes 中的服务能及时监控到这一变化从而按照配置的配置更新策略进行动态更新或者服务重启。这里记录下这个组件的使用。
Kubernetes 开发 SpringCloud (一)、使用SpringCloud Kubernetes组件进行服务发现
这里主要介绍的是如何在 Kubernetes 中使用 SpringCloud 框架开发 Java 应用,在这个过程中主要使用的组件就是 SpringCloud Kubernetes 来完成服务发现、动态配置,利用 Feign 来进行服务间的通信等。里先简单介绍下 SpringCloud Kubernetes,它主要是提供了使用 Kubernetes 本地服务的 Spring Cloud 通用接口实现。目标是促进 Spring Cloud 和运行在 Kubernetes 中的 Spring Boot 应用程序的集成。
Kubernetes 部署 Kafka & Zookeeper & Kafka Manager
Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,由 Scala 和 Java 编写。它是一个分布式、支持分区的的、多副本,基于 zookeeper 协调的分布式消息系统。它最大特性是可以实时的处理大量数据以满足各种需求场景,比如基于 Hadoop 的批处理系统、低延时的实时系统、storm/Spark 流式处理引擎,web/nginx 日志,访问日志,消息服务等等。这里将演示如何在 Kubernetes 中部署 Kafka、Zookeeper、kafka-manager 几个应用实践。
