转 Docker Swarm vs Kubernetes

容器化已经改变我们部署软件和微服务开发的方式。如果你刚听说容器, 这篇博客帮你入门。

什么是容器编排

容器能够把服务打包成基本单元,你可以把它部署到任何地方:本地机器、测试环境或者生产系统。但是在生产环境中,你却不能把所有容器都运行在一台机器上,因为会用光系统的资源。你需要多个机器(或者节点)以集群(不同机器通过网络通信)的方式运行,然后把容器部署到集群中。现在问题变成,如果我有多个机器/节点组成的集群,我该如何决定容器运行在哪台机器上呢?有了编排软件,你只需要告诉它我要部署容器,剩下的事情交给编排软件即可。

编排软件负责以下几点:

  • 选择最适合部署容器的机器。最适合指的是拥有最多空闲资源,或者说如果容器能获得更多的运行内存,比如Redis。
  • 发生机器故障,能自动把故障机器上的容器部署到其它节点。
  • 如果集群添加了新的机器,重新平衡容器的分配情况。
  • 如果容器故障了,重启它。
  • ...

现在你已经理解为什么需要容器编排了,下面我们一起看下当下最流行的两个选择以及它们间的对比。

Docker Swarm

Swarm是为Docker开发原生的集群管理引擎。任何适配Docker container的工具、服务或软件都可以很好地兼容Swarm。下面是一些Docker Swarm的优缺点:

优点:

  • 容易上手,“开箱即用”的用户体验。
  • 零“单点故障”(single-point-of-failure)架构。
  • 自动生成证书,默认提供安全机制。
  • 向后兼容组件。
  • 开源

缺点:

  • 处于项目启动/早期开发阶段。我们不推荐商业应用上使用。随着时间推移,它会更加成熟。
  • 功能简单有限。

Kubernetes

Kubernetes是一个Google主导的生产就绪、企业级、成熟的编排平台。它的利弊有:

优点:

  • 生产就绪、企业级。它被很多公司用于规模生产环境。
  • 相比Docker Swarm,它更成熟。
  • 可用于公有云、私有云、混合云等多种云环境。
  • 模块化。
  • 自愈能力:自动布局、自动重启、自动备份、自动伸缩。
  • 开源。
  • 因为模块化设计,可被用于部署任何架构。

缺点:

  • 难于部署。如果不使用云服务商Azure,Google或者Amazon,在你的集群中搭建Kubernetes环境非常困难。大部分云服务商都提供了一键安装功能。
  • 比Docker Swarm更陡峭的学习曲线。它不使用Docker CLI。

CloudBoost生产环境使用了60节点的Kubunertes集群,我们是无服务+BaaS(backend as a service)架构,开发者不用关心重复的任务像:认证、通知、邮件服务、管理和扩展数据库、文件、缓存等,这减少了一半的开发时间。我们使用MongoDB和Redis集群做数据存储,NodeJS支撑我们大部分微服务。CloudBoost完全开源,遵循Apache 2 License开源协议,所以你可以随意修改代码,在你的服务器上免费安装。GitHub地址 点这里 。

我们还提供了一个Docker Cloud/Compose file ,你可以直接使用它安装CloudBoost。

如果你希望深入了解我们如何在生产环境使用Kubernetes。可以阅读 这篇博客 。

如果你希望快速启动集群,不运行关键应用,或者快速入门编排工具,我推荐Docker Swarm。如果你的场景接近商业环境,你应该考虑Kubernetes。

 

 

##########sample 1       安装redis 集群

 

1、上传软件包
mkdir -p /ddddd/redis
cd /ddddd/redis/
scp cradmin@10.241.21.200:/soft/redis/redis-5.0.10.tar.gz /ddddd/redis/
或者(for 4.0.11)
wget http://56.18.99.206/redis/redis-4.0.11.tar.gz
wget http://56.18.99.206/redis/ruby-2.5.1.tar.gz
wget http://56.18.99.206/redis/redis-4.0.1.gem

