@liyuj
2017-12-10T09:40:02.000000Z
字数 18288
阅读 7191
Apache-Ignite-2.3.0-中文开发手册
Ignite对部署没有要求,可以非常容易地部署到私有主机或者任意的云环境,比如,Ignite可以独立部署,也可以部署在Kubernetes或者Docker容器中,还有Apache Mesos以及Hadoop Yarn。它可以运行在物理主机中,也可以部署在虚拟机中。
Docker可以将Ignite应用及其所有的依赖打包进一个标准的容器,Docker会自动下载Ignite发布版,将代码部署进Ignite以及配置节点,他还可以自动启动配置好的Ignite节点,这样的集成方式,使得通过简单地重启Ignite的Docker容器就可以部署新的代码。
要运行Docker容器,需要拉取然后启动一个Docker映像,默认会下载最新的版本,但是在这里可以看到一个完整的清单。
可以使用如下的命令拉取Ignite docker映像:
# Pull latest version.
sudo docker pull apacheignite/ignite
# Pull ignite version {ignite-version}
sudo docker pull apacheignite/ignite:{ignite-version}
可以使用docker run
来运行Ignite docker容器:
# Run latest version.
sudo docker run -it --net=host
-e "CONFIG_URI=$CONFIG_URI"
[-e "OPTION_LIBS=$OPTION_LIBS"]
[-e "JVM_OPTS=$JVM_OPTS"]
...
apacheignite/ignite
# Run ignite version {ignite-version}
sudo docker run -it --net=host
-e "CONFIG_URI=$CONFIG_URI"
[-e "OPTION_LIBS=$OPTION_LIBS"]
[-e "JVM_OPTS=$JVM_OPTS"]
...
apacheignite/ignite:{ignite-version}
下面的配置参数在docker容器中可以通过环境变量进行传递:
名称 | 描述 | 默认 | 示例 |
---|---|---|---|
CONFIG_URI |
Ignite配置文件的URL(也可以相对于类路径的META-INF文件夹),下载的配置文件会保存于./ignite-config.xml | 无 | https://raw.githubusercontent.com/apache/ignite/ master/examples/config/example-cache.xml |
OPTION_LIBS |
会被包含在类路径中的可选库 | ignite-log4j, ignite-spring,ignite-indexing |
ignite-aws,ignite-aop |
JVM_OPTS |
通过docker命令传递给ignite实例的环境变量。 | 无 | -Xms1g -Xmx1g -server -XX:+AggressiveOpts -XX:MaxPermSize=256m |
EXTERNAL_LIBS |
库文件URL列表 | 无 | http://central.maven.org/maven2/io/undertow/undertow-servlet/1.3.10.Final/undertow-servlet-1.3.10.Final.jar,http://central.maven.org/maven2/io/undertow/undertow-build-config/1.0.0.Beta24/undertow-build-config-1.0.0.Beta24.jar |
要启动Ignite的docker容器,可以使用如下的命令:
sudo docker run -it --net=host -e "CONFIG_URI=https://raw.githubusercontent.com/apache/ignite/master/examples/config/example-cache.xml" apacheignite/ignite
之后应该看到如下的输出日志:
Ignite的AMI(Amazon机器映像)可以通过AWS的EC2管理控制台配置一个简单的Ignite集群,通过AMI进行安装,可以快速地部署一个Ignite集群。
区域 | 映像 |
US-WEST | ami-9cdbb3fc |
US-EAST | ami-ce82caa4 |
EU-CENTRAL | ami-191b0775 |
或者,也可以使用Apache Ignite
关键字在Community AMIs
中搜索映像:
- 选择一个Instance Type
;
- 打开Configure Instance
并且展开Advanced Details
;
- 添加下面的任意配置参数;
名称 | 描述 | 默认 | 示例 |
---|---|---|---|
CONFIG_URI |
Ignite配置文件的URL(也可以相对于类路径的META-INF文件夹),下载的配置文件会保存于./ignite-config.xml | 无 | https://raw.githubusercontent.com/apache/ignite/ master/examples/config/example-cache.xml |
OPTION_LIBS |
会被包含在类路径中的可选库 | ignite-log4j, ignite-spring,ignite-indexing |
ignite-aws,ignite-aop |
JVM_OPTS |
通过docker命令传递给ignite实例的环境变量。 | 无 | -Xms1g -Xmx1g -server -XX:+AggressiveOpts -XX:MaxPermSize=256m |
EXTERNAL_LIBS |
库文件URL列表 | 无 | http://central.maven.org/maven2/io/undertow/undertow-servlet/1.3.10.Final/undertow-servlet-1.3.10.Final.jar,http://central.maven.org/maven2/io/undertow/undertow-build-config/1.0.0.Beta24/undertow-build-config-1.0.0.Beta24.jar |
IGNITE_VERSION |
Ignite的版本 | latest |
2.1.0 |
如下图所示:
首选Ignite版本
IGNITE_VERSION属性可以视具体情况而定。
Tag Instance
,设置name
标签,比如ignite-node
;
sudo docker ps
sudo docker logs -f CONTAINER_ID
sudo docker exec -it container_id /bin/bash
Ignite的映像可以通过Google计算控制台配置一个简单的Ignite集群,通过映像进行安装,可以快速地部署一个Ignite集群。
gcloud compute images create ignite-image \
--source-uri gs://ignite-media/ignite-google-image.tar.gz
要了解更多信息,可以参照cloud.google.com。
Google Compute Console
;Compute->Compute Engine->VM
实例,然后点击New instance
;Boot disk
的Change
按钮;打开Custom images
,然后选择已导入的映像,在下面的截图中,可以看到名为ignite-name
的映像;
点击Management, disk, networking, access & security options
,然后可以添加任意的配置参数:
名称 | 描述 | 默认 | 示例 |
---|---|---|---|
CONFIG_URI |
Ignite配置文件的URL(也可以相对于类路径的META-INF文件夹),下载的配置文件会保存于./ignite-config.xml | 无 | https://raw.githubusercontent.com/apache/ignite/ master/examples/config/example-cache.xml |
OPTION_LIBS |
会被包含在类路径中的可选库 | ignite-log4j, ignite-spring,ignite-indexing |
ignite-aws,ignite-aop |
JVM_OPTS |
通过docker命令传递给ignite实例的环境变量。 | 无 | -Xms1g -Xmx1g -server -XX:+AggressiveOpts -XX:MaxPermSize=256m |
EXTERNAL_LIBS |
库文件URL列表 | 无 | http://central.maven.org/maven2/io/undertow/undertow-servlet/1.3.10.Final/undertow-servlet-1.3.10.Final.jar,http://central.maven.org/maven2/io/undertow/undertow-build-config/1.0.0.Beta24/undertow-build-config-1.0.0.Beta24.jar |
IGNITE_VERSION |
Ignite的版本 | latest |
1.7.0 |
如下图所示:
首选Ignite版本
IGNITE_VERSION属性可以视具体情况而定。
sudo docker ps
sudo docker logs -f CONTAINER_ID
sudo docker exec -it container_id /bin/bash
Apache Ignite支持在Mesos集群上调度和运行Ignite节点。
Apache Mesos是一个集群管理器,他提供了一个通用运行环境以及所有的必要资源来部署、运行和管理分布式应用。他对资源的管理和隔离有助于充分利用服务器资源。
要了解Apache Mesos的更多信息,请参照:http://mesos.apache.org/
常规部署Apache Ignite集群需要下载Apache Ignite发行版,修改配置参数以及启动节点。Apache Ignite Mesos框架由调度器
和任务
组成,可以极大地简化集群的部署。
调度器
:调度器启动时将自己在Mesos主节点上注册,注册成功之后调度器就会开始处理从Mesos主节点到使用资源的Ignite节点的资源请求,调度器会维护Ignite集群所需(并且可用)的所有资源水平(CPU,内存等);任务
:在Mesos从节点上启动Ignite节点。要运行Ignite Mesos框架需要配置好的正在运行的Apache Mesos集群,如果需要如何Apache Mesos集群的信息,请参照:https://docs.mesosphere.com/getting-started/datacenter/install/。
确保主节点和从节点监听正确的IP地址,否则无法保证Mesos集群能正常工作。
通过Marathon运行框架
目前,建议的做法是通过Marathon运行框架。
libs\optional\ignite-mesos\ignite-mesos-<ignite-version>-jar-with-dependencies.jar
上传到任意一个云存储(比如Amazon S3yun);marathon.json
文件,然后对参数做必要的修改;
{
"id": "ignition",
"instances": 1,
"cpus": 2,
"mem": 2048,
"ports": [0],
"uris": [
"http://host/ignite-mesos-<ignite-version>-jar-with-dependencies.jar"
],
"env": {
"IGNITE_NODE_COUNT": "4",
"MESOS_MASTER_URL": "zk://localhost:2181/mesos",
"IGNITE_RUN_CPU_PER_NODE": "2",
"IGNITE_MEMORY_PER_NODE": "2048",
"IGNITE_VERSION": "1.0.5",
"MESOS_USER" : "userAAAAA",
"MESOS_ROLE" : "role1"
},
"cmd": "java -jar ignite-mesos-<ignite-version>-jar-with-dependencies.jar"
}
角色名必须是有效的目录名,因此如下的格式非法:
1.为空串;
2.为.或者..;
3.由-
开始;
4.包含斜杠、退格键以及空白符等。
如果集群没有额外的约束,框架会试图占用Mesos集群的所有资源。
curl -X POST -H "Content-type: application/json" --data-binary @marathon.json http://<marathon-ip>:8080/v2/apps/
http://<marathon-ip>:8080
,确保有一个名为ignition
的应用,而且状态是Running
; http://<master-ip>:5050
,如果一切正常那么任务的名字类似Ignite node N
,状态是RUNNING
。在本示例中,N=4,可以看示例中的marathon.json
文件-"IGNITE_NODE_COUNT": "4"; Active Tasks
表格中的Sandbox
; stdout
获取标准输出日志,stderr
获取标准错误日志; libs\optional\ignite-mesos\
文件夹;
java -jar ignite-mesos-<ignite-version>-jar-with-dependencies.jar
或者:
java -jar ignite-mesos-<ignite-version>-jar-with-dependencies.jar properties.prop
其中properties.prop
是一个属性文件,如果不提供配置文件那么框架会试图占用Mesos集群的所有资源,下面是一个例子:
# The number of nodes in the cluster.
IGNITE_NODE_COUNT=1
# Mesos ZooKeeper URL to locate leading master.
MESOS_MASTER_URL=zk://localhost:2181/mesos
# The number of CPU Cores for each Apache Ignite node.
IGNITE_RUN_CPU_PER_NODE=4
# The number of Megabytes of RAM for each Apache Ignite node.
IGNITE_MEMORY_PER_NODE=4096
# The version ignite which will be run on nodes.
IGNITE_VERSION=1.7.0
http://<marathon-ip>:5050
,如果一切正常,名字类似Ignite node N
的任务状态应该是Running
。在本示例中N=1,可以看示例中的properties.prop
文件-"IGNITE_NODE_COUNT": "1"; Sandbox
; stdout
获取标准输出日志,stderr
获取标准错误日志; 所有配置都是通过环境变量或者配置文件处理的(这非常适用于简化marathon的配置以运行框架),下面的配置参数可以根据需要进行配置:
名称 | 描述 | 默认值 | 示例 |
---|---|---|---|
IGNITE_RUN_CPU_PER_NODE |
每个Ignite节点的CPU核数 | 没有限制 | 2 |
IGNITE_MEMORY_PER_NODE |
每个节点的内存数量(M) | 没有限制 | 1024 |
IGNITE_DISK_SPACE_PER_NODE |
每个节点占用的磁盘容量(M) | 1024 | 2048 |
IGNITE_NODE_COUNT |
集群内的节点数量 | 5 | 10 |
IGNITE_TOTAL_CPU |
Ignite集群的CPU核数 | 没有限制 | 5 |
IGNITE_TOTAL_MEMORY |
Ignite集群占用的内存(M) | 没有限制 | |
IGNITE_TOTAL_DISK_SPACE |
Ignite集群占用的磁盘空间(M) | 没有限制 | 5120 |
IGNITE_MIN_CPU_PER_NODE |
要运行Ignite节点所需的CPU核数的最小值 | 1 | 4 |
IGNITE_MIN_MEMORY_PER_NODE |
要运行Ignite节点所需的内存的最小值(M) | 256 | 1024 |
IGNITE_VERSION |
节点要运行的Ignite的版本 | latest | 1.6.0 |
IGNITE_WORK_DIR |
保存Ignite发行版的 | ignite-release | /opt/ignite/ |
IGNITE_XML_CONFIG |
Apache Ignite配置文件的路径 | 无 | /opt/ignite/ignite-config.xml |
IGNITE_CONFIG_XML_URL |
Apache Ignite配置文件的URL | 无 | https://example.com/default-config.xml |
IGNITE_USERS_LIBS |
要添加到类路径的库文件的路径 | 无 | /opt/libs/ |
IGNITE_USERS_LIBS_URL |
要添加到类路径的库文件的URL列表,逗号分割 | 无 | https://example.com/lib.zip,https://example.com/lib1.zip |
MESOS_MASTER_URL |
要定位主节点的Mesos Zookeeper的URL | zk://localhost:2181/mesos | zk://176.0.1.45:2181/mesos or 176.0.1.45:2181 |
IGNITE_PACKAGE_URL |
Ignite的压缩包URL,这个参数可以用于替换IGNITE_VERSION参数。 | 无 | http://apache-mirror.rbc.ru/pub/apache//ignite/1.7.0/apache-ignite-1.7.0-src.zip |
IGNITE_PACKAGE_PATH |
Ignite的压缩包路径,这个参数在访问因特网受限时是有用的。 | 无 | /opt/ignite/apache-ignite-fabric-1.6.0-bin.zip |
IGNITE_HTTP_SERVER_IDLE_TIMEOUT |
设置一个HTTP连接的最大空闲时间(毫秒),jetty服务器会使用,服务器提供了ignite的mesos框架所需的资源,比如ignite压缩包,用户的库文件,配置等。 | 30000 | 30000 |
与Yarn的集成可以支持在Yarn集群上调度和运行Apache Ignite节点。
Yarn是一个资源管理器,他提供了一个包括所有必要资源的通用的运行环境来进行分布式应用的部署,运行和管理,他对资源的管理和隔离有助于充分利用服务器资源。
要了解Yarn的信息,请参照http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html。
部署Apache Ignite集群的典型步骤是下载Ignite的发行版,修改配置文件以及启动节点。与Yarn的集成可以避免这些操作,Ignite Yarn应用可以极大的简化集群的部署,它由如下组件组成:
Application master
进程;Application master
:一旦注册成功组件就会开始处理从资源管理器到使用资源的Ignite节点的资源请求,Application master
会维护Ignite集群所需的所有资源水平(CPU,内存等);Container
:在从节点上运行Ignite节点的实体;要运行Ignite应用,需要配置和运行Yarn和Hadoop集群,要了解如何配置集群的信息,可以参照: http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html.
配置
章节:
# The number of nodes in the cluster.
IGNITE_NODE_COUNT=2
# The number of CPU Cores for each Apache Ignite node.
IGNITE_RUN_CPU_PER_NODE=1
# The number of Megabytes of RAM for each Apache Ignite node.
IGNITE_MEMORY_PER_NODE=2048
# The version ignite which will be run on nodes.
IGNITE_VERSION=1.0.6
hadoop java jar ignite-yarn-<ignite-version>.jar ./ignite-yarn-<ignite-version>.jar cluster.properties
Ignition
的应用是否工作正常; Logs
; stdout
获取标准输出日志,stderr
获取标准错误日志; 所有的配置都是通过环境变量和属性文件进行的,下面的配置参数可以根据需要进行配置:
名称 | 描述 | 默认值 | 示例 |
---|---|---|---|
IGNITE_XML_CONFIG |
指向Apache Ignite配置文件的HDFS路径 | 无 | /opt/ignite/ignite-config.xml |
IGNITE_WORK_DIR |
用于保存Ignition发行版的目录 | ./ignite-release | /opt/ignite/ |
IGNITE_RELEASES_DIR |
保存Ignite发行版的HDFS路径 | /ignite/releases/ | /ignite-rel/ |
IGNITE_USERS_LIBS |
要添加到CLASSPATH的库文件的HDFS路径 | 无 | /opt/libs/ |
IGNITE_MEMORY_PER_NODE |
每个Ignite节点占用的内存的大小(M),这个是Java堆的大小。 | 2048 | 1024 |
IGNITE_MEMORY_OVERHEAD_PER_NODE |
分配用于处理JVM原生日常管理、内部字符串等的内存量,但是如果用的话也包括堆外内存。YARN用于容器运行Ignite节点的必要内存量是IGNITE_MEMORY_PER_NODE和IGNITE_MEMORY_OVERHEAD_PER_NODE之和。 | IGNITE_MEMORY_PER_NODE * 0.10,最小值384 | 512 |
IGNITE_HOSTNAME_CONSTRAINT |
从节点约束 | 无 | 192.168.0.[1-100] |
IGNITE_NODE_COUNT |
集群节点的数量 | 3 | 10 |
IGNITE_RUN_CPU_PER_NODE |
每个Ignite节点的CPU核数 | 2 | 4 |
IGNITE_VERSION |
节点上运行的Ignite版本 | latest | 1.0.5 |
IGNITE_PATH |
到Ignite构建的hdfs路径,当yarn集群运行在内网无法访问互联网时,这个属性很有用。 | 无 | /ignite/apache-ignite-fabric-1.7.0-bin.zip |
IGNITE_JVM_OPTS |
JVM参数 | 无 | -XX:+PrintGC |
Ignite集群可以非常容易地通过Kubernetes来进行部署和维护,Kubernetes是一个开源的软件,它可以对容器化的应用进行自动化地部署、伸缩以及管理。
本章节会说明如何将Ignite集群部署到Kubernetes环境中。
在苹果MAC电脑中使用minikube
在本地测试Kubernetes的一个不错的工具是Minikube。在苹果MAC电脑中,一定要使用xhyve驱动以确保正确的持久化,如下所示:
minikube start --vm-driver=xhyve
另外,还需要修改下面要使用的/data/ignite
的路径为/Users/<username>/data/ignite
,注意这里的为实际的用户名。
在Kubernetes中,要启用Ignite节点的自动发现,需要在IgniteConfiguration
中启用TcpDiscoveryKubernetesIpFinder
,下面会创建一个名为example-kube.xml
的配置文件示例,然后定义IP搜索器配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="ignite.cfg"
class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean
class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder">
</bean>
</property>
</bean>
</property>
</bean>
</beans>
Ignite的KubernetesIPFinder
,需要配置和部署一个特定的Kubernetes服务,由它来维护所有有效的Ignite容器组(pod,意译为容器组)的IP地址列表。
每当一个新容器组启动时,IP搜索器会通过Kubernetes的API接入服务,来获取其余已有Ignite容器组的地址列表,使用这些地址,新的节点会发现其他的集群节点,然后最终加入集群。
按照下面的方式可以配置该服务:
ignite-service.yaml:
apiVersion: v1
kind: Service
metadata:
# Name of Ignite Service used by Kubernetes IP finder.
# The name must be equal to TcpDiscoveryKubernetesIpFinder.serviceName.
name: ignite
spec:
clusterIP: None # custom value.
ports:
- port: 9042 # custom value.
selector:
# Must be equal to one of the labels set in Ignite pods'
# deployement configuration.
app: ignite
然后使用如下的命令将其部署到Kubernetes中:
kubectl create -f ignite-service.yaml
确保服务已经启动运行:
kubectl get svc ignite
输出大概像下面这样:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ignite None <none> 9042/TCP 29s
在使用Ignite的docker映像在Kubernetes中部署Ignite容器组之前,需要找到一种方式,即如何将example-kube.xml
(前面已经准备好)传递给docker映像。
可以使用好几种方法,下面,会说明如何通过一个共享的KubernetesPersistentVolume
来共享Ignite的集群配置。
通过HTTP服务器来共享配置
在Microsoft的Azure的Kubernetes中部署Ignite这篇文章说明了如何通过HTTP服务器来共享Ignite的集群配置。
假定有名为/data/ignite
的共享目录,这个目录任意Ignite容器组都可以访问,然后将example-kube.xml
拷贝到这里。
创建一个实际存储支持的PersistentVolume
配置,然后转到/data/ignite
目录。
ignite-volume.yaml:
kind: PersistentVolume
apiVersion: v1
metadata:
name: ignite-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/data/ignite"
使用下面的命令部署这个卷:
kubectl create -f ignite-volume.yaml
检查该卷部署成功并且可以使用:
kubectl get pv ignite-volume
输出大致如下:
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
ignite-volume 1Gi RWO Retain Available 3m
最后,创建一个PersistentVolumeClaim
,他会自动化地绑定到上面初始化的PersistentVolume
。
ignite-volume-claim.yaml:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ignite-volume-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
使用下面的配置创建PersistentVolumeClaim
:
kubectl create -f ignite-volume-claim.yaml
确保PersistentVolumeClaim
已经创建,并且已经绑定到存储example-kube.xml
配置的PersistentVolume
。
kubectl get pvc ignite-volume-claim
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
ignite-volume-claim Bound ignite-volume 1Gi RWO 2m
kubectl get pv ignite-volume
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
ignite-volume 1Gi RWO Retain Bound default/ignite-volume-claim 13m
Kubernetes会搜索一个匹配PersistentVolumeClaim
中的storageClassName
的卷,如果没有匹配PersistentVolumeClaim
需要的storageClassName
的PersistentVolume
,Kubernetes会动态地创建一个新的PersistentVolume
,这是通过执行下面的脚本可以看到所有的PersistentVolumes
:
kubectl get pv
如果storageClassName
没有匹配,那么会看到:
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE
ignite-volume-claim Bound pvc-c3f0f289-9987-11e7-876b-525400ed8e86 1Gi RWO standard 9m
kubectl get pv
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
ignite-volume 1Gi RWO Retain Available 9m
pvc-c3f0f289-9987-11e7-876b-525400ed8e86 1Gi RWO Delete Bound default/ignite-volume-claim standard 9m
现在,就到了为Ignite容器组准备一个Kubernetes部署配置然后进行部署的时候了。
最后,需要为Ignite容器组定义一个YAML配置。
通过HTTP共享Ignite配置
如果通过PersistentVolumeClaim
共享Ignite配置比较麻烦,那么可以将其上传到一个HTTP服务器,然后将链接地址赋值给CONFIG_URI
参数,完整示例可以参照下面的ignite-deployment.yaml (Ignite HTTP config)
。
ignite-deployment.yaml
# An example of a Kubernetes configuration for Ignite pods deployment.
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
# Custom Ignite cluster's name.
name: ignite-cluster
spec:
# A number of Ignite pods to be started by Kubernetes initially.
replicas: 2
template:
metadata:
labels:
# This label has to be added to the selector's section of
# ignite-service.yaml so that the Kubernetes Ignite lookup service
# can easily track all Ignite pods available deployed so far.
app: ignite
spec:
volumes:
# Custom name for the storage that holds Ignite's configuration
# which is example-kube.xml.
- name: ignite-storage
persistentVolumeClaim:
# Must be equal to the PersistentVolumeClaim created before.
claimName: ignite-volume-claim
containers:
# Custom Ignite pod name.
- name: ignite-node
# Ignite Docker image. Kubernetes IP finder is supported starting from
# Apache Ignite 1.9.0
image: apacheignite/ignite:1.9.0
env:
# Ignite's Docker image parameter. Adding the jar file that
# contain TcpDiscoveryKubernetesIpFinder implementation.
- name: OPTION_LIBS
value: ignite-kubernetes
# Ignite's Docker image parameter. Passing the Ignite configuration
# to use for an Ignite pod.
- name: CONFIG_URI
value: file:////data/ignite/example-kube.xml
ports:
# Ports to open.
# Might be optional depending on your Kubernetes environment.
- containerPort: 11211 # REST port number.
- containerPort: 47100 # communication SPI port number.
- containerPort: 47500 # discovery SPI port number.
- containerPort: 49112 # JMX port number.
volumeMounts:
# Mounting the storage with the Ignite configuration.
- mountPath: "/data/ignite"
name: ignite-storage
ignite-deployment.yaml (Ignite HTTP config)
# An example of a Kubernetes configuration for Ignite pods deployment.
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
# Custom Ignite cluster's name.
name: ignite-cluster
spec:
# A number of Ignite pods to be started by Kubernetes initially.
replicas: 2
template:
metadata:
labels:
app: ignite
spec:
containers:
# Custom Ignite pod name.
- name: ignite-node
image: apacheignite/ignite:2.3.0
env:
- name: OPTION_LIBS
value: ignite-kubernetes
- name: CONFIG_URI
value: https://raw.githubusercontent.com/apache/ignite/master/modules/kubernetes/config/example-kube.xml
ports:
# Ports to open.
# Might be optional depending on your Kubernetes environment.
- containerPort: 11211 # REST port number.
- containerPort: 47100 # communication SPI port number.
- containerPort: 47500 # discovery SPI port number.
- containerPort: 49112 # JMX port number.
- containerPort: 10800 # SQL port number.
如上所示,这个配置定义了一组环境变量(OPTION_LIBS
和CONFIG_URIL
),它们会被Ignite的docker映像使用的特定脚本所处理,docker映像的完整配置参数列表在docker部署
的相关章节有描述。
Ignite docker映像版本
Ignite的1.9.0及其后续版本才支持Kubernetes,因此要确保使用可用版本的docker映像,这里可以看到完整的标签列表。
下一步,使用上面的配置将Ignite容器组部署到Kubernetes中:
kubectl create -f ignite-deployment.yaml
检查Ignite容器组是否已经启动运行
kubectl get pods
选择一个可用的容器组名称:
NAME READY STATUS RESTARTS AGE
ignite-cluster-3454482164-d4m6g 1/1 Running 0 25m
ignite-cluster-3454482164-w0xtx 1/1 Running 0 25m
然后从中获取日志,确保这两个容器组可以互相发现对方。
kubectl logs ignite-cluster-3454482164-d4m6g
使用标准的Kubernetes API可以在运行中调整Ignite集群的大小,比如,如果希望扩充集群,从2个到5个节点,那么可以使用如下的命令:
kubectl scale --replicas=5 -f ignite-deployment.yaml
再次确认集群已经扩展成功:
kubectl get pods
输出会显示已经有5个容器组正在运行:
NAME READY STATUS RESTARTS AGE
ignite-cluster-3454482164-d4m6g 1/1 Running 0 34m
ignite-cluster-3454482164-ktkrr 1/1 Running 0 58s
ignite-cluster-3454482164-r20f8 1/1 Running 0 58s
ignite-cluster-3454482164-vf8kh 1/1 Running 0 58s
ignite-cluster-3454482164-w0xtx 1/1 Running 0 34m
具体可以参照这里。
具体可以参照这里。