如何进行calico在docker上的部署及验证

77次阅读
没有评论

共计 5569 个字符,预计需要花费 14 分钟才能阅读完成。

本篇文章为大家展示了如何进行 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

重启需要一定的时间,完成后,确认 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

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

2.3.2. 增加 calico 配置

# mkdir -p /etc/calico

然后修改 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

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

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}

检查连接状态。

# 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.

2.3.5. 创建 docker 网络

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

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

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

# docker network create --driver calico--ipam-driver calico-ipam  calico-network

2.3.6. 验证 calico 网络

在 hostnode1 上执行命令

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

在 hostnode2 上执行命令

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

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

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

# docker exec workload-B hostname –i
192.168.0.17

然后在 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
…

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

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 通。

上述内容就是如何进行 calico 在 docker 上的部署及验证,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计5569字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)