
os: ubuntu 22.04.4 LTSmaster node(vm): CPU 2 core, RAM 4GB ( 최소 CPU 2 core, RAM 2GB )worker node1(vm): CPU 2 core, RAM 4GB ( 최소 CPU 1 core, RAM 1GB )worker node2(vm): CPU 2 core, RAM 4GB ( 최소 CPU 1 core, RAM 1GB )
# Check core
$ nproc
# Check memory
$ free -h
root계정으로 설치를 진행하길 권장드립니다.
$ sudo passwd root로 root 계정 생성$ su -로 루트 계정 실행 or 대부분의 명령어sudo붙여서 실행
sudo가 있지만, 루트 계정일 경우, sudo 없이 실행하시면 됩니다.# swap 임시 비활성화
$ sudo swapoff -a
# swap 영구 비활성화 ( swap 부분을 주석처리 )
$ sudo sed -i '/swap/s/^/#/' /etc/fstab
# 메모리 상태 확인
$ sudo free -m
# swap 메모리 상태 확인, 출력값이 없어야 비활성화
$ sudo swapon -s
방화벽을 비활성화하는 방법이 일반적이며, 각 방화벽 포트를 개방하는 방법도 있습니다.
- 저는 방화벽 비활성화로 진행하겠습니다.
# 방화벽 비활성화 ( master, worker )
$ sudo apt-get install -y firewalld
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
# 열린 포트 확인
$ sudo firewall-cmd --list-all
# 열린 포트 확인
$ sudo apt-get install net-tools
$ sudo netstat -tlnp
# /etc/modules-load.d/k8s.conf 파일 생성
$ sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
# /etc/sysctl.d/k8s.conf 파일 생성
$ sudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 시스템 재시작 없이 stysctl 파라미터 반영
$ sudo sysctl --system
# apt 업데이트
$ sudo apt-get update
# 필수 패키지 설치
$ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
#공개키 다운로드
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
# 저장소 추가로 apt 업데이트
$ sudo apt update
# 도커 설치
$ sudo apt install -y docker.io
# 도커 버전 조회
$ docker --version
# /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
# containerd 구성 파일 생성
$ sudo mkdir -p /etc/containerd
# containerd 기본 설정값으로 config.toml 생성
$ sudo containerd config default | sudo tee /etc/containerd/config.toml
# config.toml 파일 수정
$ vim /etc/containerd/config.toml
# vim 편집기에서 편집 : cgroup driver(runc) 사용하기 설정
# 아래 부분 찾아서 true로 수정
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
# 수정사항 적용 및 재실행
$ sudo systemctl restart containerd
# 도커 재시작
$ sudo service docker restart
# 도커 상태 조회
$ sudo service docker status
# apt update
$ sudo apt-get update
# 필수 패키지 설치
$ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
# 공개 키 다운로드
curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg
# apt 저장소에 쿠버네티스 저장소 추가
sudo echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 저장소 추가되었기 때문에 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
apt-get install kubelet kubeadm kubectl설치하는 과정에서unable to locate발생
- k8s docs 에서 나오는 가이드대로 설치
# 1. update & upgrade system ( 오류가 나도 무시 )
$ sudo apt update && sudo apt upgrade -y
# 2. docker 설치 ( 이미 설치되어 있다고 나옵니다. )
$ sudo apt install -y docker.io
$ sudo docker --version
# 3. Kubernetes Components 설치
$ 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
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
$ sudo apt update
$ sudo apt install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl
kubeadm init을 하면, 출력창에join토큰이 나옵니다. 해당 부분을 복사해서 저장해두세요!!
# 쿠버네티스 클러스터를 초기화하여 새로운 마스터 노드를 생성하는 명령어
# 뒤에 cidr을 별도로 지정하지 않으면 디폴트값 사용
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 확인
$ kubectl get nodes
ex) join 토큰 저장
kubeadm join 192.168.111.123:6443 --token 57z3wr.olafcjal4e7j8tp9 \
--discovery-token-ca-cert-hash sha256:39d9b89986fe769bd7aeb166c61eb407274a49dd8058fd16a416c768d0ada738
root 계정이 아닌 계정에서도 sudo를 붙이지 않고 kubectl을 사용하기 위함
- root 계정이 아닌 계정에서 실행해야 합니다.
sudo mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
다양한 CNI가 있으며, 저는
calico를 사용하겠습니다.
- calico는 기본 cidr이
192.168.0.0/16이므로, 위에 init에서 cidr을 별도로 설정했을 경우, 수정이 필요합니다.
# Tigera Calico 연산자와 사용자 정의 리소스 정의를 설치
$ kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/tigera-operator.yaml
# 필요한 사용자 정의 리소스를 생성하여 Calico를 설치
$ wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/custom-resources.yaml
# 원래 기본대역대는 192.168.0.0/16 이라서 설정한 값 10.244.0.0/16으로 변경
$ sed -i 's/192\.168\.0\.0\/16/10.244.0.0\/16/g' custom-resources.yaml
# kubectl 적용
$ kubectl apply -f custom-resources.yaml
# 확인 (시간이 좀 걸린다. 시간이 지나면 STATUS가 Ready로 변한다.)
$ kubectl get nodes
Master node에서
kubeadm init을 통해 생성한join을 이용하여 worker node 등록
worker node1,worker node2둘다 적용
kubeadm join 192.168.111.123:6443 --token 57z3wr.olafcjal4e7j8tp9 \
--discovery-token-ca-cert-hash sha256:39d9b89986fe769bd7aeb166c61eb407274a49dd8058fd16a416c768d0ada738
# Master node1과 worker node1과 worker node2: 총 3대
$ sudo kubectl get node