본문 바로가기
K8s

[쿠버네티스] 기본셋팅2단계. Kubernetes(v1.30) 설치하기

by 미눅스[멘토] 2024. 7. 3.
728x90

Kubernetes Install : https://kubernetes.io/ <- 설치방법이 나와있음.

 

a. 설치 전 환경설정

b. kubeadm, kubelet 설치

d. worker node 구성

e. 설치확인

 

A.설치 전 환경설정


 

Documentation 클릭

 

Install the kubeadm setup tool 클릭

 

Installing kubeadm으로 설치하기전에

메모리 2GA

CPU 2 코어가 필요하다고 알려줌

또한!!

중요! nodes들(master,node1,node2) 전부 Swap이 Disable되어야 한다고 설명해 주고있다

 

 

※ 모든 설치 과정은 root 계정으로 진행할 것을 권장

#root(sudo) 계정으로 변환
sudo su

 

 

#Swap disabled
#swapoff -a : 스왑 설정 해제 및 확인
#sed -i '/swap/s/^/#/' /etc/fstab 재부팅 이후에도 스왑설정 유지

#메모리 상태 확인
sudo free -m

#swap 메모리 상태 확인, 출력값이 없으면 swap 메모리 비활성화 상태
sudo swapon -s
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab

 

sudo free -m 명령어로 확인 모두0으로 나오는것을 볼 수 있음

 

 

그리고 다시 페이지를 보면

운영상 반드시 열려있어야 하는 필수 포트(6443포트)가 있는데,

이것이 닫혀있을 경우 운영 및 설치에 문제가 있을 수 있다고 한다.

6443 포트를 확인하라고 한다.

 

nc 127.0.0.1 6443 -v 명령이 있는데 생략하고 일단 건너 뛴다.

nc 127.0.0.1 6443 -v

 

 

 

방법1: 쿠버네티스 포트만 방화벽 포트 개방

#방화벽 예외 설정(마스터, 워커)
sudo apt-get install -y firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

#마스터 노드일 경우
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250-10252/tcp
sudo firewall-cmd --permanent --add-port=8285/udp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --reload

#워커 노드일 경우
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --permanent --add-port=8285/udp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --permanent --add-port=26443/tcp
sudo firewall-cmd --reload

 

 

방법2:방화벽 비활성화 

#방화벽 비활성화(마스터, 워커)
sudo apt-get install -y firewalld
sudo systemctl stop firewalld
sudo systemctl disable firewalld

 

 

 

방화벽 오픈 상태 확인

#열린 포트 확인
sudo firewall-cmd --list-all

#열린 포트 확인
sudo netstat -tlnp

#다른 노드의 포트 점검
telnet [ip] [port]
ex) telnet 192.168.100.128 6443

>> 
Trying 192.168.111.128...
telnet: Unable to connect to remote host: Connection refused
#Trying 192.168.111.128... 만 계속 나오면 방화벽 오픈되어 있지 않음
#Connection refuesed가 나오면 방화벽 오픈은 되어 있으나 프로세스가 올라가 있지 않은 상태

#방법2
curl -v telnet://[ip]:[port]

 

 

방화벽은 이미 앞단에서 설정이 되어있어서

보통 쿠버네티스에서는 방화벽을 해제하고 사용한다고 인터넷 강사가 그랬음...

 

방법3

# 쿠버네티스 주요 포트만 허용으로 변경해도 됨 (ex: ufw allow 6443)
# 방화벽 해제 (우분투는 기본으로 ufw명령어가 있다고함 없으면 방법2 참고.)
ufw disable

 

 

컨테이너 런타임 설치 부분을 보면 container ruentime 부분링크를 타고 들어간다.

 

 

컨네이너 런타임의 필수 구성 요소  설치 구성에 대해 설명하고 있다

IPv4 패킷 전달 활성화 하는 코드

 

 

네트워크 옵션 설정

# sysctl params required by setup, params persist across reboots
#/etc/sysctl.d/k8s.conf 파일 생성
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF

# Apply sysctl params without reboot
#시스템 재시작 없이 stysctl 파라미터 반영
sudo sysctl --system

 

#net.ipv4.ip_forward가 1로 설정 되었는지 확인
sysctl net.ipv4.ip_forward

 

