您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進(jìn)行calico在docker上的部署及驗證,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
以下的部署以五臺服務(wù)器環(huán)境為例:
服務(wù)器1: hostname為etcdnode1, IP為192.168.56.100 服務(wù)器2: hostname為etcdnode2, IP為192.168.56.101 服務(wù)器3: hostname為etcdnode3, IP為192.168.56.102 服務(wù)器2: hostname為hostnode1, IP為192.168.56.200 服務(wù)器3: hostname為hostnode2, IP為192.168.56.201
其中,etcdnode1,etcdnode2和etcdnode3將部署etcd,作為calico網(wǎng)絡(luò)的后端分布式存儲;hostnode1和hostnode2將部署calico網(wǎng)絡(luò)。
軟件背景:
? 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
etcdnode1,etcdnode2和etcdnode3部署etcd,分別執(zhí)行下面的命令。
# 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
使用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都替換為節(jié)點自己的hostname和IP地址。
待所有etcd節(jié)點都同時執(zhí)行上面的步驟后,再同時執(zhí)行下面的步驟。
# systemctl daemon-reload # systemctl enable etcd.service # systemctl start etcd.service
# etcdctl cluster-health // 檢查集群的健康狀態(tài) # etcdctl member list // 返回集群的成員列表
hostnode1和hostnode2節(jié)點都需要配置。
# apt -y install docker.io
Docker守護(hù)進(jìn)程需要/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"] }
# systemctl restart docker.service
重啟需要一定的時間,完成后,確認(rèn)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
每個docker host都需要配置。
PS:這里我們下載和使用的是v1.6.1版本,截止到現(xiàn)在,calico已經(jīng)出現(xiàn)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
# mkdir -p /etc/calico
然后修改calico的配置,在/etc/calico/calicoctl.cfg文件增加以下內(nèi)容。這里,主要是增加etcd終端的配置,如果有多個etcd節(jié)點,可以使用逗號連接。
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"
Calico要求開啟“net.ipv4.conf.all.rp_filter”和“net.ipv4.ip_forward”等參數(shù),但有些發(fā)行版默認(rèn)并未開啟這些參數(shù),因此需要手動開啟。
# echo “net.ipv4.conf.all.rp_filter=1”>> /etc/sysctl.conf # echo “net.ipv4.ip_forward=1” >>/etc/sysctl.conf # sysctl -p
啟動calico/node容器,可能需要聯(lián)網(wǎng)下載對應(yīng)的鏡像。另外,${local_IP}需要替換為各自的docker host的IP地址。
然后:
# calicoctl node run--node-image=calico/node:v2.6.2 --ip={local_IP}
檢查連接狀態(tài)。
# 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.
注意:這一步只需要在任意一個dockerhost節(jié)點上創(chuàng)建即可,不同節(jié)點是共享calico網(wǎng)絡(luò)的。
# docker network create --driver calico--ipam-driver calico-ipam ${network name}
這里,我們創(chuàng)建一個名為“calico-network”的calico網(wǎng)絡(luò)。
# docker network create --driver calico--ipam-driver calico-ipam "calico-network"
在hostnode1上執(zhí)行命令
# docker run --net calico-network--name workload-A -tid busybox
在hostnode2上執(zhí)行命令
# docker run --net calico-network--name workload-B -tid busybox
然后在容器workload-A上ping容器workload-B的IP地址,可以通就說明配置成功。
首先獲取workload-B的IP地址,在hostnode2上執(zhí)行命令。
# 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網(wǎng)絡(luò)的兩個容器網(wǎng)絡(luò)互通。
如果需要docker host可以訪問容器網(wǎng)絡(luò),以上面的例子,如果想在hostnode2上能訪問workload-A的IP地址,就需要配置該calico網(wǎng)絡(luò)的ingress特性。
先導(dǎo)出現(xiàn)有的配置。
# calicoctl get profile "calico-network"-o json > profile.json
profile.json的ingress部分,這里是一個進(jìn)入流量的配置。我們再增加一個配置,尤其source->nets部分,內(nèi)容大致如下:
"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通。
上述內(nèi)容就是如何進(jìn)行calico在docker上的部署及驗證,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。