본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Docker 컨테이너 설치

원문 보기 위키 갱신

클러스터에 속하지 않은 호스트에서 Calico Open Source 에이전트를 Docker 컨테이너로 실행하는 방법을 안내해요. 네트워킹과 정책을 모두 한 번에 설치할 수 있어요.

출처: 문서

본문

큰 그림

Docker 컨테이너를 사용해 클러스터에 속하지 않은 호스트에 네트워킹과 정책을 모두 갖춘 Calico를 설치해요.

가치

Docker 컨테이너로 Calico를 설치하면 네트워킹과 정책에 필요한 모든 것이 포함돼요. 또한 적절한 노드별 구성을 데이터스토어에 자동으로 추가해줘요.

시작하기 전에...

  1. Docker가 설치되어 있는지 확인해요.
  2. Calico 데이터스토어가 떠 있고 호스트에서 접근 가능한지 확인해요.
  3. 호스트가 최소 시스템 요구 사항을 충족하는지 확인해요.

방법

calico/node 컨테이너는 init 시스템이 부팅 시점에 시작하도록 하고, init 시스템이 중지됐을 때 다시 시작하도록 구성되어야 해요. Calico는 특정 구성 변경에서 이 동작에 의존해요.

이 절에서는 calico/node를 Docker 컨테이너로 실행하는 방법을 설명해요.

SECONDARY: 여기서는 systemd 예시를 다루지만, 명령은 upstart 같은 다른 init 데몬에도 적용할 수 있어요.

1단계: 환경 파일 만들기

다음 지침과 샘플 파일을 사용해 호스트에서 Calico를 시작할 환경 변수를 정의해요. 더 많은 도움이 필요하면 calico/node 구성 참조를 확인하세요.

Tab: Kubernetes 데이터스토어

Kubernetes 데이터스토어(기본값)라면 다음을 설정해요:

Variable Configuration guidance
FELIX_DATASTORETYPE Set to kubernetes
KUBECONFIG Path to kubeconfig file to access the Kubernetes API Server

SECONDARY:

위에서 언급한 경로에 지정된 위치로 kubeconfig 파일을 컨테이너에 볼륨 마운트해야 해요.

Tab: etcd 데이터스토어

etcdv3 데이터스토어라면 다음을 설정해요:

Variable Configuration guidance
DATASTORE_TYPE Set to etcdv3
ETCD_ENDPOINTS Comma separated list of etcdv3 cluster URLs, e.g. https://calico-datastore.example.com:2379
ETCD_CA_CERT_FILE Path to CA certificate to validate etcd’s server cert. Required if using TLS and not using a public CA.
ETCD_CERT_FILE ETCD_KEY_FILE Paths to certificate and keys used for client authentication to the etcd cluster, if enabled.

SECONDARY:

인증서와 키를 사용한다면 위에서 언급한 경로에 지정된 위치로 컨테이너에 볼륨 마운트해야 해요.

Tab: 어느 데이터스토어든 공통

어느 데이터스토어든 다음을 설정해요:

Variable Configuration guidance
CALICO_NODENAME Identifies the node. If a value is not specified, the compute server hostname is used to identify the Calico node.
CALICO_IP or CALICO_IP6 If values are not specified for both, Calico uses the currently-configured values for the next hop IP addresses for this node—these can be configured through the Node resource. If no next hop addresses are configured, Calico automatically determines an IPv4 next hop address by querying the host interfaces (and configures this value in the Node resource). You can set CALICO_IP to autodetect for force auto-detection of IP address every time the node starts. If you set IP addresses through these environment variables, it reconfigures any values currently set through the Node resource.
CALICO_AS If not specified, Calico uses the currently configured value for the AS Number for the node BGP client—this can be configured through the Node resource. If the Node resource value is not set, Calico inherits the AS Number from the global default value. If you set a value through this environment variable, it reconfigures any value currently set through the Node resource.
NO_DEFAULT_POOLS Set to true to prevent Calico from creating a default pool if one does not exist. Pools are used for workload endpoints and not required for non-cluster hosts.
CALICO_NETWORKING_BACKEND The networking backend to use. In bird mode, Calico will provide BGP networking using the BIRD BGP daemon; VXLAN networking can also be used. In vxlan mode, only VXLAN networking is provided; BIRD and BGP are disabled. If you want to run Calico for policy only, set to none.

