首 页 行业资讯 新车 试驾评测 养车用车 车型库

如何在Docker上部署Kubernetes

发布网友 发布时间:2022-04-20 17:07

我来回答

2个回答

懂视网 时间:2022-04-09 22:44

CouchDB是Apache组织发布的一款开源的、面向文档类型的NoSQL数据库。由Erlang编写,使用json格式保存数据。CouchDB以RESTful的格式提供服务

可以很方便的对接各种语言的客户端

CouchDB最大的竞争对手就是熟悉的MangoDB。它们的不同点比较会在另外一篇里面写入

CouchDB 目标是做下一代的Web应用存储系统

CouchDB下载,安装:

官网:http://couchdb.apache.org/ 目前只有2.0.0版本 2016年9月份

CouchDB 安装完成后自动启动,默认是5984


Docker下的安装配置:

1、先创建一个couchdb容器,并赋值给couch1

COUCH1=$(docker run -d -p 5984 -v /var/lib/couchdb couchdb)
root@ubuntu:~# echo $COUCH1
6d708f72e25e9f0d693aa5a8ce5afd1a61e945355f728f409bc5a90676e0524c

2、给couchDB中插入数据

  要确保你的HOST是可用的

$ HOST=localhost #这里如果localhost不行,就更换成主机ip
$ URL="http://$HOST:$(docker port $COUCH1 5984 | grep -o ‘[1-9][0-9]*$‘)/_utils/"
$ echo "Navigate to $URL in your browser, and use the couch interface to add data"

操作结果:

root@ubuntu:~# HOST=123.xx.xx.x8 #这里是公网ip就不显示出来了
root@ubuntu:~# URL="http://$HOST:$(docker port $COUCH1 5984 | grep -o ‘[1-9][0-9]*$‘)/_utils/"
root@ubuntu:~# docker port $COUCH1 5984 #这里映射到了宿主机32768端口,并监听所有ip
0.0.0.0:32768
root@ubuntu:~# echo "Navigate to $URL in your browser, and use the couch interface to add data"
Navigate to http://123.xx.xx.x8:32768/_utils/ in your browser, and use the couch interface to add data
# 打开浏览器输入http://123.xx.xx.x8:32768/_utils/ 将会显示couchDB的页面

技术分享


创建数据库账号

控制台页面的左边的主要部分列出了当前数据库,并提供了一个 Create Database … 的操作;右边的侧边栏呢,从上到下分别提供了 工具、 文档 、 诊断 和 当前数据库 3个菜单。最右下角是版本号和一句话:“Welcome to Admin Party! Everyone is admin. Fix this”,什么意思呢?就是说ConchDB默认用户都是admin,对于用惯了关系型数据库的我们,本能的就会感觉这并不安全,没错,其实就是不安全!!!!,所以,点击 Fix this 来新建一个用户吧。

技术分享


注意:如果使用中发现某些按钮是灰色的或者 Compact & Cleanup 一直在转圈等待,请先看看自己是不是管理员。

点击 Create Database … 并输入一个数据库名称就可以新建一个数据啦

技术分享

创建成功后会跳转到当前新建的数据库,如果我们返回Overview页面就会发现刚才新建的数据库已经被添加到列表中了。

技术分享

CouchDB的增删改操作【INSERT/UPDATE/DELETE】

在新建的数据库的管理页面中点击 New Document,我们就可以新建一个文档,其中会包含一个默认的Id字段作为唯一标识,我们可以不用管他,同时也可以点击 Add Field 来新增字段,这里假设我们新增一个人,字段如下图:

技术分享

点击右面的“source”按钮,就能看到json格式的内容

技术分享

点击上面的“Save doucement”来保存数据,然后再主页就能看到我们新创建的数据库了

技术分享

双击Field或者Value列的单元格可以更改字段名或字段值

点击右侧的绿色对勾按钮后,该字段的值将会被保存,此时切换到Source标签就可以看到json格式的数据

