谷歌Kubernetes引擎部署|点燃文档

点燃2023年峰会-按需观看-立即注册!

编辑

谷歌Kubernetes引擎部署

本页介绍如何在GoogleKubernetes引擎上部署Ignite集群。

我们将考虑两种部署模式:有状态和无状态。无状态部署适用于内存中的使用情况,其中集群将应用程序数据保存在RAM中以获得更好的性能。有状态部署与无状态部署的不同之处在于,它包括为集群的存储设置持久卷。

注意安全
本指南重点介绍如何在Kubernetes上部署服务器节点。如果您希望在其他地方部署集群时在Kubernetes上运行客户端节点,则需要启用为在NAT后面运行的客户端节点设计的通信模式。请参阅本节.
注意安全
本指南使用库贝特尔版本1.17。

创建GKE集群

GKE中的集群是为集群中部署的应用程序提供资源的一组节点。您必须为您的用例创建一个具有足够资源(CPU、RAM和存储)的GKE集群。

创建集群的最简单方法是使用g云命令行工具:

$gcloud容器集群创建my-cluster--分区us-west1...正在us-west1中创建集群my-cluster…正在对集群进行健康检查(master状态良好)。。。完成。已创建[https://container.googleapis.com/v1/projects/gmc-development/zones/us-west1/clusters/my-cluster].要检查群集的内容,请转到:https://console.cloud.google.com/kubernetes/workload_/gcloud/us-west1/my-cluster?project=my-项目为my-cluster生成了kubeconfig条目。名称位置MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUSmy-cluster us-west1 1.14.10-gke.27 35.230.126.102 n1-标准-1 1.14.10-g ke.27 9运行

验证您的库贝特尔配置正确:

$kubectl获取节点姓名状态角色年龄版本gke-my-cluster-default-pool-6e9f3e45-8k0w Ready<none>73s v1.14.10-gke.27gke-my-cluster-default-pool-6e9f3e45-b7lb就绪<none>72s v1.14-10-gke.27gke-my-cluster-default-pool-6e9f3e45-cmzc Ready<none>74s v1.14.10-gke.27gke-my-cluster-default-pool-a2556b36-85z6 Ready<none>73s v1.14.10-gke.27gke-my-cluster-default-pool-a2556b36-xlbj Ready<none>72s v1.14.10-gke.27gke-my-cluster-default-pool-a2556b36-z8fp Ready<none>74s v1.14.10-gke.27gke-my-cluster-default-pool-e93974f2-hwkj Ready<none>72s v1.14.10-gke.27gke-my-cluster-default-pool-e93974f2-jqj3就绪<none>72s v1.14-10-gke.27gke-my-cluster-default-pool-e93974f2-v8xv Ready<none>74s v1.14.10-gke.27

现在您可以创建Kubernetes资源了。

Kubernetes配置

Kubernetes配置涉及创建以下资源:

  • 命名空间

  • 群集角色

  • 节点配置文件的ConfigMap

  • 外部应用程序连接到群集时用于发现和负载平衡的服务

  • 运行Ignite节点的pods的配置

正在创建命名空间

为部署创建唯一的命名空间。在我们的示例中,名称空间称为“ignite”。

使用以下命令创建命名空间:

kubectl创建命名空间点火

正在创建服务

Kubernetes服务用于自动发现,并作为连接到集群的外部应用程序的负载平衡器。

每次启动新节点时(在单独的pod中),IP查找器都会通过Kubernetes API连接到服务,以获取现有pod的地址列表。使用这些地址,新节点会发现所有群集节点。

服务.yaml
api版本: 第1版
友善的: 服务
元数据:
  #名称必须等于KubernetesConnectionConfiguration.serviceName
  名称: 点火服务
  #名称必须等于KubernetesConnectionConfiguration.namespace
  命名空间: 点燃
  标签:
    应用程序: 点燃
规范:
  类型: 负载平衡器
  端口:
    - 名称: 休息
      港口: 8080
      目标端口: 8080
    - 名称: 瘦客户端
      港口: 10800
      目标端口: 10800
  #可选-如果群集
  #和应用程序部署在Kubernetes中
  #sessionAffinity:客户端IP
  选择器:
    #必须等于吊舱的标签集。
    应用程序: 点燃
地位:
  负载平衡器: {}

创建服务:

库贝特尔创造-(f)服务.yaml

创建群集角色和服务帐户

创建服务帐户:

库贝特尔创造sa点燃-n个点燃

集群角色用于授予对pods的访问权限。以下文件是群集角色的示例:

群集-卷.yaml
api版本: rbac.授权.k8s.io/v1
友善的: 角色
元数据:
  名称: 点燃
  命名空间: 点燃
规则:
- api组:
  - ""
  资源: #以下是您可以访问的资源
  - 豆荚
  - 端点
  动词: #这就是你能用它们做的
  - 得到
  - 列表
  - 
---
友善的: 角色绑定
api版本: rbac.授权.k8s.io/v1
元数据:
  名称: 点燃 
角色参考:
  友善的: 角色
  名称: 点燃 
  apiGroup公司: rbac.授权.k8s.io
学科:
- 友善的: 服务帐户
  名称: 点燃
  命名空间: 点燃

运行以下命令以创建角色和角色绑定:

库贝特尔创造-(f)簇绒.山药

为节点配置文件创建ConfigMap

我们将创建一个ConfigMap,它将保存每个节点要使用的节点配置文件。这将允许您为所有节点保留配置文件的单个实例。

让我们先创建一个配置文件。根据是否使用持久性,选择以下选项卡之一。

我们必须使用Tcp发现KubernetesIpFinder用于节点发现的IP查找程序。这个IP查找器通过Kubernetes API连接到服务,并获得现有pod地址的列表。使用这些地址,新节点可以发现所有其他群集节点。

该文件将如下所示:

节点配置.xml
    <豆类 类=“org.apache.ignite.conformation.IgniteConfiguration”>

        <属性 姓名=“发现Spi”>
            <豆类 类=“org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi”>
                <属性 姓名=“ipFinder”>
                    <豆类 类=“org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder”>
                        <构造函数arg>
                            <豆类 类=“org.apache.ignite.kubernetes.conformation.KubernetesConnectionConfiguration”>
                                <属性 姓名=“命名空间” 价值=“点燃” />
                                <属性 姓名=“服务名称” 价值=“点火服务” />
                            </bean>
                        </constructor-arg>
                    </bean>
                </属性>
            </bean>
        </属性>
    </bean>

在配置文件中,我们将:

  • 启用本机持久性并指定工作目录,walPath(walPath)、和walArchivePath(沃尔存档路径)。这些目录安装在运行Ignite节点的每个机架中。卷配置是吊舱配置.

  • 使用Tcp发现KubernetesIpFinderIP探测器。这个IP查找器通过Kubernetes API连接到服务,并获得现有pods地址的列表。使用这些地址,新节点可以发现所有其他群集节点。

文件如下所示:

节点配置.xml
    <豆类 类=“org.apache.ignite.conformation.IgniteConfiguration”>

        <属性 姓名=“工作目录” 价值=“/点燃/工作”/>

        <属性 姓名=“dataStorageConfiguration”>
            <豆类 类=“org.apache.ignite.conformation.DataStorageConfiguration”>
                <属性 姓名=“默认数据区域配置”>
                    <豆类 类=“org.apache.ignite.conformation.DataRegionConfiguration”>
                        <属性 姓名=“persistenceEnabled” 价值=“正确”/>
                    </bean>
                </属性>

                <属性 姓名=“walPath” 价值=“/点火/wal”/>
                <属性 姓名=“walArchivePath” 价值=“/inite/walarchive”/>
            </bean>

        </属性>

        <属性 姓名=“发现Spi”>
            <豆类 类=“org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi”>
                <属性 姓名=“ipFinder”>
                    <豆类 类=“org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder”>
                        <构造函数arg>
                            <豆类 类=“org.apache.ignite.kubernetes.conformation.KubernetesConnectionConfiguration”>
                                <属性 姓名=“命名空间” 价值=“点燃” />
                                <属性 姓名=“服务名称” 价值=“点火服务” />
                            </bean>
                        </constructor-arg>
                    </bean>
                </属性>
            </bean>
        </属性>

    </bean>

这个命名空间服务名称IP查找器配置的属性必须与服务配置.根据用例的需要添加其他属性。

要创建ConfigMap,请在目录中使用节点配置.xml文件。

kubectl创建配置映射点燃配置-n个点燃--来自文件=节点配置.xml

创建Pod配置

现在,我们将为pods创建一个配置。在无状态部署的情况下,我们将使用部署.对于有状态部署,我们将使用状态集.

我们的部署配置将部署带有两个运行Ignite 2.16.0的pods的ReplicaSet。

在容器的配置中,我们将:

  • 启用“ignite-kubernetes”和“ignite-rest-http”模块.

  • 使用我们之前创建的ConfigMap中的配置文件。

  • 打开多个端口:

    • 47100-通信端口

    • 47500­-发现端口

    • 49112-默认JMX端口

    • 10800-瘦客户机/JDBC/ODBC端口

    • 8080-REST API端口

部署配置文件可能如下所示:

部署.yaml
#用于吊舱部署的Kubernetes配置示例。
api版本: 应用程序/v1
友善的: 部署
元数据:
  #群集名称。
  名称: 点火星团
  命名空间: 点燃
规范:
  #Kubernetes启动的初始豆荚数。
  复制副本: 2
  选择器:
    匹配标签:
      应用程序: 点燃
  模板:
    元数据:
      标签:
        应用程序: 点燃
    规范:
      服务帐户名称: 点燃
      终止GracePeriodSeconds: 60000
      容器:
        #自定义机架名称。
      - 名称: 点火节点
        形象: apacheignite/点火:2.16.0
        环境价值:
        - 名称: 选项_LIBS
          价值: 点燃kubernetes,点燃rest http
        - 名称: 配置_ URI
          价值: 文件:///ignite/config/node-configuration.xml
        端口:
        #要打开的端口。
        - 集装箱港口: 47100 #通信SPI端口
        - 集装箱港口: 47500 #发现SPI端口
        - 集装箱港口: 49112 #dafault JMX端口
        - 集装箱港口: 10800 #瘦客户机/JDBC驱动程序端口
        - 集装箱港口: 8080 #REST API
        卷装载数:
        - 装载路径: /点火/配置
          名称: 配置-卷
      :
      - 名称: 配置卷
        配置映射:
          名称: 点火配置

通过运行以下命令创建展开:

库贝特尔创造-(f)部署.yaml

我们的StatefulSet配置部署了2个运行Ignite 2.16.0的pod。

在容器的配置中,我们将:

  • 启用“ignite-kubernetes”和“ignite-rest-http”模块.

  • 使用我们之前创建的ConfigMap中的配置文件。

  • 装载工作目录(存储应用程序数据的位置)、WAL文件和WAL存档的卷。

  • 打开多个端口:

    • 47100-通信端口

    • 47500­-发现端口

    • 49112-默认JMX端口

    • 10800-瘦客户端/JBC/ODBC端口

    • 8080-REST API端口

StatefulSet配置文件可能如下所示:

statefulset.yaml州
#用于吊舱部署的Kubernetes配置示例。
api版本: 应用程序/v1
友善的: 状态集
元数据:
  #群集名称。
  名称: 点火星团
  命名空间: 点燃
规范:
  #Kubernetes启动的初始豆荚数。
  复制副本: 2
  服务名称: 点燃
  选择器:
    匹配标签:
      应用程序: 点燃
  模板:
    元数据:
      标签:
        应用程序: 点燃
    规范:
      服务帐户名称: 点燃
      终止GracePeriodSeconds: 60000
      容器:
        #自定义机架名称。
      - 名称: 点火节点
        形象: 电容点火:2.16.0
        环境价值:
        - 名称: 选项_LIBS
          价值: ignite-kubernetes,ignite-rest-http
        - 名称: 配置_ URI
          价值: 文件:///ignite/config/node-configuration.xml
        - 名称: JVM_OPTS公司
          价值: "-DIGNITE_WAL_MAP=错误“
        端口:
        #要打开的端口。
        - 集装箱港口: 47100 #通信SPI端口
        - 集装箱港口: 47500 #发现SPI端口
        - 集装箱港口: 49112 #JMX端口
        - 集装箱港口: 10800 #瘦客户机/JDBC驱动程序端口
        - 集装箱港口: 8080 #REST API
        卷装载数:
        - 装载路径: /点火/配置
          名称: 配置-卷
        - 装载路径: /点火/工作
          名称: 工作-职业
        - 装载路径: /点火/点火
          名称: wal-vol公司
        - 装载路径: /点火/walarchive
          名称: 瓦拉基夫-沃尔
      安全上下文:
        fs组: 2000 #如果您有权限问题,请尝试删除此项
      :
      - 名称: 配置卷
        配置映射:
          名称: 点火配置
  卷索赔模板:
  - 元数据:
      名称: 工作-职业
    规范:
      访问模式: [ "读写一次” ]
#storageClassName:“点火持久性存储等级”
      资源:
        请求:
          存储: "1Gi英寸 #确保为应用程序数据提供足够的空间
  - 元数据:
      名称: wal-vol公司
    规范:
      访问模式: [ "读写一次” ]
#storageClassName:“点火-wal-storage-class”
      资源:
        请求:
          存储: "1Gi英寸
  - 元数据:
      名称: 瓦拉基夫-沃尔
    规范:
      访问模式: [ "读写一次” ]
#storageClassName:“点火-wal-storage-class”
      资源:
        请求:
          存储: "1Gi英寸

请注意规范卷索赔模板部分,它定义由持久卷供应器供应的持久卷。卷类型取决于云提供商。通过定义存储类.

通过运行以下命令创建StatefulSet:

库贝特尔创造-(f)statefulset.yaml州

检查吊舱是否正确部署:

$kubectl获取pod-n点火名称就绪状态重新启动年龄点火-群集-5b69557db6-lcglw 1/1运行0 44m点火器-5b69557db6-xpw5d 1/1运行0 44m

检查节点的日志:

$kubectl日志ignite-cluster-5b69557db6-lcglw-n ignite...[14:33:50]点燃文件:http://gridgain.com网站[14:33:50][14:33:50]安静模式。[14:33:50]^--记录到文件“/opt/gridgeain/work/log/ignite-b8622b65.0.log”[14:33:50]^--通过“JavaLogger[quiet=true,config=null]”进行日志记录[14:33:50]^--要在此处查看**FULL**控制台日志,请添加-DIGNITE_QUIET=false或“-v”以点火。{sh|bat}[14:33:50][14:33:50]操作系统:Linux 4.19.81 amd64[14:33:50]虚拟机信息:OpenJDK Runtime Environment 1.8.0_212-b04 IcedTea OpenJDK 64-Bit Server VM 25.212-b04[14:33:50]请设置系统属性“-Djava.net.prefereIPv4Stack=true”,以避免混合环境中可能出现的问题。[14:33:50]初始堆大小为30MB(应不小于512MB,使用-Xms512m-Xmx512m)。[14:33:50]配置的插件:[14:33:50]^--无[14:33:50][14:33:50]配置的故障处理程序:[hnd=StopNodeOrHaltFailureHandler[tryStop=false,timeout=0,super=AbstractFailureHandler[ignoredFailureTypes=UnmodifableSet[SYSTEM_WORKER_BLOCKED,SYSTEM_CRITICAL_OPERATION_timeout]]][14:33:50]消息队列限制设置为0,这可能会导致在FULL_ASYNC或PRIMARY_SYNC模式下运行缓存操作时出现潜在的OOME,因为发送方和接收方的消息队列增长。[14:33:50]安全状态[authentication=off,tls/ssl=off][14:34:00]在本地计算机上启动的节点需要超过80%的物理RAM,这可能会由于交换而导致显著的速度减慢(请减小JVM堆大小、数据区域大小或检查点缓冲区大小)[需要=918MB,可用=1849MB][14:34:01]电网性能建议(如果可能,请修复)[14:34:01]要禁用,请设置-DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true[14:34:01]^--启用G1垃圾收集器(将“-XX:+UseG1GC”添加到JVM选项)[14:34:01]^--指定JVM堆的最大大小(添加'-Xmx[g|g|m|m|k|k]'到JVM选项)[14:34:01]^--如果获得“OOME:直接缓冲区内存”,则设置最大直接内存大小(添加“-XX:MaxDirectMemorySize=[g|g|m|m|k|k]'到JVM选项)[14:34:01]^--禁用处理对System.gc()的调用(将“-XX:+DisableExplicitGC”添加到JVM选项中)[14:34:01]更多性能建议请参阅本页:https://ignite.apache.org/docs/latest/perf-and-troubleshooting/general-perf-tips[14:34:01][14:34:01]要启动控制台管理和监视,请运行ignitevisorcmd。{sh|bat}[14:34:01]配置的数据区域:[14:34:01]^--默认值[initSize=256.0 MiB,maxSize=370.0 MiB;持久性=false,lazyMemoryAllocation=true][14:34:01][14:34:01]点火节点启动正常(id=b8622b65)[14:34:01]拓扑快照[ver=2,locNode=b8622b65,servers=2,clients=0,state=ACTIVE,CPUs=2,offheap=0.72GB,heap=0.88GB]

字符串服务器=2最后一行表示两个节点合并为一个集群。

准备就绪探针设置

要设置就绪探测,请取消注释yaml定义中的相关部分如下所示。一个特殊的REST命令(探查)用于确定点燃内核的开始时间。

活力探测器

要设置活动探测,请取消注释yaml定义中的相关部分如下所示。REST命令(版本)用于验证Ignite是否正常运行。

激活群集

如果部署了无状态集群,请跳过此步骤:没有持久性的集群不需要激活。

如果使用持久性,则必须在集群启动后激活集群。为此,请连接到其中一个吊舱:

库贝特尔执行官 -它<播客名称>-n个点燃--/垃圾桶/垃圾桶

执行以下命令:

/opt/ignite/apache-ignite/bin/control.sh--设置状态激活--是的

您还可以使用REST API.请参阅连接到群集部分获取有关连接到集群的REST API的详细信息。

缩放群集

您可以使用库贝特尔量表命令。

注意安全
确保你的GKE集群有足够的资源来添加新的pods。

在下面的示例中,我们将再显示一个节点(我们有两个)。

要缩放展开,请运行以下命令:

kubectl规模部署点燃集群--复制副本=-n个点燃

要缩放StatefulSet,请运行以下命令:

kubectl scale sts点火星团--复制副本=-n个点燃

缩放集群后,更改基线拓扑相应地。

注意安全
如果减少的节点数超过分区备份数,您可能会丢失数据。缩小规模的正确方法是在删除节点后通过更改基线拓扑.

连接到群集

如果您的应用程序也在Kubernetes中运行,则可以使用瘦客户机或客户机节点连接到集群。

获取服务的公共IP:

$kubectl描述svc点火服务-n个点燃名称:点火服务命名空间:点燃标签:应用程序=点燃注释:<无>选择器:应用程序=点燃类型:负载平衡器防护等级:10.0.144.19负载天平入口:13.86.186.145端口:rest 8080/TCP目标端口:8080/TCP节点端口:rest 31912/TCP端点:10.244.1.5:8080端口:thinclients 10800/TCP目标端口:10800/TCP节点端口:thinclients 31345/TCP端点:10.244.1.5:10800会话相关性:无外部流量策略:群集

您可以使用负载平衡器入口连接到其中一个开放端口的地址。这些端口也列在命令的输出中。

连接客户端节点

客户端节点需要连接到群集中的每个节点。实现这一点的唯一方法是在Kubernetes中启动客户端节点。您需要配置要使用的发现机制Tcp发现KubernetesIpFinder,如中所述为节点配置文件创建ConfigMap第节。

与瘦客户端连接

下面的代码片段演示了如何使用java瘦客户端。您可以以相同的方式使用其他瘦客户端。请注意,我们使用服务的外部IP地址(LoadBalancer Ingress)。

客户端配置 cfg(立方英尺/加仑) = 新的 客户端配置().设置地址("13.86.186.145:10800");
点火客户端 客户 = 点火.启动客户端(cfg(立方英尺/加仑));

客户端缓存<整数, 字符串> 隐藏物 = 客户.获取或创建缓存(“测试缓存”);

隐藏物.(1, “第一个测试值”);

系统.外面的.打印ln(隐藏物.得到(1));

客户.关闭();

分区意识

分区感知允许瘦客户机直接向拥有查询数据的节点发送查询请求。

在没有分区意识的情况下,通过瘦客户机连接到集群的应用程序通过单个服务器节点执行所有查询和操作,该服务器节点充当传入请求的代理。然后,将这些操作重新循环到存储所请求数据的节点。这导致了一个瓶颈,可能会阻止应用程序线性扩展。

无分区意识

请注意查询必须如何通过代理服务器节点,在那里它们被路由到正确的节点。

有了分区意识,瘦客户机可以直接将查询和操作路由到拥有查询所需数据的主节点。这消除了瓶颈,使应用程序可以更容易地扩展。

具有分区意识

要在扩展Kubernetes环境中启用分区感知功能,应该在集群中启动一个客户端,并用配置Kubernetes连接配置.在这种情况下,客户端可以连接到集群中的每个pod。

Kubernetes连接配置 kcfg公司 = 新的 Kubernetes连接配置();
kcfg公司.setNamespace(设置命名空间)(“点燃”);
kcfg公司.设置服务名称(“点火服务”);

客户端配置 中央控制室 = 新的 客户端配置();
中央控制室.setAddressesFinder(设置地址查找器)(新的 ThinClientKubernetesAddressFinder(kcfg公司));

点火客户端 客户 = 点火.启动客户端(cfg(立方英尺/加仑));

客户端缓存<整数, 字符串> 隐藏物 = 客户.获取或创建缓存(“测试缓存”);

隐藏物.(1, “第一个测试值”);

系统.外面的.打印ln(隐藏物.得到(1));

客户.关闭();

连接到REST API

按如下方式连接到集群的REST API:

$卷曲http://13.86.186.145:8080/点火?cmd=版本{“成功状态”:0,“错误”:null,“响应”:"2.16.0",“sessionToken”:null}