Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

SYDev

[Docker & Kubernetes] 4주차 정리 (2) - Chapter 8. 쿠버네티스 실습 환경 구축 본문

KHUDA 6th/Study

[Docker & Kubernetes] 4주차 정리 (2) - Chapter 8. 쿠버네티스 실습 환경 구축

시데브 2024. 8. 13. 18:05

8.1. 사전 준비 사항

8.1.1. 가상머신 복제

 

https://gymdev.tistory.com/75

 

[Linux] 맥북(mac)에 리눅스 설치하기 (UTM, Ubuntu)

0. 설치전 : 버추얼박스 (VirtualBox) 에 대해서 가상화 소프트웨어인 오라클 VM 버추얼박스가 오픈소스로 무료로 윈도우나 MacOS에서도 잘 작동하여 유명하지만 나는 m2 맥북을 사용중이다. 안타깝게

gymdev.tistory.com

 

 

8.1.2-4. Ubuntu 가상머신 네트워크 설정

https://velog.io/@skybluelion/Kubernetes-UTM%EC%9C%BC%EB%A1%9C-ubuntu-server-%EA%B0%80%EC%83%81%EB%A8%B8%EC%8B%A0-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%B8%ED%8C%85-2%EB%B6%80

 

8.1.5. UFW 방화벽 설정

-> inacitve 상태이므로, 해당 과정은 생략

 

8.1.6. 네트워크 설정

  • sudo -i: 루트 권한 획득
  • tee: 명시한 파일로 출력(저장)되고, stdout으로도 출력되는 명령어
  • overlay: 리눅스 커널의 네트워크 드라이버 -> 서로 다른 host에 존재하는 pod 간의 네트워크 연결을 가능하게 함 -> 여러 개의 독립적인 네트워크 레이어를 겹쳐서 하나로 연결된 네트워크 생성
  • overlay를 활용하면 서로 다른 호스트에 존재하는 pod가 동일한 네트워크에 존재하는 것처럼 통신 가능
  • br_netfilter: 네트워크 패킷 처리 관련 모듈 -> iptables/netfilter 규칙 적용 -> 컨테이너와 호스트 간의 interface 등에서 발생하는 트래픽에 대해 규칙을 적용하여 트래픽 관리
  • EOF: 문서의 마지막

 

 

  • modeprobe: 리눅스 커널 모듈 관리 도구 -> 특정 모듈을 로드하거나 제거

 

 

  • sysctl 매개변수를 설정하면, 재부팅 후에도 값 유지
  • 브릿지 네트워크 인터페이스에 대한 ipv4 트래픽이 iptables 규칙에 의해 처리되도록 설정
  • ipv6에 대해 iptables 처리
  • 커널이 처리하는 패킷에 대해 외부로 ip4 포워딩 가능하게 설정

  • sysctl: 재부팅 없이 매개변수 적용

 

-> 모든 가상머신에 똑같이 적용

 

8.1.7. containerd 설정

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

sudo vim /etc/containerd/config.toml

-> containerd를 쿠버네티스에서 컨테이너 런타임으로 사용할 수 있도록 설정 변경

 

sudo systemctl restart containerd
sudo systemctl enable containerd
sudo systemctl status containerd

 

8.1.8. swap 메모리 비활성화

  • 쿠버네티스는 수많은 컨테이너를 동시 관리 -> 원할하게 컨테이너를 관리하려면 swap 메모리 영역을 비활성화 해야 함

-> free -h: 메모리 공간 확인 

-> swap 메모리 할당 확인

 

-> swapoff --all: swap 메모리 비활성화

 

-> /etc/fstab의 해당 내용을 주석처리 -> 재부팅했을 때 swap 메모리가 다시 활성화 X

 

-> 모든 노드에 동일하게 작업

 

8.2. 쿠버네티스 설치

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

sudo mkdir -p /etc/apt/keyrings
echo "deb [signed-by=/etc/apt/keyrings/kubernetes.gpg] https://apt.kubernetes.io/kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg

sudo apt-get update
sudo apt-get install -y kubelet=1.26.5-00 kubeadm=1.26.5-00 kubectl=1.26.5-00
sudo apt-mark hold kubelet kubeadm kubectl

-> 오류 발생

 

해결법

https://littlemobs.com/blog/kubernetes-package-repository-deprecation/

 

Kubernetes 1.23 버전의 최후 - Ubuntu kubernetes apt install 에러 - LittleMobs

2024년 3월 초, docker가 익숙해서 끝까지 버티고 있던 kubernetes v1.23.x 개발 환경 설치에 돌연 문제가 생겼다. Ubuntu에서 kubeadm, kubelet, kubectl 등을 apt로 설치할 수 없게 된 것이다. 원인과 해결 방법에

littlemobs.com

 

-> 모든 노드에 설치

 

8.2.2. 마스터 노드 설정

-> 인증이 하나도 안 된 상태

 

-> kubeadm이 사용할 수 있는 이미지 리스트

 

-> 쿠버네티스 설치에 필요한 이미지 다운로드

 

sudo kubeadm config images pull --cri-socket /run/containerd/containerd.sock

-> CRI를 containerd로 설정

kubeadm init --apiserver-advertise-address=10.0.2.4 --pod-network-cidr=192.168.0.0/16 --cri-socket /run/containerd/containerd.sock
  • kubeadm init: 초기화 
  • --apiserver-advertise-address: 쿠버네티스 마스터 노드 ip 주소 입력
  • --pod-network-cidr: 네트워크 대역 설정
  • calico를 사용하는 경우 192.168.0.0/16

-> 워커 노드와 마스터 노드를 연결할 때 사용할 구문 -> 따로 저장해놓자$

 

  • 쿠버네티스 설정을 저장할 새 디렉토리 생성
  • 기존 설정 파일을 새 디렉토리로 복사
  • 설정 디렉토리 소유자와 그룹을 변경 -> 현재 사용자가 사용할 수 있도록 변경

-> calico 설치를 위해 URL에 존재하는 yaml 파일 실행

 

curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/custom-resources.yaml -O
kubectl create -f custom-resources.yaml

-> calico 설치를 위한 커스텀 리소스 설치

-> yaml을 활용해 calico 설치

 

 

+ calico-system 확인 과정에서 오류 발생 -> 해결중

 


참고자료

  • "한 권으로 배우는 도커 & 쿠버네티스", 장철원, 한빛미디어, 2024.04.29