CLOUD/Docker&Kubernetes

[Kubernetes/Ubuntu] 쿠버네티스 환경 구축하기

alsruds 2023. 5. 13. 19:34

◈ Oracle VM VirtualBox 이용

◇ 노드 3개 : 마스터 노드, 워커 노드1, 워커 노드2 ◇

 

 

[ Master Node ]

● 도커 및 kubeadm 설치

sudo apt update
sudo apt install docker.io -y

# 아래와 같은 에러 발생 시 리부팅 : reboot
# E: /var/lib/dpkg/lock-frontend 잠금 파일을 얻을 수 없습니다 - open (11: 자원이 일시적으로 사용 불가능함)
# E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

# 설치 확인
docker<TAB>

 

쉘 스크립트 작성 & 실행

》 쿠버네티스 설치

# 쉘 스크립트 작성 : gedit install.sh
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 실행
sudo sh install.sh

# 설치 확인
kube<TAB>

 

추가 애플리케이션 설치 & 방화벽 해제

# 설치
sudo apt install vim net-tools curl -y

# 방화벽 해제
ufw disable

 

시스템 종료

init 0 또는 halt

 

스냅샷 작성 후 master 이름으로 변경

 

네트워크 설정

》 도구 > 네트워크 > NAT Networks > 만들기

만들어졌어용 ㅎ^ㅎ

》 설정 > 네트워크

 

 

[ Worker1 / Worker2 ]

master 노드 복제하기

》 이름 : worker1 / worker2

완전한 복제

현재 머신 상태

모든 네트워크 어댑터의 새 MAC 주소 생성

 

● 연결 확인

# ip 확인
ip addr

# 연결 확인
ping [ip]

 

 

[ Master / Worker1 / Worker2 ]

호스트 이름 변경

변경 후 reboot 해야 적용

# master
sudo echo master > /etc/hostname

# worker1
sudo echo worker1 > /etc/hostname

# worker2
sudo echo worker2 > /etc/hostname

 

Swap 기능 비활성화

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

 

Cgroup 변경

도커 기본 Cgroup 인 cgroupfs 에서 systemd 로 변경

# 현재 도커의 Cgroup 확인
sudo docker info | grep -i cgroup

# 설정 파일 변경 (root 권한)
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF

# 재시작
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

 

● 마스터 노드 초기화

kubeadm init

 

● 마스터 노드에서 새 터미널 창으로 설정 (일반유저 권한)

# 유저를 위한 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 네트워크 애플리케이션 설치
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

 

생성된 노드 정보 확인 시 마스터 정보만 출력되는 상태 : NotReady

마스터 노드에서 확인

kubectl get node

 

워커 노드 2대 참여시키기

마스터 노드에서 kubeadm init 시 출력되었던 kubeadm join ~ 워커 노드에 붙여넣기 (root 권한으로)

sudo systemctl restart docker

 

최종 상태 확인하기

kubectl get nodes

모두 Ready 인 것을 확인 ~

 

 


 

[ 실습 ]

● Nginx 웹 브라우저 띄워보기

》 생성된 NodePort 의 포트 번호로 Firefox 에서 접속

》 ClusterIP:NodePort

# nginx pod 생성
kubectl create deploy nginx --image=nginx

# 포트 번호 할당
kubectl expose deploy nginx --type=NodePort --port=80 --target-port=80

# 확인하기
kubectl get svc