- programmers
- codingTest
- 티스토리챌린지
- Database_Design
- tensorflow
- SingleProject
- app
- 자격증
- Kubernetes
- 2023_1st_Semester
- Personal_Study
- Image_classification
- Unix_System
- study
- c++
- Android
- Linux
- C
- Univ._Study
- 리눅스마스터2급
- 오블완
- Java
- Python
- Algorithm
- Baekjoon
- cloud_computing
- datastructure
- Operating_System
- Artificial_Intelligence
- kubeflow
코딩 기록 저장소
[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ① 본문
※ 컴퓨터의 메모리 부족으로 인해 서버컴퓨터에서 학습을 진행하게 됨
목차
1. Ubuntu 환경에 VMware 설치
서버컴퓨터 환경
- 우분투 : 24.04.2 LTS
- 커널 : 6.11.0-21-generic
01. VMware 파일 설치
- broadcom 사이트에 접속한 후 오른쪽 위 'Support Portal - Go To Portal'을 통해 로그인을 함
https://www.broadcom.com/ - Software - VMware Cloud Foundation - My Downloads를 통해 이동함
- 다운로드 하는 링크로 이동하여 환경에 맞는 버전을 설치함
- 이 파일을 서버컴퓨터의 디렉터리에 이동한 후 다음 코드를 통해 설치를 진행함
- 관리자 권한으로 쉘을 이용해 VMware 설치 파일을 실행함
sudo sh VMware-Workstation-Full-17.6.3-24583834.x86_64.bundle
- 설치되면 아래의 명령어를 통해 vmware를 실행함
- 이때 -E 옵션을 이용해 환경 변수를 유지해서 실행을 함
- 입력하지 않으면 GUI가 실행될 때 X11 디스플레이를 열 수 없는 문제가 발생했음
sudo -E vmware
- 동의해야하는 것들은 선택 후 Next를 누르고, CEIP와 관련된 것은 No를 선택한 후 Finish를 누름
- 완료되면 이런 창이 뜨게됨!
2. VM 생성 및 노드 구성
01. VM 생성
VM 생성하기
- 우측에서 new virtual machine클릭함
- os 이미지를 선택함
- 우분투 사이트(https://releases.ubuntu.com/focal/)에 접속해 설치 파일을 내려받으면 됨 - VM을 설정함
- 이름은 기본 이름인 'Ubuntu 64-bit'로 설정
- 'Customize Hardware...' 버튼을 클릭하고 아래처럼 설정함
- 네트워크 어댑터는 VMnet8번 NAT으로 설정함
- USB컨트롤러랑 Sound Card는 필요없으니 삭제 후 'Close' 버튼을 클릭함
- Disk Size : 20GB
- Processors : 2개, 2개 총 4개
- Memory : 4GB (4096MB)
Ubuntu 설치하기
- 이제 vm은 만들어졌고 다운받은 ubuntu iso 파일로 서버를 설치함
- 언어는 영어를 선택하고 그 다음 나오는 창도 쭉쭉 넘기면 됨
- ens32에서 엔터 누르고 IPv4설정으로 넘어감
- Manual 선택
- 주소를 맞게 입력함
- 이후 다 기본 설정되어있는대로 진행함
- SSH 설정에서 'Install OpenSSH server' 체크하고 진행함
- 설치가 다 되면 reboot now가 뜸
- 클릭하여 재부팅 하면 됨
02. 노드 구성
가상환경 clone 후 노드 구성하기
- 우클릭 후 'Manage - Clone'을 클릭함
- 이름과 Type을 아래와 같이 설정 후 완료함
- Clone Type은 full로 설정
- 마스터 노드 1대와 워커 노드 2대로 구성할 예정이라 3개를 클론 후 각각 이름을 설정함! - 각각 VM에 접속해 호스트 이름과 고정 IP를 변경함
- 마스터노드 : master
- 워커노드 : worker1, worker2
- 호스트 이름 수정
- /etc/hostname 파일과 /etc/hosts 파일 수정
sudo nano /etc/hostname
sudo nano /etc/hosts
- 노드들의 고정 IP를 변경함
- 설정 파일 /etc/netplan/ 디렉토리에 있는, 설정 파일에 접근하여 고정 IP를 다른 VM과 겹치지 않게 다 바꿔줌
- 마스터 노드 : 11 / 워커 노드 1 : 12 / 워커 노드 2 : 13 으로 설정함
cd /etc/netplan/ ls -l
- 호스트 이름 수정
3. 쿠버네티스 설치 및 연결
01. 쿠버네티스 설치
sudo su - # root 사용자로 변경
sudo apt-get update && sudo apt-get upgrade # 리눅스를 최신 상태로 업데이트
sudo apt install apt-transport-https curl
br_netfilter 모듈 활성화하기
# br_netfilter 모듈 로드
sudo modprobe br_netfilter
# 부팅 시 br_netfilter 모듈 자동 로드 설정
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
# iptables 필터링 활성화 설정
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# sysctl 설정 적용
sudo sysctl --system
스왑 메모리 비활성화 하기
- kubelet이 제대로 작동하려면 스왑 메모리를 비활성화 해야함
- 두 번째로 실행한 명령어는 시스템이 재부팅되어도 스왑 메모리가 비활성화되도록 유지시킴
스왑 메모리 : 물리 메모리가 부족할 경우를 대비해서 만들어 놓은 공간
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
도커(엔진 및 런타임) 설치하기
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker # 재부팅 후에도 서비스가 자동으로 시작되도록 설정
sudo systemctl status docker # 도커 서비스 상태 확인
- 일반 사용자 계정의 경우 권한 문제로 작업에 제약이 있을 수 있으므로 권한을 설정함
sudo usermod -aG docker $USER
- 도커가 정상적으로 설치되었는지 hello-world를 이용해 확인함
docker run hello-world
cgroup 드라이버 설정
- 쿠버네티스에서는 도커의 cgroup 관리를 위해 systemd를 사용하도록 변경해야 함
- 변경하지 않으면 클러스터 설치 과정에서 오류가 발생할 수 있음
1. docker info 명령어로 도커 설치 정보를 확인함
2. 다음 명령어는 cgroup driver가 systemd가 아닌 경우에만 실행
- 코드를 입력한 후에는 차례대로 esc, :wq!, enter를 입력하고 빠져나옴
vi /etc/docker/daemon.json
{
"exec-opts" : ["native.cgroupdriver=systemd"],
"log-driver" : "json-file",
"log-opts" : {
"max-size" : "100m"
},
"storage-driver" : "overlay2"
}
3. 도커 서비스를 다시 실행함
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload # .service 파일을 변경하면 데몬을 다시 로드해야 함
sudo systemctl restart docker # 도커 서비스 재시작
쿠버네티스 설치하기
# 구글 클라우드의 공개 사이닝 키를 다운로드 한다.
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
# 쿠버네티스 apt 리포지터리를 추가한다.
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 저장소 추가되었기 때문에 apt 업데이트
sudo apt-get update
# 쿠버네티스 패키지 설치
sudo apt-get install -y kubelet kubeadm kubectl
# 쿠버네티스 패키지 버전 고정
sudo apt-mark hold kubelet kubeadm kubectl
# 쿠버네티스 설치 버전 조회
kubelet --version
kubeadm version
kubectl version
# kubelet service 확인
sudo systemctl status kubelet.service
02. 쿠버네티스 연결
- 마스터 노드 설정하기
- 마스터 노드는 클러스터를 생성하는 것이 중요함
- 클러스터는 마스터와 워커 노드를 하나의 관리 단위로 묶는 역할을 함
- kubeadm init : 쿠버네티스 클러스터 생성
- pod-network-cidr : 파드 네트워크의 IP 주소 범위
- apiserver-advertise-address : 수신 대기 중임을 알릴 IP 주소 (API 서버의 IP 주소)로 마스터 노드의 IP를 설정
# Kubernetes 클러스터 초기화 (특정 Pod 네트워크 CIDR 및 API 서버 광고 주소 지정) sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.2 # 이후 kubeadm join과 관련된 내용이 나온다면 따로 메모해두기! # kubectl이 Kubernetes 클러스터와 상호작용할 수 있도록 .kube 디렉토리 생성 mkdir -p $HOME/.kube # 관리자 인증 파일을 kubectl에 필요한 config 파일로 복사 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # 사용자 권한으로 config 파일의 소유자 변경 (현재 사용자에게 읽기/쓰기 권한 부여) sudo chown $(id -u):$(id -g) $HOME/.kube/config # 설치 확인 kubectl get nodes
- 네트워크 설정하기
- 서로 다른 노드에 떠 있는 파드 간의 통신 혹은 외부와의 통신을 위해서는 CNI 플러그인이 필요함
- 여기서는 플라넬 CNI 플러그인을 사용함
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 플라넬 CNI 플러그인이 정상적으로 설치되면 다음 명령어를 입력해 CoreDNS 파드가 실행 중(running)인지 확인함. CoreDNS 파드가 실행 중이어야 파드들의 네트워크 통신이 가능함
kubectl get pods --all-namespaces
- 네트워크 설정하기
※ 마스터 노드 NotReady 상태 해결했던 방법
- 나의 문제 : 노드 확인 명령어 치면 아래와 같은 오류 뜨면서 안되는 문제 발생
The connection to the server <host>:6443 was refused - did you specify the right host or port?
- 해결 방법 : ens32를 사용중이라 Flannel에서 인터페이스를 지정함
- Flannel 설치 파일 다운로드
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 파일 수정
containers: - name: kube-flannel image: quay.io/coreos/flannel:v0.22.0-amd64 command: - /opt/bin/flanneld - --ip-masq - --kube-subnet-mgr # # # 여기 사이에 추가했음! # # # env: - name: FLANNEL_NETWORK value: "10.244.0.0/16" - name: FLANNEL_IFACE value: "ens32" # # # # # # # # # # # # # # # # # resources: {}
- Flannel 네트워크 플러그인 적용
kubectl apply -f kube-flannel.yml
- coredns 재생성함
- 워커 노드 설정하기
- 워커 노드는 마스터 노드에 생성된 클러스터에 조인하기 위해 kubeadm join 명령어를 실행함
- 마스터 노드에서 클러스터 설치 결과로 보여 준 명령어를 수정없이 그대로 사용하면 됨
- 실행 결과 마지막에 'Run kubectl get nodes' on the control-plane to see this node join the cluster' 라는 문구가 나타나면 정상적으로 설치된 것
kubeadm join 192.168.0.3:6443 --token i1zobz.lvw2yxvxjyv3tk7y \ --discovery-token-ca-cert-hash sha256:8da5a66297c72b90e6e809ca76a5bcfedbad121821496b2d6357bbf6f319764a
+ 마스터 노드에서 쿠버네티 클러스터에 등록된 노드들의 상태를 보여주는 명령으로 확인해봄
kubectl get nodes
잘 연결된 것을 확인할 수 있음!!
'개인 공부 > 쿠버네티스' 카테고리의 다른 글
[쿠버플로우] 설치 및 세팅하기 (1) | 2025.06.05 |
---|---|
[쿠버네티스] VMware를 이용한 쿠버네티스 구축&배포 프로젝트 - ② (0) | 2025.05.21 |
[쿠버네티스] PART3. 한 걸음 더 나아가기 (0) | 2025.05.07 |
[쿠버네티스] PART2. 쿠버네티스 기본 사용법 배우기 - ② (0) | 2025.04.18 |
[쿠버네티스] PART2. 쿠버네티스 기본 사용법 배우기 - ① (0) | 2025.04.17 |