샘플 EnvironmentFile — /etc/calico/calico.env로 저장하세요

DATASTORE_TYPE=etcdv3
ETCD_ENDPOINTS=https://calico-datastore.example.com:2379
ETCD_CA_CERT_FILE="/pki/ca.pem"
ETCD_CERT_FILE="/pki/client-cert.pem"
ETCD_KEY_FILE="/pki/client-key.pem"
CALICO_NODENAME=""
NO_DEFAULT_POOLS="true"
CALICO_IP=""
CALICO_IP6=""
CALICO_AS=""
CALICO_NETWORKING_BACKEND=bird

2단계: init 시스템 구성하기

init 데몬(systemd나 upstart 등)을 사용해 EnvironmentFile 값을 적용해 calico/node 이미지를 서비스로 시작해요.

샘플 systemd 서비스 파일: calico-node.service

[Unit]
Description=calico-node
After=docker.service
Requires=docker.service

[Service]
EnvironmentFile=/etc/calico/calico.env
ExecStartPre=-/usr/bin/docker rm -f calico-node
ExecStart=/usr/bin/docker run --net=host --privileged \
 --name=calico-node \
 -e NODENAME=${CALICO_NODENAME} \
 -e IP=${CALICO_IP} \
 -e IP6=${CALICO_IP6} \
 -e CALICO_NETWORKING_BACKEND=${CALICO_NETWORKING_BACKEND} \
 -e AS=${CALICO_AS} \
 -e NO_DEFAULT_POOLS=${NO_DEFAULT_POOLS} \
 -e DATASTORE_TYPE=${DATASTORE_TYPE} \
 -e ETCD_ENDPOINTS=${ETCD_ENDPOINTS} \
 -e ETCD_CA_CERT_FILE=${ETCD_CA_CERT_FILE} \
 -e ETCD_CERT_FILE=${ETCD_CERT_FILE} \
 -e ETCD_KEY_FILE=${ETCD_KEY_FILE} \
 -e KUBECONFIG=${KUBECONFIG} \
 -v /var/log/calico:/var/log/calico \
 -v /var/lib/calico:/var/lib/calico \
 -v /var/run/calico:/var/run/calico \
 -v /run/docker/plugins:/run/docker/plugins \
 -v /lib/modules:/lib/modules \
 -v /etc/pki:/pki \
 calico/node:v3.33.0 /bin/calico-node -felix

ExecStop=-/usr/bin/docker stop calico-node

Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

시작 시 systemd 서비스는:

  • [Unit] 섹션에서 Docker가 설치되어 있는지 확인해요.
  • 위 환경 파일에서 환경 변수를 가져와요.
  • 기존 calico/node 컨테이너가 있으면 제거해요.
  • calico/node를 시작해요.

또한 이 스크립트는 서비스가 중지될 때 calico/node 컨테이너도 중지해요.

SECONDARY: Docker를 설치한 방식에 따라 [Unit] 섹션의 Docker 서비스 이름이 다를 수 있어요(예: docker-engine.service). 서비스를 시작하기 전에 꼭 확인하세요.

더 알아보기 (Learn more)

클러스터 밖 호스트에서는 init 시스템이 calico/node를 부팅 시 시작하고, 죽으면 다시 띄우도록 구성하는 것이 핵심이에요. 데이터스토어 유형(Kubernetes/etcd)에 맞는 환경 변수와 kubeconfig·인증서 볼륨 마운트만 챙기면 어렵지 않아요.