Search

Calico 설치

Tags
k8s
cni
calico
Created
2024/09/13 18:25
Created time
2024/09/13 09:25
category
kubernetes

개요

CNI 플러그인 중 Flannel을 학습했었고, 그 외에도 많이 사용하는 Calico 학습을 위해 설치 방법 등을 기술

개념

Calico는 쿠버네티스를 포함한 다양한 플랫폼에서 통신 및 보안 기능을 제공하는 네트워크 솔루션
쿠버네티스 상의 CNI를 준수하기 때문에 Pod의 통신을 위한 환경을 구축하는데 사용

설치 환경

k8s → ^1.30
호스트 OS → Ubuntu 22.04
Calico → ^3.28, IPIP, NAT enabled
IPTABLES → proxy mode
2개의 네트워크 대역이 존재하고, 1개의 마스터 노드와 3개의 워커 노드 구성
k8s-rtr은 AWS 상에서는 없으며, AWS 내부 라우터가 대신 라우팅을 처리

설치 방법

AWS 인스턴스 생성

# CloudFormation 템플릿 파일 # https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/kans-3w.yaml curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/kans/kans-3w.yaml # KeyName 기재하여 생성 aws cloudformation deploy --template-file kans-3w.yaml --stack-name mylab --parameter-overrides KeyName=<key-name> --region ap-northeast-2
Shell
복사

클러스터 설정 확인

인스턴스 생성 시 이미 쿠버네티스 설치와 1개 마스터 노드 및 3개 워커 노드 구성이 설치 환경 구조도처럼 되어 있음
# 컨텍스트 이름 변경 및 네임스페이스 선택 kubectl config rename-context "kubernetes-admin@kubernetes" "HomeLab" kubens default # 클러스터 상태 확인 kubectl cluster-info kubectl get no -o wide kubectl get svc,ep kubectl get po -A -o wide
Shell
복사

Calico 설치 전

tree /opt/cni/bin/ ls -l /opt/cni/bin/
Shell
복사
/opt/cni/bin 경로에는 calico는 없는 것을 확인 가능
iptables -t filter -L | wc -l iptables -t nat -L | wc -l ip -c route ip -c addr
Shell
복사
초기 IPTABLES에서의 Filter 수는 50개, NAT 수는 48개로 구성되어 있고, Calico에서 사용하는 인터페이스도 보이지 않음

Calico 설치

# 서브넷 24bit을 추가 # # Block size to use for the IPv4 POOL created at startup. Block size for IPv4 should be in the range 20-32. default 24 # - name: CALICO_IPV4POOL_BLOCK_SIZE # value: "24" # https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/calico.yaml kubectl apply -f https://raw.githubusercontent.com/gasida/KANS/main/kans3/calico-kans.yaml
Shell
복사

Calico 설치 후

tree /opt/cni/bin/ ls -l /opt/cni/bin/
Shell
복사
/opt/cni/bin 경로에는 calico가 추가된 상태
IPTABLES에서의 Filter 수는 210개, NAT 수는 126개로 구성되었고, Calico에서 사용하는 인터페이스도 추가된 상태

calicoctl 설치

curl -L https://github.com/projectcalico/calico/releases/download/v3.28.1/calicoctl-linux-amd64 -o calicoctl chmod +x calicoctl && mv calicoctl /usr/bin calicoctl version
Shell
복사

kube-ops-view 설치

# 설치 helm repo add geek-cookbook https://geek-cookbook.github.io/charts/ helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30000 --set env.TZ="Asia/Seoul" --namespace kube-system # 확인 kubectl get deploy,po,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view # 삭제 helm uninstall -n kube-system kube-ops-view
Shell
복사

Metrics 서버 설치

# 설치 helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/ helm install --install metrics-server metrics-server/metrics-server --set 'args[0]=--kubelet-insecure-tls' -n kube-system # 확인 kubectl get all -n kube-system -l app.kubernetes.io/instance=metrics-server kubectl get apiservices |egrep '(AVAILABLE|metrics)' # 삭제 helm uninstall -n kube-system metrics-server
Shell
복사

클러스터 삭제

실습 후엔 반드시 클러스터를 삭제하여 과금을 방지
aws cloudformation delete-stack --stack-name mylab
Shell
복사