Record
[K8s] 쿠버네티스 설치 본문
반응형

쿠베네티스 구조에 대해 먼저 알아보자
Control Plane (마스터 노드)
- API Server
- Scheduler
- Controller Manager
- etcd
Worker Node
- kubelet
- kube-proxy
- container runtime (containerd 등)
1. memory swap을 꺼준다.
# memory 확인
free -h
총계 사용 여분 공유 버퍼/캐시 가용
메모리: 3.8Gi 330Mi 2.8Gi 1.0Mi 706Mi 3.2Gi
스 왑: 2.1Gi 0B 2.1Gi
# Swap 제거
swapoff -a
# swap 제거 확인
free -h
총계 사용 여분 공유 버퍼/캐시 가용
메모리: 3.8Gi 330Mi 2.8Gi 1.0Mi 707Mi 3.2Gi
스 왑: 0B 0B 0B
# swap partition mount 제거
sed -i '/swap/s/^/#/' /etc/fstab
# fstab 확인
# cat /etc/fstab | grep swap
grep swap /etc/fstab
# 재부팅 후 적용이 유지되는지 확인
# init 6
reboot
free -h
이유: kubelet은 RAM 기준으로 관리하는데, OS는 디스크로 밀어버림 → K8s가 상황을 정확히 못 봄 그리고 성능 저하의 우려가 있음
2. containerd 설치
apt install containerd
쿠버는 직접 컨테이너를 실행하지 않는다. container runtime을 통해 실행함
3. kube 패키지 설치 및 containerd 설정
# package 무결성을 위한 gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# repository 추가
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list
# repository update
apt update
# k8s 구성 요소 설치
# kubelet: 모든 node에서 실행되는 pod(container)의 시작과 같은 작업 수행
# kubeadm: cluster를 구성하기 위한 기능 제공
# kubectl: cluster와 통신하기 위한 CLI Untility
apt install -y kubelet kubeadm kubectl
# k8s 버전 고정
apt-mark hold kubelet kubeadm kubectl
# daemon관련 설정 및 재시작
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet
# 설정 파일 생성
containerd config default > /etc/containerd/config.toml
# 설정 파일 편집
# Container 실행 주체를 지정
vi /etc/containerd/config.toml
~~~
100 [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]
~~~
109 SystemdCgroup = true
# Containerd, kubelet 재시작
systemctl restart containerd
systemctl restart kubelet
4. master node설정
# Cluster 생성
kubeadm init
# Cluster 탈퇴 및 삭제
kubeadm reset
# CNI:calico 설정을 위해 NA를 맞춰서 다시 Cluster 생성
kubeadm init --pod-network-cidr 192.168.0.0/16 --service-cidr=172.30.0.0/12
# 환경 변수 추가 및 확인
export KUBECONFIG=/etc/kubernetes/admin.conf
echo $KUBECONFIG
/etc/kubernetes/admin.conf
# master 상태 확인
kubectl get node
NAME STATUS ROLES AGE VERSION
master-00 NotReady control-plane 2m20s v1.29.15
# docker login 확인
# docker.io에 대한 정보들 확인
cat /root/.docker/config.json
# Kubernetes용 Container image repository에 접근하기 위해 secret 생성
# secret 비밀번호, token, key와 같은 민감한 정보를 안전하게 보관하고 관리하는 저장소
kubectl create secret generic (본인 영어이름 또는 이니셜)-secret-test --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson
# secret 확인
kubectl get secret
5. Calico CNI(Container Network Interface) 설치 및 설정
# 파일 다운로드
wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/custom-resources.yaml
# 실행
kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml
# Pod 목록 확인
kubectl get pod -A
기본적으로 Pod 내부에서는 통신이 되지만 Pod 끼리 통신하려면 네트워크 설정을 해줘야한다.
Calico = Pod 네트워크 전체를 구성하는 네트워크 엔진
이로인해 물리 서버에 다른 컨테이너가 올라가도 서로 통신이 가능하게 된다.
- 네트워크 구성 방식
- IP-in-IP (Overlay)
- Pod Network가 물리 Network와 분리되어 있어도 통신 가능
- Network Infra 설정이 간단
- BGP (Non-Overlay)
- 물리 Network에서 각 node간 라우팅 정보를 BGP로 직접 교환
- 대규모에 적합 → 가장 빠르고 NAT 없이 동작이 가능
- VXLAN
- IP-in-IP 보다 더 많은 환경에서 호환
- 가상 Network와 통합에 유리
- IP-in-IP (Overlay)

6. cluster 가입
# join 실행
kubeadm join x.x.x.x:6443 --token 90fhb0.gvzsypmyxurp7ij3 --discovery-token-ca-cert-hash sha256:bd26df68dd319368bb11062ae1572decc119e7a0eb5b2a657df949ed128cc520
앞선 master node에서 secret을 생성하고 kubectl get secret 이정보로 woker노드에서 가입하면 된다.
'CS > 클라우드' 카테고리의 다른 글
| [k8s] 쿠버네트스 3 tier 구성 (0) | 2026.02.27 |
|---|---|
| [K8s] 쿠버네티스 사용 1 (0) | 2026.02.26 |
| [K8s] 쿠버네티스란 ? (0) | 2026.02.24 |
| 도커란? (2) (0) | 2026.02.12 |
| Ansible이란? (1) | 2026.02.06 |