개요
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
복사