2、cradmin用户下解压并安装
cd /ddddd/redis && tar -xf redis-5.0.10.tar.gz
cd /ddddd/redis/redis-5.0.10/src && make install
或者
cd /ddddd/redis/redis-*/src && make install

3、安装依赖包和建用户授权
yum install gcc -y
yum install ruby -y
groupadd -g 3202 redis
useradd -u 3202 -g redis -G redis redis
chown -R redis. /ddddd/redis
chmod 775 /ddddd
chmod 775 /ddddd/redis
su - redis

4、配置节点1 实例,一共2个端口,一共2个实例 实例1
cd /ddddd/redis/redis-5.0.10
或者
cd /ddddd/redis/redis-*

mv redis.conf redis.conf-bak
mv sentinel.conf sentinel.conf-bak
mkdir -p /ddddd/redis/7001
cd /ddddd/redis/7001
mkdir -p /ddddd/redis/7001/data
mkdir -p /ddddd/redis/7001/log

vi /ddddd/redis/7001/conf/redis.conf

port 7001
cluster-enabled yes
cluster-node-timeout 5000
cluster-config-file nodes.conf
appendonly yes
daemonize yes
logfile /ddddd/redis/7001/conf/redis.log
pidfile /ddddd/redis/7001/conf/redis.pid
dir /ddddd/redis/7001/data
maxmemory 1gb
maxmemory-policy volatile-lru
masterauth Test@5010
requirepass Test@5010

5、配置节点1 实例 实例2
mkdir -p /ddddd/redis/7002
cd /ddddd/redis/7002
mkdir -p /ddddd/redis/7002/data
mkdir -p /ddddd/redis/7002/log
vi /ddddd/redis/7002/conf/redis.conf


port 7002
cluster-enabled yes
cluster-node-timeout 5000
cluster-config-file nodes.conf
appendonly yes
daemonize yes
logfile /ddddd/redis/7002/conf/redis.log
pidfile /ddddd/redis/7002/conf/redis.pid
dir /ddddd/redis/7002/data
maxmemory 1gb
maxmemory-policy volatile-lru
masterauth Test@5010
requirepass Test@5010

6、配置 节点2 实例3
mkdir -p /ddddd/redis/7003
cd /ddddd/redis/7003
mkdir -p /ddddd/redis/7003/data
mkdir -p /ddddd/redis/7003/log
vi /ddddd/redis/7003/conf/redis.conf

port 7003
cluster-enabled yes
cluster-node-timeout 5000
cluster-config-file nodes.conf
appendonly yes
daemonize yes
logfile /ddddd/redis/7003/conf/redis.log
pidfile /ddddd/redis/7003/conf/redis.pid
dir /ddddd/redis/7003/data
maxmemory 1gb
maxmemory-policy volatile-lru
masterauth Test@5010
requirepass Test@5010

7、配置节点2 实例4
mkdir -p /ddddd/redis/7004
cd /ddddd/redis/7004
mkdir -p /ddddd/redis/7004/data
mkdir -p /ddddd/redis/7004/log
vi /ddddd/redis/7004/conf/redis.conf

port 7004
cluster-enabled yes
cluster-node-timeout 5000
cluster-config-file nodes.conf
appendonly yes
daemonize yes
logfile /ddddd/redis/7004/conf/redis.log
pidfile /ddddd/redis/7004/conf/redis.pid
dir /ddddd/redis/7004/data
maxmemory 1gb
maxmemory-policy volatile-lru
masterauth Test@5010
requirepass Test@5010

8、配置节点3 实例5
mkdir -p /ddddd/redis/7005
cd /ddddd/redis/7005
mkdir -p /ddddd/redis/7005/data
mkdir -p /ddddd/redis/7005/log
vi /ddddd/redis/7005/conf/redis.conf

port 7005
cluster-enabled yes
cluster-node-timeout 5000
cluster-config-file nodes.conf
appendonly yes
daemonize yes
logfile /ddddd/redis/7005/conf/redis.log
pidfile /ddddd/redis/7005/conf/redis.pid
dir /ddddd/redis/7005/data
maxmemory 1gb
maxmemory-policy volatile-lru
masterauth Test@5010
requirepass Test@5010


