쿠버네티스 설치, 구축부터 CI/CD까지 구현해보기 - 1. 쿠버네티스 설치하기
예전에는 vargrant를 사용하여 쿠버네티스가 설치되어 있는 상태로 정리했었는데,
이번에는 vargrant를 사용하지 않고 처음부터 정리해보려 한다.
최근에 os가 날아가기도 했고, 어짜피 다시 만들어야하니 이왕 하는거 정리하면서 하겠다.
아마 꽤 긴 시리즈가 되지 않으까 싶다.
* 전제조건
- 우분투 22.04를 사용
- 마스터 노드는 사용중인 PC
- 다른 노드들은 VM(virtualbox나 VM)에 설치
1. 마스터 노드에 쿠버네티스 설치하기
- 필요한 패키지 설치
sudo apt-get update && sudo apt-get install -y apt-transport-https curl |
- Google GPG Key 추가
: 소프트웨어 패키지 및 리포지토리의 신뢰성과 무결성을 확인하는 데 사용
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo tee /etc/apt/trusted.gpg.d/kubernetes.asc |
- k8s 저장소 추가
echo "deb https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list |
- k8s 서비스, 관리 유틸들 설치
sudo apt-get install -y kubelet kubeadm kubectl |
설치 잘 됐으면 커맨드 실행했을 때 위처럼 나온다.
kubelet에러는 아직 설치만 했기때문에 일단 넘어가도 된다.
2. 클러스터 초기화 하기
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 |
위에 순서대로 진행하면서 해당 명령어를 실행하면
다음과 같은 에러가 발생한다.
문제의 원인은 containerd가 설치가 안되어있거나,
실행중이지 않아서 그렇다.
나는 포멧을 했기 때문에 설치가 안되어 있으니
설치해준다.
sudo apt install -y containerd |
처음 설치하는 경우에는 아래와 같은 세팅들을
해줘야 한다.
- 설정 파일 설정
sudo mkdir -p /etc/containerd |
containerd config default | sudo tee /etc/containerd/config.toml |
config.toml 파일을 살펴보면
이런식으로 되어 있는데 필요할때 되면 수정해보자.
- systemd 사용하도록 변경
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml |
- containerd 재시작 및 자동시작 설정
sudo systemctl restart containerd |
sudo systemctl enable containerd |
- 설치 및 실행 확인
containerd --version sudo systemctl status containerd |
여기까지 했으면 일단 containerd도 설치됐다.
다시 아까 막힌 부분부터 실행해보자.
- k8s 초기화
sudo kubeadm reset -f sudo kubeadm init --pod-network-cidr=192.168.0.0/16 |
실행해보면 containerd에 대한 에러는 사라졌는데,
아직 error가 발생한다.
error의 내용을 보면 /proc/sys/net/ipv4/ip_forward 값이 0으로 되어 있어서 K8s 네트워크가 제대로 동작하지 않는 것으로 보인다.
해당 설정을 바꿔보자.
- /etc/sysctl.conf 수정
해당 파일을 열어보면 error의 원인과 똑같이 생긴게 주석처리 되어있다.
주석 풀어주면 된다.(sudo 권한이 필요하다.)
sudo sysctl -p # 수정된 내용 반영 |
이제 다시 초기화 해보자..
sudo kubeadm reset -f sudo kubeadm init --pod-network-cidr=192.168.0.0/16 |
잘 되는 모습을 볼 수 있다.
대략 5분정도 걸리니 기다리면 된다.
일단 여기까지 하면 클러스터 초기화가 끝난다. 라고 말하려고 했는데,
또 error가 발생했다..
원인은 kubelet이 실행이 안되는 문제였고,
journalctl -xeu kubelet | tail -50 |
명령 실행후 내용을 좀 찾아보니 kubelet이 실행되려면 swap이 꺼져있어야 된다고 한다.
swap을 끄려면
sudo swapoff -a |
명령을 실행하면 되는데, 이건 현재 상태에서 끄는거고,
재시작 시에도 끄게 해주려면 /etc/fstab을 수정해주면 된다.
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab |
이후 비활성화가 잘됐는지 확인해보려면
free -h |
cat /proc/swaps |
이렇게 아무것도 안나오면 된다.
이후 다시 클러스터 초기화 해주면 된다..
sudo kubeadm reset -f sudo kubeadm init --pod-network-cidr=192.168.0.0/16 |
드디어 성공이다.
원래 이후 클러스터 설정까지도 정리하려 했는데, 에러들이 많아서 글이 길어져 이후는 다음에 쓰려한다.
위에 보면 kubeadm join 명령어 부분부터 끝까지는 복사해둬야 한다.
나중에 작업노드들을 kubectl에 join 시키는 명령어이기 때문이다.
다음 글에서 더 알아보자.