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를 엽니다.서비스 파일.
[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. 데몬을 수정합니다.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 배포


모든dockerhost는 설정이 필요합니다.

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에 이 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통은 서로 다른dockerhost에서 같은calico 네트워크를 사용하는 두 용기 네트워크가 서로 통한다는 것을 나타낸다.

2.3.7. ingress 기능 설정


dockerhost가 필요하면 용기 네트워크에 접근할 수 있습니다. 위의 예를 들어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": {}
       }
     ],

수정된 프로필을 교체합니다.json 파일.
# calicoctl replace -f profile.json

그리고 hostnode2에서 ping으로 워크로드-A의 IP 주소를 시도하면 ping이 연결됩니다.

좋은 웹페이지 즐겨찾기