9、配置节点3 实例6
mkdir -p /ddddd/redis/7006
cd /ddddd/redis/7006
mkdir -p /ddddd/redis/7006/data
mkdir -p /ddddd/redis/7006/log
vi /ddddd/redis/7006/conf/redis.conf

port 7006
cluster-enabled yes
cluster-node-timeout 5000
cluster-config-file nodes.conf
appendonly yes
daemonize yes
logfile /ddddd/redis/7006/conf/redis.log
pidfile /ddddd/redis/7006/conf/redis.pid
dir /ddddd/redis/7006/data
maxmemory 1gb
maxmemory-policy volatile-lru
masterauth Test@5010
requirepass Test@5010

10、home目录下编辑启动脚本
cd ~
vi start-redis.sh

主机1:
#sh start-redis.sh
redis-server /ddddd/redis/7001/conf/redis_7001.conf
redis-server /ddddd/redis/7002/conf/redis_7002.conf

主机2:
redis-server /ddddd/redis/7003/conf/redis_7003.conf
redis-server /ddddd/redis/7004/conf/redis_7004.conf

主机3
redis-server /ddddd/redis/7005/conf/redis_7005.conf
redis-server /ddddd/redis/7006/conf/redis_7006.conf
ps -ef|grep redis-|grep -v grep

11、使用启动脚本启redis
sh start-redis.sh
主机1:
#sh start-redis.sh
redis-server /ddddd/redis/7001/conf/redis_7000.conf
redis-server /ddddd/redis/7002/conf/redis_7001.conf

主机2:
redis-server /ddddd/redis/7003/conf/redis_7003.conf
redis-server /ddddd/redis/7004/conf/redis_7002.conf

主机3
redis-server /ddddd/redis/7005/conf/redis_7005.conf
redis-server /ddddd/redis/7006/conf/redis_7004.conf
ps -ef|grep redis-|grep -v grep


12、 redis 用户跑
12.1 (for redis 5), 创建集群(替换IP为实际)
redis-cli -a Test@5010 --cluster create IP:7001 IP:7002 IP:7003 IP:7004 IP:7005 IP:7006 --cluster-replicas 1
--根据提示确认即可

redis-cli -a Test@5010 --cluster create 10.241.118.20:7001 10.241.118.20:7002 10.241.118.20:7003 10.241.118.20:7004 10.241.118.20:7005 10.241.118.20:7006 --cluster-replicas 1

12.2 (for redis 4) 创建集群
/ddddd/redis/redis-4.0.11/src/redis-trib.rb create --replicas 1 58.6.8.86:7000 58.6.8.86:7001 58.6.8.87:7002 58.6.8.87:7003 58.6.8.88:7004 58.6.8.88:7005
如果碰到ruby 版本过低的问题,
请参考 《SSDP部署安装说明书-V4.1》page 12,13

说明:redis 4 需要如下配件
安装集群搭建环境以及工具
yum install ruby(安装ruby)
yum install rubygems(ruby的包管理器)
gem install redis-4.0.0.gem(安装ruby脚本运行使用的第三方包,点击下载)
参考文档https://blog.csdn.net/fly910905/article/details/85274463


如果碰到报错gem install时报错:Unable to require openssl,install OpenSSL and rebuild ruby (preferred) or
参考文档https://blog.csdn.net/xiaocong66666/article/details/82892808


如果遇到Redis集群创建can't connect to nodeXXX问题解决
请参考 《SSDP部署安装说明书-V4.1》page 13


13、连库确认状态 -a 后面跟着密码
redis-cli -a Test@5010 -c -h IP -p 7001

redis-cli -a Test@5010 -c -h 10.241.118.20 -p 7001
--状态为3主3从即可
cluster nodes
info

 


14.停下redis:

ps -ef|grep redis
也可执行以下命令来关闭redis进程

pkill -9 redis

 


附录:
15.参考集群cluster配置文件