编辑完成后点击上方的 Save Document 按钮就可以将刚才的json数据保存到数据库中,保存成功后系统会自动为我们添加一个 rev 字段,这个字段代表当前文档的版本号


更新操作呢也比较简单,只需要单击当前文档的Key或者双击Value就可以进入编辑页面,在编辑页面中不但能修改字段的Key/Value,还可以新增和删除字段,同样,点击 Save Document 即可保存当前修改,同时,我们可以注意到,该文档的 rev 值已经发生了变化,这代表该文档的版本号已经被更新

技术分享

同样,进入当前记录的详情页我们就可以看到 Delete Document 按钮,点击之后当前文档就会被删除。

但是,值得注意的是,当我们使用 Delete Document 操作将文档删除后,表面看是没有数据了,但是该数据仍然占用了那么多空间,并没有减少,如下图:

技术分享

这时我们需要进入数据库详情页,使用 Compact & Cleanup… 中的 Compact Database 操作来清理被占用的空间,如果发现此功能点击之后一直在转圈等待,去看看自己是不是管理员用户吧。


使用Docker再次创建一个couchDB

 COUCH2=$(docker run -d -p 5984 --volumes-from $COUCH1 couchdb)

使用浏览器浏览第二个数据库

HOST=localhost #这里如果localhost不行,就更换成主机ip
URL="http://$HOST:$(docker port $COUCH2 5984 | grep -o ‘[1-9][0-9]*$‘)/_utils/"
echo "Navigate to $URL in your browser, and use the couch interface to add data"

这里可以看到数据已经同步到couchdb的第二台上面临

技术分享


使用 cURL 通过 RESTful API 对 CouchDB 进行增删查改

Tips: 对cURL还不太了解的亲们可以搜索下,很好用的工具,可以从这里下载: http://curl.haxx.se/download/

注意:为了测试方便,我们删除原来的数据库。

前面已经介绍过,CouchDB支持使用RESTful API的方式来对数据进行操作,例如,我们在浏览器中输入 http://x.x.x.x:32768/demo 就可以查看demo数据库中详细信息。如图:

技术分享

下面是借鉴别人的操作流程,自己没有时间敲了,大家随意感受一下CouchDB流畅的RESTful操作方式:

 # 获取CouchDB相关信息