여기까지 쿠버네티스를 설치 하기위한 환경설정을 완료 하였다.

그럼이제 kubeadm, kubelet,kubectl을 설치하러 가보자


A-2 컨테이너 런타임 설치

1.docker 설치 시 Depends로 함께 설치되는 containerd패키지 사용

2.containerd만 설치 사용

3.docker engine _ eri-dockerd (나는 이 방법으로 설치해 봤다)

* 위 세가지 방법 중 한가지만 적용하면 된다.

2.1. 방법1) Docker 설치 후 Containerd 패키지 사용

2.1.1. apt 업데이트 및 필수 패키지 설치

#apt 업데이트
sudo apt-get update

#필수 패키지 설치
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

 

2.1.2. 공개키 다운로드 및 저장소 등록

#공개키 다운로드
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 저장소 등록
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

2.1.3. 도커 설치

#저장소 추가로 apt 업데이트
sudo apt update

#도커 설치
sudo apt install -y docker.io 또는 sudo apt install -y docker-ce

#도커 버전 조회
docker --version

※ docker.io 데비안(우분투)에서 제공하는 도커 패키지로 데비안 저장소에서 도커 패키지를 가져오게 된다.

docker.io 는 docker의 외부 종속성 패키지는 마이크로 패키징으로 독립적으로 패키징되어 있다.

docker-ce 설치 시 → 외부 종속성 패키지로 containerd.io 설치됨.

docker.io 설치 시 → 외부 종속성 패키지로 containerd 설치됨.

 

2.1.4 도커 데몬 설정

#/etc/docker 디렉토리 없을 경우 생성
sudo mkdir /etc/docker

#daemon.json 파일 추가
sudo 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

 

2.1.5. 필요시 cgroup(runc) 옵션 설정

#containerd 구성 파일 생성
sudo mkdir -p /etc/containerd

#containerd 기본 설정값으로 config.toml 생성
sudo containerd config default | sudo tee /etc/containerd/config.toml

#config.toml 파일 수정
vi /etc/containerd/config.toml

# cgroup driver(runc) 사용하기 설정
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  SystemdCgroup = true

#수정사항 적용 및 재실행
sudo systemctl restart containerd

 

2.1.6. 도커 재시작

#도커 재시작
sudo service docker restart

#도커 상태 조회
sudo service docker status

docker.io 설치 결과

 


2.2. 방법2) Containerd 설치 후 사용

2.2.1. apt 업데이트 및 필수 패키지 설치

#apt 업데이트
sudo apt-get update

#필수 패키지 설치
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

 

2.2.2. 공개키 다운로드 및 저장소 등록

#공개키 다운로드
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 저장소 등록
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

2.2.3. containerd 패키지 설치

#저장소 적용을 위한 apt 업데이트
sudo apt-get update

#containerd 패키지 설치
sudo apt-get install containerd

#설치 확인
sudo systemctl status containerd

 

2.2.4. containerd config 옵션 설정

#containerd 구성 파일 생성
sudo mkdir -p /etc/containerd

#containerd 기본 설정값으로 config.toml 생성
sudo containerd config default | sudo tee /etc/containerd/config.toml

#config.toml 파일 수정
vi /etc/containerd/config.toml

# cgroup driver(runc) 사용하기 설정
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  SystemdCgroup = true

#수정사항 적용 및 재실행
sudo systemctl restart containerd

 

 


2.3. 방법3) Docker Engine + cri-dockerd 적용

  • Docker 엔진 관련 명령을 기반으로 스크립트를 실행
  • 권한이 있는 Pod에서 Docker 명령 실행
  • Docker 특정 로깅 및 모니터링 활용

등의 이유로 도커 엔진을 컨테이너 런타임으로 사용하는 경우가 있다.

또는 dockershim을 대체하기 위해 크리도커드(cri-dockerd)로 마이그레이션 하는 경우가 있다.

 

2.3.1. apt 패키지 업데이트 및 필수 패키지 설치

#apt 업데이트
sudo apt update

#필수 패키지 설치
sudo apt install -y apt-transport-https ca-certificates curl gnupg

#설치 패키지 조회
dpkg -l | grep [패키지명]

 

2.3.2. docker gpg 키 다운로드 및 저장소 추가

