文档章节

calico在docker上的部署及验证

openthings
 openthings
发布于 2018/05/24 23:01
字数 1310
阅读 89
收藏 1

calico在docker上的部署及验证

1. 背景

以下的部署以五台服务器环境为例:

服务器1: hostname为etcdnode1, IP为192.168.56.100
服务器2: hostname为etcdnode2, IP为192.168.56.101
服务器3: hostname为etcdnode3, IP为192.168.56.102
服务器2: hostname为hostnode1, IP为192.168.56.200
服务器3: hostname为hostnode2, IP为192.168.56.201

其中,etcdnode1,etcdnode2和etcdnode3将部署etcd,作为calico网络的后端分布式存储;hostnode1和hostnode2将部署calico网络。

软件背景:

•   Ubuntu 16.04
•   etcd - v3.1.10 
•   Docker
•   calicoctl - v1.6.1
•   calico/node image - v.2.6.2
•   calico, calico-ipam plugins - v1.11.0

2. 部署

2.1. etcd部署

etcdnode1,etcdnode2和etcdnode3部署etcd,分别执行下面的命令。

2.1.1. 安装etcd

# cd /usr/local
# curl -Lhttps://github.com/coreos/etcd/releases/download/v3.1.10/etcd-v3.1.10-linux-amd64.tar.gz-o etcd-v3.1.10-linux-amd64.tar.gz
# tar -zxf etcd-v3.1.9-linux-amd64.tar.gz
# cd etcd-v3.1.9-linux-amd64
# cp etcd etcdctl /usr/bin
# mkdir -p /var/lib/etcd
# chmod -R a+rw /var/lib/etcd

2.1.2. 创建systemd服务文件

使用vi打开/etc/systemd/system/etcd.service文件。

[Unit]
Description=etcd
Documentation=https://github.com/coreos/etcd

[Service]
Type=notify
Restart=always
RestartSec=5s
LimitNOFILE=40000
TimeoutStartSec=0 

ExecStart=/usr/bin/etcd --name ${local_hostname} \
   --data-dir /var/lib/etcd \
   --listen-client-urls http://0.0.0.0:2379 \
   --listen-peer-urls http://0.0.0.0:2380 \
   --advertise-client-urls http://${local_IP}:2379\
   --initial-advertise-peer-urls http://${local_IP}:2380 \
   --initial-cluster *etcdnode1=http://192.168.56.100:2380,etcdnode2=http://192.168.56.101:2380, etcdnode3=http:// 192.168.56.102:2380 *
   --initial-cluster-token my-etcd-token \
   --initial-cluster-state new

[Install]
WantedBy=multi-user.target

这里需要注意的是,需要将local_hostname、local_IP都替换为节点自己的hostname和IP地址。

2.1.3. 启动etcd服务

待所有etcd节点都同时执行上面的步骤后,再同时执行下面的步骤。

# systemctl daemon-reload
# systemctl enable etcd.service
# systemctl start etcd.service

2.1.4. 检查etcd状态

# etcdctl cluster-health               // 检查集群的健康状态
# etcdctl member list                  // 返回集群的成员列表

2.2. docker部署

hostnode1和hostnode2节点都需要配置。

2.2.1. 安装docker

# apt -y install docker.io

2.2.2. 修改daemon.json

Docker守护进程需要/etc/docker/daemon.json文件中配置etcd的存储和通知功能。可通过vi打开/etc/docker/daemon.json,并将${local_IP}替换为各dockerhost自己的IP地址。

