用kubernetes实现couchdb 2.0的自动发现和聚类
couchdiscover的Python项目详细描述
#couchdiscover
[![构建状态](https://travis-ci.org/joeblackwaslike/couchdiscover.svg?branch=master)(https://travis-ci.org/joeblackwaslike/couchdiscover)[![Github回购](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)(https://github.com/joeblackwaslike/couchdiscover)[![pypi版本](https://img.shields.io/pypi/v/couchdiscover.svg)(https://pypi.python.org/pypi/couchdiscover)[![PYPI许可证](https://img.shields.io/pypi/l/couchdiscover.svg)](https://pypi.python.org/pypi/couchdiscover)[![Pypi控制盘](https://img.shields.io/pypi/wheel/couchdiscover.svg)(https://pypi.python.org/pypi/couchdiscover)[![PYPI版本](https://img.shields.io/pypi/pyversions/couchdiscover.svg)(https://pypi.python.org/pypi/couchdiscover)[!【Docker拉拽】(https://img.shields.io/docker/docker/拉拽/joeblackwakwaslike/couchdiscover.svg)(https://hub.docker.com/r/joeblackwakwaslike/couchdiscover/)
利用kubernetes和couchdb 2.0集群api用于自动创建couchdb 2.0集群的过程。与先前的bigcooch相比,这里的要求有很大的不同。
此模块有一个名为“couchdiscover”的入口点存根,将在安装setuptools时创建。
couchdiscover:
` couchdb`容器:
*`couchdb_admin_user`:启用节点时要使用的用户名,必需。
*`couchdb_admin_pass`:启用节点时要使用的密码,必需。
*`erlang_cookie`:用作`.erlang.cookie`的cookie值,不需要,未设置时故障恢复到不安全的cookie值。
*`couchdb_cluster_size`:不需要,重写statefulset中的'spec.replicas'值,应该很少需要设置。除非你知道自己在做什么,否则不要设置。
\couchdiscover`容器:
*`logu level`:输出容器日志的日志级别。默认为“info”,大多数日志要么是info要么是warning level.
\最初,通过获取作为statefulset一部分的容器的主机名并对其进行解析,可以获得大量信息。这就是如何确定名称空间、以后如何计算主机名、要在api中查找的statefulset的名称、headless服务的名称、节点名、索引、节点是否为master等等。kubernetes api用于获取statefulset和entrypoint对象。分析entrypoint对象以获取“hosts”列表。然后为端口解析statefulset,然后解析环境,获取任何必要的外部引用的configmap或secret。通过查找环境中的密钥来解析凭据:`couchdb_admin_user`,`couchdb_admin_pass`。最后,预期的集群大小被设置为获取的statefulset中的副本数。您可以按照上述注释部分中的详细说明覆盖此项,但在大多数情况下应该是完全不必要的。
\main logic
main logic在“manage”模块的“clustermanager”对象的“run”方法中执行。我认为大部分都是相对严格的前卫。
`` python
couchdiscover.manage.clustermanager
def run(self):
“这里的主要逻辑是,一旦检索到所有环境信息,我们就从这里开始。”“
log.info('starting couchdiscover:%s',self.couch)
如果self.couch.disabled:
log.info('cluster disabled,enabling')
self.couch.enable()
elif self.couch.finished:
log.info('cluster already finished')
self.sleep_forever()
if self.env.first_node:
log.info(“看起来我是第一个节点”)
if self.env.single_node_cluster:
log.info('single node cluster detected')
self.couch.finish()
否则:
log.info(“看起来我不是第一个节点”)
self.couch.add_to_master()
如果self.env.last_节点:
log.info(“看起来我是最后一个节点”)
self.couch.finish()
否则:
log.info(“看起来我不是最后一个节点”)
self.sleep_forever()
```
[![构建状态](https://travis-ci.org/joeblackwaslike/couchdiscover.svg?branch=master)(https://travis-ci.org/joeblackwaslike/couchdiscover)[![Github回购](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)(https://github.com/joeblackwaslike/couchdiscover)[![pypi版本](https://img.shields.io/pypi/v/couchdiscover.svg)(https://pypi.python.org/pypi/couchdiscover)[![PYPI许可证](https://img.shields.io/pypi/l/couchdiscover.svg)](https://pypi.python.org/pypi/couchdiscover)[![Pypi控制盘](https://img.shields.io/pypi/wheel/couchdiscover.svg)(https://pypi.python.org/pypi/couchdiscover)[![PYPI版本](https://img.shields.io/pypi/pyversions/couchdiscover.svg)(https://pypi.python.org/pypi/couchdiscover)[!【Docker拉拽】(https://img.shields.io/docker/docker/拉拽/joeblackwakwaslike/couchdiscover.svg)(https://hub.docker.com/r/joeblackwakwaslike/couchdiscover/)
利用kubernetes和couchdb 2.0集群api用于自动创建couchdb 2.0集群的过程。与先前的bigcooch相比,这里的要求有很大的不同。
此模块有一个名为“couchdiscover”的入口点存根,将在安装setuptools时创建。
couchdiscover:
` couchdb`容器:
*`couchdb_admin_user`:启用节点时要使用的用户名,必需。
*`couchdb_admin_pass`:启用节点时要使用的密码,必需。
*`erlang_cookie`:用作`.erlang.cookie`的cookie值,不需要,未设置时故障恢复到不安全的cookie值。
*`couchdb_cluster_size`:不需要,重写statefulset中的'spec.replicas'值,应该很少需要设置。除非你知道自己在做什么,否则不要设置。
\couchdiscover`容器:
*`logu level`:输出容器日志的日志级别。默认为“info”,大多数日志要么是info要么是warning level.
\最初,通过获取作为statefulset一部分的容器的主机名并对其进行解析,可以获得大量信息。这就是如何确定名称空间、以后如何计算主机名、要在api中查找的statefulset的名称、headless服务的名称、节点名、索引、节点是否为master等等。kubernetes api用于获取statefulset和entrypoint对象。分析entrypoint对象以获取“hosts”列表。然后为端口解析statefulset,然后解析环境,获取任何必要的外部引用的configmap或secret。通过查找环境中的密钥来解析凭据:`couchdb_admin_user`,`couchdb_admin_pass`。最后,预期的集群大小被设置为获取的statefulset中的副本数。您可以按照上述注释部分中的详细说明覆盖此项,但在大多数情况下应该是完全不必要的。
\main logic
main logic在“manage”模块的“clustermanager”对象的“run”方法中执行。我认为大部分都是相对严格的前卫。
`` python
couchdiscover.manage.clustermanager
def run(self):
“这里的主要逻辑是,一旦检索到所有环境信息,我们就从这里开始。”“
log.info('starting couchdiscover:%s',self.couch)
如果self.couch.disabled:
log.info('cluster disabled,enabling')
self.couch.enable()
elif self.couch.finished:
log.info('cluster already finished')
self.sleep_forever()
if self.env.first_node:
log.info(“看起来我是第一个节点”)
if self.env.single_node_cluster:
log.info('single node cluster detected')
self.couch.finish()
否则:
log.info(“看起来我不是第一个节点”)
self.couch.add_to_master()
如果self.env.last_节点:
log.info(“看起来我是最后一个节点”)
self.couch.finish()
否则:
log.info(“看起来我不是最后一个节点”)
self.sleep_forever()
```