主节点1:
file1:/ddddd/data/7000/conf/redis_7000.conf
bind 10.194.42.30
requirepass c2r3osss
port 7000
pidfile /ddddd/data/7000/conf/redis_7000.pid
logfile /ddddd/data/7000/log/redis_7000.log
daemonize yes
cluster-enabled yes
cluster-config-file /ddddd/data/7000/conf/nodes-7000.conf
cluster-node-timeout 15000
appendonly yes
dir /ddddd/data/7000/data
masterauth c2r3osss
maxmemory 2147483648


file2:/ddddd/data/7001/conf/redis_7001.conf
bind 10.194.42.30
requirepass c2r3osss
port 7001
pidfile /ddddd/data/7001/conf/redis_7001.pid
logfile /ddddd/data/7001/log/redis_7001.log
daemonize yes
cluster-enabled yes
cluster-config-file /ddddd/data/7001/conf/nodes-7001.conf
cluster-node-timeout 15000
appendonly yes
dir /ddddd/data/7001/data
masterauth c2r3osss
maxmemory 2147483648


主节点2
file1:/ddddd/data/7002/conf/redis_7002.conf

bind 10.194.42.31
requirepass c2r3osss
port 7002
pidfile /ddddd/data/7002/conf/redis_7002.pid
logfile /ddddd/data/7002/log/redis_7002.log
daemonize yes
cluster-enabled yes
cluster-config-file /ddddd/data/7002/conf/nodes-7002.conf
cluster-node-timeout 15000
appendonly yes
dir /ddddd/data/7002/data
masterauth c2r3osss
maxmemory 2147483648


file2: /ddddd/data/7003/conf/redis_7003.conf
bind 10.194.42.31
requirepass c2r3osss
port 7003
pidfile /ddddd/data/7003/conf/redis_7003.pid
logfile /ddddd/data/7003/log/redis_7003.log
daemonize yes
cluster-enabled yes
cluster-config-file /ddddd/data/7003/conf/nodes-7003.conf
cluster-node-timeout 15000
appendonly yes
dir /ddddd/data/7003/data
masterauth c2r3osss
maxmemory 2147483648


主节点3
file 3 /ddddd/data/7005/conf/redis_7005.conf
bind 10.194.42.32
requirepass c2r3osss
port 7005
pidfile /ddddd/data/7005/conf/redis_7005.pid
logfile /ddddd/data/7005/log/redis_7005.log
daemonize yes
cluster-enabled yes
cluster-config-file /ddddd/data/7005/conf/nodes-7005.conf
cluster-node-timeout 15000
appendonly yes
dir /ddddd/data/7005/data
masterauth c2r3osss
maxmemory 2147483648


file2: /ddddd/data/7004/conf/redis_7004.conf
bind 10.194.42.32
requirepass c2r3osss
port 7004
pidfile /ddddd/data/7004/conf/redis_7004.pid
logfile /ddddd/data/7004/log/redis_7004.log
daemonize yes
cluster-enabled yes
cluster-config-file /ddddd/data/7004/conf/nodes-7004.conf
cluster-node-timeout 15000
appendonly yes
dir /ddddd/data/7004/data
masterauth c2r3osss
maxmemory 2147483648

 

 #########sample 2

1.1 Redis安装

1、 解压redis-stable.tar.gz软件包

$ cd  /appdata/software/                             ## 进入软件包存放的默认目录

$ tar -zxvf ./redis-stable.tar.gz -C  /appdata/redis        ## 解压软件包

2、 编译安装redis

$  cd  /appdata/redis/redis-stable                     ## 进入解压后软件包位置

$  make PREFIX=/appdata/redis/ install               ## redis的命名安装到指定目录/appdata/redis/

$  /appdata/redis/bin/redis-server –v                  ##  查看redis版本

Redis server v=4.0.11 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=9bbbbe3dc2f41f67

3、 查看和安装redis集群依赖文件

$  rpm -qa|grep ruby                                 ##  查看ruby是否安装

$  sudo yum install ruby                              ##  如未安装采用yum源安装

$  rpm -qa|grep rubygem                             ##  查看rubygem是否安装

