Record

[K8s] 쿠버네티스 설치 본문

CS/클라우드

[K8s] 쿠버네티스 설치

now-record 2026. 2. 25. 17:39
반응형

 

쿠베네티스 구조에 대해 먼저 알아보자 

 

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 네트워크 전체를 구성하는 네트워크 엔진

이로인해 물리 서버에 다른 컨테이너가 올라가도 서로 통신이 가능하게 된다. 

 

  • 네트워크 구성 방식
    1. IP-in-IP (Overlay)
      • Pod Network가 물리 Network와 분리되어 있어도 통신 가능
      • Network Infra 설정이 간단
    2. BGP (Non-Overlay)
      • 물리 Network에서 각 node간 라우팅 정보를 BGP로 직접 교환
      • 대규모에 적합 → 가장 빠르고 NAT 없이 동작이 가능
    3. VXLAN
      • IP-in-IP 보다 더 많은 환경에서 호환
      • 가상 Network와 통합에 유리

 

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