목차

Kubernetes 설치 (containerd, kubelet, kubeadm, kubectl)

docker → image 개발 및 테스트
docker runtime 주의
  • Docker와 containerd가 모두 감지되면 Docker가 우선
  • 두 개 이상의 런타임이 감지되면 kubeadm은 오류와 함께 종료
  • kubelet → Kubernetes간 통신
  • kubeadm → 관리
kubectl → commend
sudo ufw disable

sudo ufw status
  • 프로세스의 Memory가 Swap(디스크메모리)으로 올라가면 성능에 많은 문제가 생김
sudo swapoff -a #swap 해제

free #swap 확인

sudo sed -i '/ swap / s/^/#/' /etc/fstab #swap 영구 미사용

sudo vi /etc/fstab # #/swpfile  none swap sw 0 0 되어있느지 확인

#masking 작업
sudo systemctl list-unit-files --type swap

#나온 값 적어주면됨 예시
sudo systemctl mask dev-disk-by\\x2duuid-19433ff4\\x2dcb9e\\x2d4dff\\x2d8e5a\\x2d97d927b25d11.swap
  • k8s cluster는 보통 여러개의 VM이나 서버로 구성되기 때문
  • 클러스터 내의 모든 Node의 시간 동기화가 요구됨
#한국 시간으로 변경
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

sudo apt update

##ubuntu 24.04 는 ntpsc 설치 ntp는 기본 시스템하고 병행 사용 불가
sudo apt install ntp

sudo systemctl restart ntp

sudo systemctl status ntp # 활성화 확인

sudo ntpq -p #시간 동기화 서버들 잘 나오는지 확인
  • 네트워크 패킷 올바르게 포워딩을 하기 위함
  • 미설정 시 error
    • [ERROR FileContent–proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
sudo -i #root

echo '1' > /proc/sys/net/ipv4/ip_forward

cat /proc/sys/net/ipv4/ip_forward #1 표시 확인
sudo cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
  • 요청된 모듈이 동작 할 수 있도록 depmod를 이용하여 검색에 필요한 모듈을 커널에 등록
sudo modprobe overlay
sudo modprobe br_netfilter
sudo cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system
#활성 확인 * Applying /etc/sysctl.d/k8s.conf 및 /etc/sysctl.d/99-sysctl.conf
  • https 리포지토리 허용 패키지 및 dokcer에 필요한 패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg2
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \\
\"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \\
$(. /etc/os-release && echo \"$VERSION_CODENAME\") stable\" | \\
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
  • docker-ce와 관련 도구 및 containerd 설치
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker version #버전확인
  • containerd 설정
sudo sh -c \"containerd config default > /etc/containerd/config.toml\"

sudo vi /etc/containerd/config.toml
# [] CRI 제거 확인 -> disabled_plugins = []

sudo sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml

sudo systemctl restart containerd.service
  • docker daemon 설정
sudo vi /etc/docker/daemon.json
{
	\"exec-opts\": [\"native.cgroupdriver=systemd\"],
	\"log-driver\": \"json-file\",
	\"log-opts\": {
	\"max-size\": \"100m\"
	},
	\"storage-driver\": \"overlay2\"
}

#systemd 설정 중요!!
# vi /etc/docker/daemon.json 내용
sudo mkdir -p /etc/systemd/system/docker.service.d

sudo usermod -aG docker [리눅스계정] #리눅스계성으로 도커 사용

sudo systemctl daemon-reload

sudo systemctl enable docker

sudo systemctl restart docker

sudo systemctl status docker #확인

sudo systemctl restart containerd.service

sudo systemctl status containerd.service

sudo reboot #재시작

docker info #Cgroup Driver: systemd 설정확인
# GPG 키 다운로드
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 저장소 등록
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list


sudo apt update

sudo apt install kubelet kubeadm kubectl

#버전확인
kubeadm version

kubectl version -o yaml

kubelet --version

#자동 업데이트 방지(hold)
sudo apt-mark hold kubelet kubeadm kubectl

#kubelet start 유지 설정
sudo systemctl daemon-reload

sudo systemctl restart kubelet.service

sudo systemctl enable --now kubelet.service
  • 싱글일경우 설정 불필요
sudo vi /etc/hosts
#ip는 각 노드 설정에 맞춰 변경
#노드 이름도 본인이 설정한 이름에 맞게 설정
127.0.0.1 localhost
127.0.1.1 k8s-master
192.168.56.100 k8s-master
192.168.56.101 k8s-node1
192.168.56.102 k8s-node2
192.168.56.103 k8s-node3

### 마스터 노드가 여러개일경우  아래 추가
192.168.0.110 kube-lb #로드 밸런서 지정

#vi /etc/hosts 내용