$  yum install rubygems                              ##  如未安装采用yum源安装

$  gem install /appdata/software/ redis-4.0.1.gem        ##  安装rubby redis 

安装redis依赖如出现如下错误(常见,这个包比较新,rubby需要升级):

ERROR:  Could not find a valid gem '/appdata/software/' (>= 0), here is why:

          Unable to download data from https://rubygems.org/ - no such name (https://rubygems.org/latest_specs.4.8.gz)

ERROR:  Error installing redis-4.0.1.gem:

       redis requires Ruby version >= 2.2.2.

当出现如下问题时,需要对ruby进行升级,ruby –v查看版本

Ruby升级(root):

#  tar -zxvf ./ruby-2.5.1.tar.gz -C  /appdata/ruby        ##  解压rubby 2.5.1安装包

#  cd /appdata/ruby/ruby-2.5.1                        ##  进入解压目录

#  ./configure --prefix=/usr/local/ruby                      

#  make && make install 

#  mv /usr/bin/ruby /usr/bin/ruby_bak                   ##备份原来的ruby路劲(如果原来有的话)

#  ln -s /usr/local/ruby/bin/ruby     /usr/bin/ruby           ##建立新的链接                         

再次安装(appuser):

$  sudo gem install /appdata/software/redis-4.0.1.gem       ##  安装rubby redis 

4、 准备配置文件

$ mkdir -p /appdata/redis/conf                           ##  创建目录,用来存放所有redis的配置文件

$ cp /appdata/redis/redis-stable/redis.conf  /appdata/redis/conf/cluster_7000.conf

$ cp /appdata/redis/redis-stable/redis.conf  /appdata/redis/conf/cluster_7001.conf

$ cp /appdata/redis/redis-stable/redis.conf  /appdata/redis/conf/cluster_7002.conf

$ cp /appdata/redis/redis-stable/redis.conf  /appdata/redis/conf/cluster_7003.conf

$ cp /appdata/redis/redis-stable/redis.conf  /appdata/redis/conf/cluster_7004.conf

$ cp /appdata/redis/redis-stable/redis.conf  /appdata/redis/conf/cluster_7005.conf

##redis.conf模板文件中拷贝6份, redis7000.conf代表7000端口配置,redis7001.conf代表7001端口配置(多台机器时,使用IP+端口的方式区分),以此类推,分别在每个配置文件中修改添加如下内容:

bind 10.0.97.162

requirepass 123456

port 7000 

pidfile /var/run/redis_7000.pid

logfile /appdata/redis/logs/redis_7000.log

daemonize yes

cluster-enabled yes

cluster-config-file nodes-7000.conf

cluster-node-timeout 15000

appendonly yes

dir ./

masterauth 123456

5、 启动redis

$ mkdir /appdata/redis/node

$ cd /appdata/redis/node

$  /appdata/redis/bin/redis-server   /appdata/redis/conf/cluster_7000.conf

$  /appdata/redis/bin/redis-server   /appdata/redis/conf/cluster_7001.conf  

$  /appdata/redis/bin/redis-server  /appdata/redis/conf/cluster_7002.conf  

$  /appdata/redis/bin/redis-server   /appdata/redis/conf/cluster_7003.conf  

$  /appdata/redis/bin/redis-server   /appdata/redis/conf/cluster_7004.conf  

$  /appdata/redis/bin/redis-server   /appdata/redis/confcluster_7005.conf  

修改redis集群连接默认密码:

$ find ./ -name client.rb    #rubyusr lib下

/xxx/lib/redis/client.rb

比如

/usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-4.0.1/lib/redis/client.rb

找到redis client设置,修改passwordnil变为”123456”,redis设置的密码

 

启动集群

$ /appdata/redis/redis-stable/src/redis-trib.rb create --replicas 1   10.0.97.162:7000 10.0.97.162:7001 10.0.97.162:7002 10.0.97.162:7003 10.0.97.162:7004 10.0.97.162:7005

 

posted @ 2017-06-20 16:12  feiyun8616  阅读(430)  评论(0编辑  收藏  举报