패키지 관리자 없이 바이너리로 설치하기
클러스터에 속하지 않은 호스트에 패키지 관리자 없이 Calico 바이너리를 직접 설치하는 방법을 안내해요. Felix(네트워크 정책을 담당하는 Calico 데몬)를 내려받고, 실행 환경을 구성하고, 데이터스토어를 초기화하는 절차까지 다뤄요.
출처: 문서
본문
큰 그림
패키지 관리자 없이 클러스터 외부 호스트에 Calico 바이너리를 설치해요.
가치
패키지 관리자를 쓸 수 없거나, 프로비저닝 시스템이 바이너리를 호스트에 복사하는 일을 쉽게 처리할 수 있을 때 Calico를 직접 설치할 수 있어요.
시작하기 전에...
- Calico 데이터스토어가 떠 있고 호스트에서 접근 가능한지 확인해요.
- 호스트가 최소 시스템 요구 사항을 충족하는지 확인해요.
- 네트워킹 기능까지 포함해 Calico를 설치하고 싶다면(클러스터 워크로드와 통신해야 한다면) 컨테이너 설치 방법을 선택하는 게 좋아요.
- Kubernetes 데이터스토어라면
kubectl을, etcd3 데이터스토어라면calicoctl설치 및 구성을 진행해요.
방법
이 가이드는 네트워크 정책을 담당하는 Calico 데몬인 Felix를 설치하는 과정을 다뤄요.
1단계: 바이너리 내려받고 압축 풀기
이 단계는 Docker가 필요하지만, Docker가 설치된 어떤 머신에서든 실행할 수 있어요. 실제로 실행할 호스트일 필요는 없어요(노트북이어도 충분해요).
-
다음 명령으로 calico/node 이미지를 내려받아요.
docker pull calico/node:v3.33.0 -
docker images를 입력해 이미지가 로드됐는지 확인해요.REPOSITORY TAG IMAGE ID CREATED SIZE calico/node v3.33.0 e07d59b0eb8a 2 minutes ago 42MB -
임시 calico/node 컨테이너를 만들어요.
docker create --name container calico/node:v3.33.0 -
컨테이너에서 calico-node 바이너리를 로컬 파일 시스템으로 복사해요.
docker cp container:/bin/calico-node calico-node -
임시 컨테이너를 삭제해요.
docker rm container -
추출한 바이너리 파일을 실행 가능하도록 설정해요.
chmod +x calico-node chown root:root calico-node
2단계: calico-node 바이너리 복사하기
1단계에서 만든 바이너리를 아무 방법으로(scp, ftp, USB 메모리 등) 대상 머신에 복사해요.
3단계: 환경 파일 만들기
다음 지침과 샘플 파일을 사용해 호스트에서 Calico를 시작할 환경 변수를 정의해요. 더 많은 도움이 필요하면 Felix 구성 참조를 확인하세요.
Tab: Kubernetes 데이터스토어
Kubernetes 데이터스토어(기본값)라면 다음을 설정해요.
| 변수 | 구성 안내 |
|---|---|
| FELIX_DATASTORETYPE | kubernetes로 설정 |
| KUBECONFIG | Kubernetes API 서버에 접근하기 위한 kubeconfig 파일 경로 |
Tab: etcd 데이터스토어
etcdv3 데이터스토어라면 다음을 설정해요.
| 변수 | 구성 안내 |
|---|---|
| FELIX_DATASTORETYPE | etcdv3로 설정 |
| FELIX_ETCDENDPOINTS | 쉼표로 구분된 etcdv3 클러스터 URL 목록. 예: https://calico-datastore.example.com:2379 |
| FELIX_ETCDCAFILE | etcd의 서버 인증서를 검증할 CA 인증서 경로. TLS를 쓰고 공용 CA를 쓰지 않는다면 필수 |
| FELIX_ETCDCERTFILE FELIX_ETCDKEYFILE | 활성화한 경우, etcd 클러스터에 클라이언트 인증할 때 쓰는 인증서와 키 경로 |
Tab: 어느 데이터스토어든 공통
어느 데이터스토어든 공통으로 다음을 설정해요.
| 변수 | 구성 안내 |
|---|---|
| CALICO_NODENAME | 노드를 식별하는 값이에요. 값을 지정하지 않으면 컴퓨트 서버 호스트명이 Calico 노드 식별에 사용돼요. |
| CALICO_IP or CALICO_IP6 | 둘 다 지정하지 않으면 Calico는 이 노드의 다음 홉(next hop) IP 주소로 현재 구성된 값을 사용해요. 이 값은 Node 리소스를 통해 구성할 수 있어요. 다음 홉 주소가 구성되어 있지 않으면 Calico가 호스트 인터페이스를 조회해 IPv4 다음 홉 주소를 자동으로 정하고(Node 리소스에 이 값을 구성해요). CALICO_IP를 autodetect로 설정하면 노드가 시작될 때마다 IP 주소 자동 탐지를 강제할 수 있어요. 이 환경 변수로 IP 주소를 설정하면 Node 리소스에 현재 설정된 값을 다시 구성해요. |
| CALICO_AS | 지정하지 않으면 Calico는 노드 BGP 클라이언트의 AS Number로 현재 구성된 값을 사용해요. 이 값 역시 Node 리소스로 구성할 수 있어요. Node 리소스 값이 없다면 Calico는 전역 기본값에서 AS Number를 상속해요. 이 환경 변수로 값을 설정하면 Node 리소스에 현재 설정된 값을 다시 구성해요. |
| NO_DEFAULT_POOLS | 기본 풀이 없을 때 Calico가 기본 풀을 만들지 않도록 하려면 true로 설정해요. 풀은 워크로드 엔드포인트에 사용되며, 클러스터 외부 호스트에는 필요하지 않아요. |
| CALICO_NETWORKING_BACKEND | 사용할 네트워킹 백엔드예요. bird 모드에서는 Calico가 BIRD BGP 데몬으로 BGP 네트워킹을 제공하고, VXLAN 네트워킹도 사용할 수 있어요. vxlan 모드에서는 VXLAN 네트워킹만 제공되고 BIRD와 BGP는 비활성화돼요. 정책 전용으로 Calico를 운영하려면 none으로 설정해요. |
샘플 EnvironmentFile - /etc/calico/calico.env로 저장해요.
FELIX_DATASTORETYPE=etcdv3
FELIX_ETCDENDPOINTS=https://calico-datastore.example.com:2379
FELIX_ETCDCAFILE="/pki/ca.pem"
FELIX_ETCDCERTFILE="/pki/client-cert.pem"
FELIX_ETCDKEYFILE="/pki/client-key.pem"
4단계: 시작 스크립트 만들기
Felix는 부팅 시 init 시스템이 시작해야 하고, init 시스템은 Felix가 멈췄을 때 다시 시작하도록 반드시 구성되어야 해요. Felix는 특정 구성 변경에 이 동작에 의존해요.
배포판이 systemd를 사용한다면 다음 유닛 파일을 쓸 수 있어요.
[Unit]
Description=Calico Felix agent
After=syslog.target network.target
[Service]
User=root
EnvironmentFile=/etc/calico/calico.env
ExecStartPre=/usr/bin/mkdir -p /var/run/calico
ExecStart=/usr/local/bin/calico-node -felix
KillMode=process
Restart=on-failure
LimitNOFILE=32000
[Install]
WantedBy=multi-user.target
Felix 구성을 마쳤다면 init 시스템을 통해 시작해요.
service calico-felix start
5단계: 데이터스토어 초기화
Felix를 실행하는 각 호스트마다 node 리소스를 구성해야 해요. 이 경우 첫 번째 node 리소스를 만든 후에 데이터베이스가 초기화돼요. Calico/BGP 통합이 포함되지 않은 배포라면 node 리소스 명세에 노드 이름만 있으면 돼요. 대부분의 배포에서 이 이름은 호스트명과 같아요.
calicoctl create -f - <<EOF
- apiVersion: projectcalico.org/v3
kind: Node
metadata:
name: <node name or hostname>
EOF
Felix 로그가 "Felix가 wait-for-ready 상태라는 주기적 알림"에서 초기화 메시지 스트림으로 바뀌는 걸 확인하면 돼요.
더 알아보기 (Learn more)
바이너리 설치는 패키지 관리자를 쓸 수 없는 베어메탈 호스트에 Felix만 올릴 때 유용해요. 데이터스토어 유형에 따라 환경 변수 구성이 달라지고, init 시스템의 자동 재시작 구성과 node 리소스 초기화가 핵심 단계라는 점을 기억해 두세요.