#공개키 다운로드
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 저장소 등록
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

2.3.3. docker 패키지 설치

#등록한 레포지토리를 반영하기 위해 apt update
sudo apt update

#docker 패키지 설치
sudo apt install -y docker-ce

 

2.3.4. 설치 확인

#버전 확인
docker --version

#hello-world container 생성
docker run -it --name [컨테이너명] hello-world

#도커 컨테이너 조회
docker ps -a

#도커 컨테이너 삭제
docker rm [컨테이너ID 또는 컨테이너명]

#도커 이미지 조회
docker images

#도커 이미지 삭제
docker rmi [이미지명]

 

2.3.5. cri-dockerd를 이용하여 도커 엔진과 쿠버네티스 연결

#cri-dockerd 소스코드 복사
git clone https://github.com/Mirantis/cri-dockerd.git

#Go언어 설치
wget https://storage.googleapis.com/golang/getgo/installer_linux
chmod +x ./installer_linux
./installer_linux
source ~/.bash_profile
#Go언어 설치가 만약 잘 안된다면 아래 링크를 참조

#cri-dockerd 빌드
cd cri-dockerd
mkdir bin
go build -o bin/cri-dockerd

#/usr/local/bin 으로 빌드파일 복사
mkdir -p /usr/local/bin
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd

#systemd에 서비스 등록
cp -a packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service

#재기동
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
sudo systemctl restart docker && sudo systemctl restart cri-docker

#상태 확인
sudo systemctl status cri-docker.socket --no-pager

# Docker daemon Cgroup 변경
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

 

 

GO언어 설치 방법

https://deahan.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F

 

Tistory

좀 아는 블로거들의 유용한 이야기

www.tistory.com

 


 

B. kubeadm, kubelet, kubectl 설치

 

아래 kubeadm, kubelet, kubectl 이 3개는  marster, node1, node2 에 모두 설치하도록 한다.

  • kubeadm: 클러스터를 부트스트랩하는 명령.
    ㄴ(쿠버네티스 전체를 관리해주고 운영해주는 커맨드)
  • kubelet: 클러스터의 모든 머신에서 실행되고 포드 및 컨테이너 시작과 같은 작업을 수행하는 구성 요소.
    ㄴ(데몬이라서 쿠버네티스 컨테이너를 조작해주고 master와 통신을 해줌)
  • kubectl: 클러스터와 통신하기 위한 명령줄 유틸리티
    ㄴ(ex:나  웹서버 2개 실행해줘 또는 웹서버 3개 DB3개 실행해줘 이런 명령들을 쓸때 사용)

 

 

 

# apt 최신상태 업데이트
sudo apt-get update
# 필수 패키지 설치
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

 

 

여기 단계에서 핑크색 화면 뭐 뜰수도 있는데 ok하고 그냥 넘어가면 된다(나도 뭔지 잘 모름).

 

 

#Ubuntu 22.04보다 이전 릴리스에서는/etc/apt/keyrings기본적으로 directory가 존재하지 않으며 curl 명령을 실행하기 전에 이를 만들어야 한다.
#ㄴ우리는Ubuntu 22.04이니 기본적으로 있다.
#공개키 다운로드
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

 

 

#Kubernetes의 패키지 저장소를 APT 소스 목록에 추가
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

 

 

#요약 : 패키지 인덱스를 업데이트하고 aptkubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다.
#저장소 추가되었기 때문에 apt 업데이트
sudo apt-get update

#쿠버네티스 패키지 설치
sudo apt-get install -y kubelet kubeadm kubectl

#kubeadm을 실행하기 전에 kubelet 서비스를 활성화
sudo apt-mark hold kubelet kubeadm kubectl

#쿠버네티스 패키지 버전 고정
sudo apt-mark hold kubelet kubeadm kubectl

#쿠버네티스 설치 버전 조회
kubelet --version
kubeadm version
kubectl version

#kubelet service 확인
sudo systemctl status kubelet.service

apt업데이트

kubelet kubeadm kubectl 설치

kube admin 실행하기 전에 kubelet 활성화

 

 

 

#서비스를 즉시 시작
systemctl start kubelet
#시스템 부팅 시 자동으로 시작되도록 설정
systemctl enable kubelet