Kubernetes 설치 (containerd, kubelet, kubeadm, kubectl)
목차
docker → image 개발 및 테스트containerd → Kubernetes에서 사용하는 container runtime
docker runtime 주의- Docker와 containerd가 모두 감지되면 Docker가 우선
- 두 개 이상의 런타임이 감지되면 kubeadm은 오류와 함께 종료
Kubernetes(kubelet kubeadm kubectl)
- kubelet → Kubernetes간 통신
- kubeadm → 관리
kubectl → commend\*\*Kubernets 클러스터 환경 구축시는 초기화, CNI도 추가로 진행해야 함
방화벽 해제
sudo ufw disable
sudo ufw statusPod가 Swap 사용하지 않도록 Swap 해제
- 프로세스의 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.swapNTP(Network Time Protocol) 설정 →시간동기화 설정
- 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 #시간 동기화 서버들 잘 나오는지 확인커널 IP포워딩 활성화
- 네트워크 패킷 올바르게 포워딩을 하기 위함
- 미설정 시 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 표시 확인containerd 를 위한 container runtime
sudo cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOFmodprobe
- 요청된 모듈이 동작 할 수 있도록 depmod를 이용하여 검색에 필요한 모듈을 커널에 등록
sudo modprobe overlay
sudo modprobe br_netfilteriptables에 bridge관련 설정 추가 →Node간 통신
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.confDocker, containerd 설치를위한 패키지 설치
- https 리포지토리 허용 패키지 및 dokcer에 필요한 패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg2Docker, containerd 설치 → keyrings로 변경되었음
- 도커 공식 GPG 키 추가 (https://docs.docker.com/engine/install/ubuntu/)
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 설정확인kubernetes 설치
# 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.servicehosts 설정 → node간 통신 설정(ip가 아닌 이름으로 찾을 수 있게 설정)
- 싱글일경우 설정 불필요
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 내용