使用 kubernetes 和 ceph 在生产中部署 zookeeper 集群
Dockerize zookeeper-3.4.6
创建一个 Dockerfile:
#######################################################
# Image: img.reg.3g:15000/zookeeper:3.4.6
#######################################################
FROM img.reg.3g:15000/jdk:1.7.0_67
MAINTAINER lth9739@gmail.com
USER root
ENV ZOOKEEPER_VERSION 3.4.6
ADD Dockerfile /
ADD zookeeper/ /opt/
COPY zoo.cfg /opt/zookeeper/conf/zoo.cfg
RUN mkdir -p /opt/zookeeper/{data,log}
WORKDIR /opt/zookeeper
VOLUME ["/opt/zookeeper/conf", "/opt/zookeeper/data", "/opt/zookeeper/log"]
COPY config-and-run.sh /opt/zookeeper/bin/
EXPOSE 2181 2888 3888
CMD ["/opt/zookeeper/bin/config-and-run.sh"]
将 zookeeper 副本控制器部署到 kubernetes 集群中
你可以使用此命令部署 zookeeper 的副本控制器:
kubectl create -f zookeeper-rc-1.json
{
"apiVersion": "v1",
"kind": "ReplicationController",
"metadata": {
"labels": {
"component": "zookeeper"
},
"name": "zookeeper-1"
},
"spec": {
"replicas": 1,
"selector": {
"server-id": "1",
"role": "zookeeper-1"
},
"template": {
"metadata": {
"labels": {
"server-id": "1",
"role": "zookeeper-1"
},
"name": "zookeeper-1"
},
"spec": {
"containers": [
{
"env": [
{
"value": "1",
"name": "SERVER_ID"
},
{
"value": "5",
"name": "MAX_SERVERS"
}
],
"image": "img.reg.3g:15000/fabric8/zookeeper:latest",
"name": "zookeeper-1",
"ports": [
{
"containerPort": 2181,
"name": "client",
"protocol": "TCP"
},
{
"containerPort": 2888,
"name": "followers",
"protocol": "TCP"
},
{
"containerPort": 3888,
"name": "election",
"protocol": "TCP"
}
],
"volumeMounts": [
{
"mountPath": "/opt/zookeeper/data",
"name": "zookeeper-1"
}
]
}
],
"restartPolicy": "Always",
"volumes": [
{
"name": "zookeeper-1",
"rbd": {
"monitors": [
"10.151.32.27:6789",
"10.151.32.29:6789",
"10.151.32.32:6789"
],
"pool": "rbd",
"image": "log-zookeeper-1",
"user": "admin",
"secretRef": {
"name": "ceph-secret-default"
},
"fsType": "ext4",
"readOnly": false
}
}
]
}
}
}
}
将 zookeeper 服务部署到 kubernetes 集群
你可以使用此命令来部署 zookeeper 的服务:
kubectl create -f zookeeper-svc-1.json
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "zookeeper-1",
"labels": {
"name": "zookeeper-1"
}
},
"spec": {
"ports": [
{
"name": "client",
"port": 2181,
"targetPort": 2181
},
{
"name": "followers",
"port": 2888,
"targetPort": 2888
},
{
"name": "election",
"port": 3888,
"targetPort": 3888
}
],
"selector": {
"server-id": "1"
}
}
}
Zookeeper 集群
如果你想获得一个包含 5 个节点的 zookeeper 集群,你可以编写如上所述的 zookeeper-rc-2/3/4 / 5.json 和 zookeeper-svc-2 / 3/4 / 5.json 文件并使用 kubectl 命令将它们部署到 kubernetes 集群中。