Kubernetes 设计模式

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

14,000 个提交和 400 个贡献者(包括 我的一个小提交 !)是构建 Kubernetes 1.0 的基础。 现在可用

本博客讨论了一些 Kubernetes 设计模式。下面讨论的设计模式的所有源代码都可以在 kubernetes-java-sample 中找到。

Kubernetes 的关键概念

在一个非常高的层次上,有三个关键概念:

  • Pod 是可以创建、调度和管理的最小可部署单元。它是属于应用程序的容器的逻辑集合。
  • Master 是提供集群统一视图的中央控制点。有一个主节点控制多个 minions。
  • 节点 是一个工作节点,它运行由主节点委派的任务。 Minion 可以运行一个或多个 pod。它在容器化环境中提供特定于应用程序的“虚拟主机”。

其他一些需要注意的概念:

  • Replication Controller 是 Master 的一种资源,可确保请求数量的 Pod 始终在节点上运行。
  • Service 是 master 上的一个对象,它在一组复制的 pod 之间提供负载平衡。
  • 标签 是复制控制器用于服务发现的分布式可监视存储中的任意键/值对。

启动 Kubernetes 集群

  1. 在 Mac OS 上启动 Kubernetes 集群的最简单方法是使用 Vagrant
    
     export KUBERNETES_PROVIDER=vagrant
    curl -sS https://get.k8s.io | bash
    
  2. 或者,可以从 github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.0.0/kubernetes.tar.gz 下载 Kubernetes,集群可以启动为:
    
     export KUBERNETES_PROVIDER=vagrant
    curl -sS https://get.k8s.io | bash
    

一个容器一个容器

本节将解释如何使用一个 Container 启动一个 Pod。 WildFly 基础 Docker 镜像将用作容器。

Pod、Replication Controller、Service等都是Kubernetes中的资源。它们可以通过配置文件使用 kubectl 创建。

本例中的配置文件:


 export KUBERNETES_PROVIDER=vagrant
curl -sS https://get.k8s.io | bash

有关如何创建 Pod 的完整详细信息,请访问 github.com/arun-gupta/kubernetes-java-sample#a-pod-with-one-container

使用一个容器部署在一个 Pod 中的 Java EE 应用程序

本节将展示如何在具有一个容器的 Pod 中部署 Java EE 应用程序。带有内存 H2 数据库的 WildFly 将用作容器。

配置文件是:


 export KUBERNETES_PROVIDER=vagrant
curl -sS https://get.k8s.io | bash

完整的详细信息,请访问 github.com/arun-gupta/kubernetes-java-sample#java-ee-application-deployed-in-a-pod-with-one-container-wildfly–h2-in-memory-database

具有 Pod 的两个副本的 Replication Controller

本节将解释如何使用 Pod 的两个副本启动 Replication Controller 。每个 Pod 将有一个 WildFly 容器。

配置文件是:


 export KUBERNETES_PROVIDER=vagrant
curl -sS https://get.k8s.io | bash

完整的细节在 github.com/arun-gupta/kubernetes-java-sample#a-replication-controller-with-two-replicas-of-a-pod-wildfly

重新安排 Pod

Replication Controller 确保指定数量的 pod“副本”在任何时候都在运行。如果太多,复制控制器会杀死一些 pod。如果太少,它会开始更多。

完整的详细信息,请访问 github.com/arun-gupta/kubernetes-java-sample#rescheduling-pods

缩放 Pod

Replication Controller 允许动态扩展和缩小 Pod。

完整的详细信息,请访问 github.com/arun-gupta/kubernetes-java-sample#scaling-pods

Kubernetes 服务

Pod 是短暂的。不能依赖分配给 Pod 的 IP 地址。 Kubernetes,特别是 Replication Controller,动态创建和销毁 Pod。 消费者 Pod 不能依赖 生产者 Pod 的 IP 地址。

Kubernetes Service 是一种抽象,它定义了一组逻辑 Pod。 Service 的目标 Pod 集由与 Pod 关联的标签确定。

本节将展示如何在单独的 Pod 中运行 WildFly 和 MySQL 容器。 WildFly Pod 将使用服务与 MySQL Pod 对话。

完整的详细信息,请访问 github.com/arun-gupta/kubernetes-java-sample#kubernetes-service

以下是一些可以帮助您入门的博客:

完整的 Kubernetes 博客条目 集提供了更多详细信息。