{
    "cluster-store":"**etcd://192.168.56.100:2379, 192.168.56.101:2379,192.168.56.102:2379**",
    "cluster-advertise":"${local_IP}:2375",
    "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}

2.2.3. 重启docker服务

# systemctl restart docker.service
  • 1

重启需要一定的时间,完成后,确认docker配置是否生效

# docker info
…
Cluster Store: etcd://192.168.56.100:2379,192.168.56.101:2379, 192.168.56.102:2379
Cluster Advertise: 192.168.56.200:2375
Insecure Registries:
  127.0.0.0/8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.3. calico部署

每个docker host都需要配置。

2.3.1. 下载calico

PS:这里我们下载和使用的是v1.6.1版本,截止到现在,calico已经出现v3.1.1版本了。

# wget -O /usr/local/bin/calicoctlhttps://github.com/projectcalico/calicoctl/releases/download/v1.6.1/calicoctl
# chmod +x /usr/local/bin/calicoctl
# mkdir /var/lib/calico
# curl -L -o /var/lib/calico/calicohttps://github.com/projectcalico/cni-plugin/releases/download/v1.11.0/calico
# curl -L -o/var/lib/calico/calico-ipamhttps://github.com/projectcalico/cni-plugin/releases/download/v1.11.0/calico-ipam
# chmod +x /var/lib/calico/calico
# chmod +x/var/lib/calico/calico-ipam
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.3.2. 增加calico配置

# mkdir -p /etc/calico
  • 1

然后修改calico的配置,在/etc/calico/calicoctl.cfg文件增加以下内容。这里,主要是增加etcd终端的配置,如果有多个etcd节点,可以使用逗号连接。

apiVersion: v1

kind: calicoApiConfig

metadata:

spec:

 datastoreType: "etcdv2"

 etcdEndpoints: "http:// 192.168.56.100:2379,http:// 192.168.56.101:2379,http://192.168.56.102:2379"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.3.3. 设置内核网络参数

Calico要求开启“net.ipv4.conf.all.rp_filter”和“net.ipv4.ip_forward”等参数,但有些发行版默认并未开启这些参数,因此需要手动开启。

# echo “net.ipv4.conf.all.rp_filter=1”>> /etc/sysctl.conf

# echo “net.ipv4.ip_forward=1” >>/etc/sysctl.conf

# sysctl -p
  • 1
  • 2
  • 3
  • 4
  • 5

2.3.4. 启动calico/node容器

启动calico/node容器,可能需要联网下载对应的镜像。另外,${local_IP}需要替换为各自的docker host的IP地址。

然后:

# calicoctl node run--node-image=calico/node:v2.6.2 --ip={local_IP}
  • 1

检查连接状态。

# calicoctl node status
Calico process is running.

IPv4 BGP status
+----------------+-------------------+-------+------------+-------------+
| PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE    |    INFO    |
+----------------+-------------------+-------+------------+-------------+
| 192.168.56.201 | node-to-node mesh| up    | 2017-11-06 | Established |
+----------------+-------------------+-------+------------+-------------+
IPv6 BGP status
No IPv6 peers found.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.3.5. 创建docker网络

注意:这一步只需要在任意一个dockerhost节点上创建即可,不同节点是共享calico网络的。

# docker network create --driver calico--ipam-driver calico-ipam ${network name}
  • 1

这里,我们创建一个名为“calico-network”的calico网络。

# docker network create --driver calico--ipam-driver calico-ipam "calico-network"
  • 1

2.3.6. 验证calico网络

在hostnode1上执行命令

# docker run --net calico-network--name workload-A -tid busybox
  • 1

在hostnode2上执行命令

# docker run --net calico-network--name workload-B -tid busybox
  • 1

然后在容器workload-A上ping容器workload-B的IP地址,可以通就说明配置成功。

首先获取workload-B的IP地址,在hostnode2上执行命令。

# docker exec workload-B hostname –i
192.168.0.17
  • 1
  • 2

然后在hostnode1上ping该IP地址。

# docker exec workload-A ping 192.168.0.17
PING 192.168.0.17 (192.168.0.17) 56(84)bytes of data.
64 bytes from 192.168.0.17: icmp_seq=1ttl=64 time=0.165 ms
…
  • 1
  • 2
  • 3
  • 4

Ping通即表示不同docker host上使用同一个calico网络的两个容器网络互通。

2.3.7. 配置ingress特性

如果需要docker host可以访问容器网络,以上面的例子,如果想在hostnode2上能访问workload-A的IP地址,就需要配置该calico网络的ingress特性。

先导出现有的配置。

# calicoctl get profile "calico-network"-o json > profile.json
  • 1

profile.json的ingress部分,这里是一个进入流量的配置。我们再增加一个配置,尤其source->nets部分,内容大致如下:

"ingress": [
       {
          "action":"allow",
          "source": {
            "tag":"calico-network"
          },
          "destination": {}
       },
       {
          "action":"allow",
          "source": {
            "nets": [
               "192.168.56.1/24"
            ]
          },
          "destination": {}
       }
     ],

然后替换修改过的profile.json文件。

# calicoctl replace -f profile.json

然后,在hostnode2上再用ping尝试workload-A的IP地址,即可ping通。

版权声明:文章欢迎转载,但请注明出处。 https://blog.csdn.net/styshoo/article/details/80220601

本文转载自:https://blog.csdn.net/styshoo/article/details/80220601

openthings
粉丝 326
博文 1140
码字总数 689435
作品 1
东城
架构师
私信 提问
Kubeadm部署基于Calico K8s集群

1 环境 Host Name Role IP master1 k8s-1001 172.31.135.239 node1 k8s-1002 172.31.135.238 node2 k8s-1003 172.31.135.237 2 内核调优 3 修改文件描述符 4 配置k8s yum 源 5 配置docker yu......

拜了个拜
04/25
130
0
使用Kubeadm(1.13)快速搭建Kubernetes集群

Kubeadm是管理集群生命周期的重要工具,从创建到配置再到升级,Kubeadm处理现有硬件上的生产集群的引导,并以最佳实践方式配置核心Kubernetes组件,以便为新节点提供安全而简单的连接流程并支...

雨夜朦胧
2018/12/07
0
0
创建calico网络报错client response is invalid json

使用docker创建calico网络失败。 查看docker日志: 首先想到的错误原因可能是:calico网络后台的分布式存储是etcd,而环境中使用的V3版本的etcd,而该版本在API方面既支持V2又支持V3。docke...

BookShu
2018/06/14
209
0
kubeadm安装kubernetes 1.13.1集群完整记录

k8s是什么   Kubernetes简称为k8s,它是 Google 开源的容器集群管理系统。在 Docker 技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大...

上尉j
01/03
0
0
kubernetes1.8.1安装指南,离线安装,内网安装

使用kubeadm部署k8s集群 三步装集群:离线包地址 基础环境 关闭swap swapoff -a 再把/etc/fstab文件中带有swap的行删了,没有就无视 装这两工具如果没装的话 yum install -y ebtables socat ...

店家小二
2018/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员Java教程分享Zookeeper基本原理与运用场景

好程序员Java教程分享Zookeeper基本原理与运用场景一、什么是Zookeeper? zookeeper是一个分布式的一致性协调服务。 换句话说,也可以把zookeeper看成一个小型的分布式文件系统。但是和FastD...

好程序员官网
16分钟前
3
0
mysql表情符

1 修改表字段为utf8md4 ALTER table property_info MODIFY `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL 2 MySQL数据库服务器配置文件mysqld.cn......

干死it
36分钟前
3
0
正则表达式的基本语法

本文摘自LTP.NET知识库。 正则表达式的形式一般如下: /love/ 其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。 用户只要把希望查找匹配对象的模式内容放入“/”定界符之...

木庄
38分钟前
3
0
java 框架有哪些?

十大常用框架: 一、SpringMVC 二、Spring 三、Mybatis 四、Dubbo 五、Maven 六、RabbitMQ 七、Log4j 八、Ehcache 九、Redis 十、Shiro 延展阅读: 一、SpringMVC Spring Web MVC是一种基于J...

java框架开发者
38分钟前
7
0
细谈Mysql事务

文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 上一篇着重谈到了MySQL锁的概念,里面谈到了事务的概念,其实大部分开发者对于事务肯定不陌生,...

程序猿周先森
47分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部