쟝이의 세상
VMware에서 Ubuntu를 사용하여 Kubernetes 환경 구축 본문
** Master Node와 Worker Node에 환경 세팅하기 **
아래의 설명은 Master Node와 Worker Node 둘 다 실행해주기
(Worker Node에서만 하는 것 / Master Node에서만 하는 것은 따로 설명 있음)
중간에 ubuntu 환경이 오류가 생겨 ubuntu-worker에서 실행
오류가 생겨서 worker를 master node로 사용한거니까
참고 부탁드려용 :)
📌 시스템 요구사항 확인
✔️ 최소 사양
- CPU: 2개 이상의 코어
#코어 확인
nproc
- RAM: 최소 2GB(권장 4GB 이상)
#메모리 확인
free -h
- 디스크 공간: 최소 10GB
#디스크 공간 확인
df -h
📌 Ubuntu 시스템 업데이트
✔️시스템을 최신 상태로 유지
sudo apt upgrade -y
sudo apt update
📌 Swap 비활성화
쿠버네티스는 swap 메모리 비활성화를 요구한다.
→ 성능과 안정성 측면에서 중요한 역할을 하기 때문
먼저 swap 파티션을 사용하고 있는지 확인해준다
#swap 파티션 확인
swapon --show
swap 파티션을 사용하고 있다면?
#swap 비활성화
sudo swapoff -a
#swap 메모리 영구 비활성화하기 위해 편집기 열기
sudo vi /etc/fstab
📎 편집 내용 예시
해당 내용을 주석처리한 후 저장# /swapfile none swap sw 0 0
📌 필요한 포트 개방
sudo ufw allow 6443/tcp # API server
sudo ufw allow 2379:2380/tcp # etcd
sudo ufw allow 10250/tcp # Kubelet API
sudo ufw allow 10251/tcp # kube-scheduler
sudo ufw allow 10252/tcp # kube-controller
sudo ufw reload
sudo ufw enable
sudo ufw allow 6443
📌 Containerd 설치
쿠버네티스는 기본적으로 컨테이너 런타임이 필요하다. 일반적으로 Docker 또는 containerd를 사용한다.
나는 containerd 설치!!
# 필요한 모듈 활성화
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 필요한 sysctl 매개변수 설정
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
# containerd 설치
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
📌 Kubeadm, Kubelet, Kubectl 설치
✔️ kube 관련 GPG 키 등록
# apt 저장소 키 추가
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 저장소 추가
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
✔️ kubectl, kubeadm, kubelet 설치
→ 1.30~ 버전을 설치했을 때 kubectl 명령어 실행마다 오류가 발생하기 때문에 다운그레이드하여 kubectl, kubeadm, kubelet부터 재설치
# 패키지 설치
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
# 패키지 자동 업데이트 방지
sudo apt-mark hold kubelet kubeadm kubectl
⚠️ 자동 업데이트 방지한 후에 다시 설치할 경우
#설치된 패키지의 hold 해제
sudo apt-mark unhold kubelet kubeadm kubectl
#기존 패키지 제거
sudo apt-get remove -y kubelet kubeadm kubectl
#1.29.0 버전 재설치
sudo apt-get install -y kubelet=1.29.0-1.1 kubeadm=1.29.0-1.1 kubectl=1.29.0-1.1
#새로 설치한 버전이 자동으로 업그레이드되지 않도록 hold
sudo apt-mark hold kubelet kubeadm kubectl
#설치된 버전 확인
kubelet --version
kubeadm version
kubectl version --client
📌 클러스터에 Worker Node 추가
✔️ Kubernetes 클러스터 초기화(Master Node에서만 실행)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=[마스터노드 IP]
1️⃣ 아래의 --token 부분의 출력 결과 모두 저장해놓기
kubeadm join 192.168.133.140:6443 --token p1yugb.rudmluothk8he85j \ --discovery-token-ca-cert-hash sha256:5ccd5eb6e56c32eff3a0917108b67bc2c1c9cf357185e36d98995a8fa90637eb
2️⃣ Worker Node에 접속하여 위의 명령어 그대로 입력해주기 (단, sudo는 꼭 붙여서!)
sudo kubeadm join 192.168.133.140:6443 --token p1yugb.rudmluothk8he85j \ --discovery-token-ca-cert-hash sha256:5ccd5eb6e56c32eff3a0917108b67bc2c1c9cf357185e36d98995a8fa90637eb
✔️ kubectl 을 사용하여 클러스터에 접근 가능하도록 설정 (Master Node에서만 실행)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
✔️ CNI(Flannel) 설치
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
⚠️ controller-manager / proxy 전부 CrashLoopBackOff 뜨길래 log를 확인해보니 1.29.10 버전을 사용 → 잘못된 버전을 사용하고 있었음 ㅜㅜ
# controller-manager의 이미지 버전 수정
sudo sed -i 's|registry.k8s.io/kube-controller-manager:v1.29.10|registry.k8s.io/kube-controller-manager:v1.29.0|g' /etc/kubernetes/manifests/kube-controller-manager.yaml
# 모든 컴포넌트의 이미지 버전 한 번에 바꾸기
sudo find /etc/kubernetes/manifests/ -type f -name "*.yaml" -exec sed -i 's/v1.29.10/v1.29.0/g' {} \;
💡 세팅 전부 마치면 아래의 화면이 나온다~!~!
kubectl get pods -A
'자료' 카테고리의 다른 글
CI/CD 파이프라인 - 운영 워크플로우 (0) | 2024.11.11 |
---|---|
CI/CD 파이프라인 - 개발 워크플로우 (0) | 2024.11.07 |
CSRF 취약점 모의해킹 (0) | 2024.10.29 |
Metasploit을 활용하여 모의해킹 (0) | 2024.10.25 |
BeEF를 활용하여 모의해킹 (0) | 2024.10.21 |