curl -X GET http://127.0.0.1:5984
{"couchdb":"Welcome","uuid":"a853c053a5a54a4d3ccbaad0d9ffd3b0","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}}

# 创建demo数据库(需要admin权限,参照下一条命令)
curl -X PUT http://127.0.0.1:5984/demo
{"error":"unauthorized","reason":"You are not a server admin."}

# 使用用户名密码登录CouchDB,并创建demo数据库
curl -X PUT http://username:password@127.0.0.1:5984/demo
{"ok":true}

# 查看所有数据库
curl -X GET http://127.0.0.1:5984/_all_dbs
["_replicator","_users","demo"]

# 查看demo数据库相关信息
curl -X GET http://127.0.0.1:5984/demo
{"db_name":"demo","doc_count":0,"doc_del_count":0,"update_seq":0,"purge_seq":0,"compact_running":false,"disk_size":79,"data_size":0,"instance_start_time":"1452000207199340","disk_format_version":6,"committed_update_seq":0}

# 向demo数据库中添加一个文档(自动生成Id),注意:windows下需要使用Content-Type:application/json的HttpHeader
curl -H "Content-Type:application/json"  -X POST http://127.0.0.1:5984/demo -d {"name":"fooly"}
{"ok":true,"id":"3ebb59dd78ff448f283f48817800321c","rev":"1-0e4ea534f2c1e7f05e21804b5f2f7a71"}

# 查看demo数据库中的所有文档
curl -X GET http://127.0.0.1:5984/demo/_all_docs
{"total_rows":1,"offset":0,"rows":[
{"id":"3ebb59dd78ff448f283f48817800321c","key":"3ebb59dd78ff448f283f48817800321c","value":{"rev":"1-0e4ea534f2c1e7f05e21804b5f2f7a71"}}
]}

# 获取一个uuid
curl -X GET http://127.0.0.1:5984/_uuids
{"uuids":["3ebb59dd78ff448f283f4881780033c0"]}

# 向demo数据库中添加一个文档(使用获取到的uuid作为Id)
curl -H "Content-Type:application/json"  -X PUT http://127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0 -d {"name":"momo314"}
{"ok":true,"id":"3ebb59dd78ff448f283f4881780033c0","rev":"1-eb393d36ac1ad38ada8361d94fc5d0b6"}

# 更新指定Id的文档(但是失败了,因为CouchDB是按版本提交的,同一个源提交多次会造成一定的混乱。所以,需要指定文档版本进行控制。)
curl -H "Content-Type:application/json"  -X PUT http://127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0 -d {"name":"momo314","age":18}
{"error":"conflict","reason":"Document update conflict."}

# 更新指定Id和指定版本的文档
curl -H "Content-Type:application/json"  -X PUT http://127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0 -d {"_rev":"1-eb393d36ac1ad38ada8361d94fc5d0b6","name":"momo314","age":18}
{"ok":true,"id":"3ebb59dd78ff448f283f4881780033c0","rev":"2-5d081e17588c03c27340035e420edecd"}

# 获取指定Id的文档内容
curl -X GET http://127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0
{"_id":"3ebb59dd78ff448f283f4881780033c0","_rev":"2-5d081e17588c03c27340035e420edecd","name":"momo314","age":18}

# 删除指定Id和rev版本号的文档
curl -X DELETE http://username:password@127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0?rev=2-5d081e17588c03c27340035e420edecd
{"ok":true,"id":"3ebb59dd78ff448f283f4881780033c0","rev":"2-5d081e17588c03c27340035e420edecd"}

# 查看demo数据库中的所有文档(刚才的文档确实被删除掉了)
curl -X GET http://127.0.0.1:5984/demo/_all_docs
{"total_rows":1,"offset":0,"rows":[
{"id":"3ebb59dd78ff448f283f48817800321c","key":"3ebb59dd78ff448f283f48817800321c","value":{"rev":"1-0e4ea534f2c1e7f05e21804b5f2f7a71"}}
]}

# 删除demo数据库(需要admin权限,参照下一条命令)
curl -X DELETE http://127.0.0.1:5984/demo
{"error":"unauthorized","reason":"You are not a server admin."}

# 使用用户名密码登录CouchDB,并删除demo数据库
curl -X DELETE http://username:password@127.0.0.1:5984/demo
{"ok":true}

# 查看所有数据库(demo数据库确实被删除掉了)
curl -X GET http://127.0.0.1:5984/_all_dbs
["_replicator","_users"]

博文参考:http://magic-conch.cool/article/2016/01/05/windows-couchdb-1

官网参考:https://docs.docker.com/engine/examples/couchdb_data_volumes/#create-first-database


本文出自 “圈中一鸟” 博客,谢绝转载!

Docker部署CouchDB

标签:couchdb   docker   

热心网友 时间:2022-04-09 19:52

为了解决跨minion之间Pod的通信问题,我们在每个minion上安装Open vSwtich,并使用GRE或者VxLAN使得跨机器之间Pod能相互通信,本文使用GRE,而VxLAN通常用在需要隔离的大规模网络中。对于Open vSwitch的具体安装步骤,可参考这篇博客,我们在这里就不再详细介绍安装步骤了。安装完Open vSwitch后,接下来便建立minion1和minion2之间的隧道。首先在minion1和minion2上建立OVS Bridge,
[root@minion1 ~]# ovs-vsctl add-br obr0

接下来建立gre,并将新建的gre0添加到obr0,在minion1上执行如下命令,
[root@minion1 ~]# ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.230.5

在minion2上执行,
[root@minion2 ~]# ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.230.4

至此,minion1和minion2之间的隧道已经建立。然后我们在minion1和minion2上创建Linux网桥kbr0替代Docker默认的docker0(我们假设minion1和minion2都已安装Docker),设置minion1的kbr0的地址为172.17.1.1/24, minion2的kbr0的地址为172.17.2.1/24,并添加obr0为kbr0的接口,以下命令在minion1和minion2上执行。
[root@minion1 ~]# brctl addbr kbr0 //创建linux bridge
[root@minion1 ~]# brctl addif kbr0 obr0 //添加obr0为kbr0的接口
[root@minion1 ~]# ip link set dev docker0 down //设置docker0为down状态
[root@minion1 ~]# ip link del dev docker0 //删除docker0

为了使新建的kbr0在每次系统重启后任然有效,我们在/etc/sysconfig/network-scripts/目录下新建minion1的ifcfg-kbr0如下:
DEVICE=kbr0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.17.1.1
NETMASK=255.255.255.0
GATEWAY=172.17.1.0
USERCTL=no
TYPE=Bridge
IPV6INIT=no

同样在minion2上新建ifcfg-kbr0,只需修改ipaddr为172.17.2.1和gateway为172.17.2.0即可,然后执行systemctl restart network重启系统网络服务,你能在minion1和minion2上发现kbr0都设置了相应的IP地址。为了验证我们创建的隧道是否能通信,我们在minion1和minion2上相互ping对方kbr0的IP地址,从下面的结果发现是不通的,经查找这是因为在minion1和minion2上缺少访问172.17.1.1和172.17.2.1的路由,因此我们需要添加路由保证彼此之间能通信。
[root@minion1 network-scripts]# ping 172.17.2.1
PING 172.17.2.1 (172.17.2.1) 56(84) bytes of data.
^C
--- 172.17.2.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1000ms

[root@minion2 ~]# ping 172.17.1.1
PING 172.17.1.1 (172.17.1.1) 56(84) bytes of data.
^C
--- 172.17.1.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1000ms

由于通过ip route add添加的路由会在下次系统重启后失效,为此我们在/etc/sysconfig/network-scripts目录下新建一个文件route-eth0存储路由,这里需要注意的是route-eth0和ifcfg-eth0的黑体部分必须保持一致,否则不能工作,这样添加的路由在下次重启后不会失效。为了保证两台minion的kbr0能相互通信,我们在minion1的route-eth0里添加路由172.17.2.0/24 via 192.168.230.5 dev eno16777736,eno16777736是minion1的网卡,同样在minion2的route-eth0里添加路由172.17.1.0/24 via 192.168.230.4 dev eno16777736。重启网络服务后再次验证,彼此kbr0的地址可以ping通,如:
[root@minion2 network-scripts]# ping 172.17.1.1
PING 172.17.1.1 (172.17.1.1) 56(84) bytes of data.
bytes from 172.17.1.1: icmp_seq=1 ttl= time=2.49 ms
bytes from 172.17.1.1: icmp_seq=2 ttl= time=0.512 ms
^C
--- 172.17.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.512/1.505/2.498/0.993 ms

Kubernetes1.25.6部署文档 使用cri-docker部署K8s1.25.6 Harbor、Docker和Kubernets的简单使用 ARM CPU架构下安装部署Docker + Rancher + K8S 说明文档 k8s集群部署,手把手教你部署集群,最新版本1.24.3 基于Kind的Kubernetes环境部署 linux安装部署k8s(kubernetes)和解决遇到的坑 Kubernetes v1.25.0集群搭建实战案例(新版本含Docker容器运行时)_百度... 使用KubeKey v3.1.1 离线部署原生 Kubernetes v1.28.8 实战 如何在新版本kubernetes中使用docker? kubernetes(k8s) - 实战进阶篇:搭建Registry&Harbor私有仓库、Dockerfil... 如何贯彻落实上级部署 在贯彻落实上级部署要求方面 在工作部署上定实策 在年初工作部署会上提出的要求 落实上级部署存在问题 部署上务必 六增六强部署上 部署上统筹 落实上级部署方面
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com