1. OS 설치 후 기본 설정
아래 설정은 모든 노드들에서 작업한다.
패키지 설치
$ sudo apt -y update
$ sudo passwd root
$ su -
# apt -y install openssh-server vim net-tools
ssh 설정
# vi /etc/ssh/sshd_config
34 PermitRootLogin yes // yes로 변경
58 PasswordAuthentication yes // 주석해제
# systemctl restart sshd
https://estar987.tistory.com/135
이전에 포스팅 한 글을 토대로 Hostname을 이용해 별도의 인증 없이 노드간 ssh 접근이 가능하도록 setting 한다.
2. k8s 구성을 위한 사전 설정
방화벽 해제
# ufw disable
swap 해제
# swapoff -a
# free
total used free shared buff/cache available
Mem: 4017752 1124056 137528 8236 2756168 2647400
Swap: 0 0 0
# sed -i '/ swap / s/^/#/' /etc/fstab
혹은
# vi /etc/fstab
#/swapfile (swap 설정 주석 처리)
NTP 시간 동기화
# apt -y install ntp
# systemctl restart ntp
# systemctl status ntp
# ntpq -p
# date
IP 포워딩 활성화
네트워크 패킷을 올바르게 포워딩하기 위해 커널에서 IP 포워딩을 활성화 시켜야 함
# echo '1' > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
1
contianerd 를 이용한 container runtime 구성
# cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
커널에 모듈 적용
modprobe 프로그램은 요청된 모듈이 동작할 수 있도록 부수적인 모듈을 depmod 프로그램을 이용하여 검색해 필요한 모듈을 커널에 차례로 등록한다.
# modprobe overlay
# modprobe br_netfilter
bridge 설정 추가
노드간 통신을 위한 iptables 에 브릿지 관련 설정 추가
# 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
# sysctl --system
Docker 설치
k8s runtime 준비 → contianerd, docker, CRI-O 중에 선택이고, 여기서는 contianerd 사용
apt가 HTTPS로 리포지터리를 사용하는 것을 허용하기 위한 패키지 및 docker에 필요한 패키지 설치
# apt-get update && apt-get install -y apt-transport-https ca-certificates curl \
software-properties-common gnupg2
도커 공식 GPG 키 추가 (https://docs.docker.com/engine/install/ubuntu/)
# 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
# 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
# apt-get update
Docker Runtime 주의!
Docker와 containerd가 모두 감지되면 Docker가 우선합니다. 이는 Docker 18.09부터 containerd와 함께 제공되고 Docker만 설치한 경우에도 둘 다 감지할 수 있기 때문에 필요합니다. 다른 두 개 이상의 런타임이 감지되면 kubeadm은 오류와 함께 종료됩니다.
아래는 docker는 image 개발 및 테스트 용도이고, 주 container runtime은 "containerd"를 사용 한다
데몬 설정
docker-ce version 확인
# apt-cache policy docker-ce
docker-ce와 관련 도구 및 containerd 설치
# apt-get -y install docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# docker version
containerd 설정
# sh -c "containerd config default > /etc/containerd/config.toml"
# vi /etc/containerd/config.toml
disabled_plugins = [] --> [] CRI 제거 확인
# sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
# systemctl restart containerd.service
docker daemon 설정
# vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
mkdir -p /etc/systemd/system/docker.service.d
usermod -aG docker estar
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
systemctl status docker
systemctl restart containerd.service
systemctl status containerd.service
reboot
# docker version
# docker info
Cgroup Driver: systemd --> 확인
쿠버네티스 구성을 위한 도커 설치까지의 과정입니다.
이후 쿠버네티스 구성 과정을 포스팅하겠습니다.
'DevOps' 카테고리의 다른 글
[ubuntu] CNI(Container Network Interface) Plugin 구성 (0) | 2024.08.09 |
---|---|
[Ubuntu]Kubernetes 구성 (0) | 2024.08.09 |
cAdvisor: Docker 컨테이너 모니터링의 강력한 도구 (0) | 2024.06.26 |
Portainer: Docker 관리의 간편한 솔루션 (0) | 2024.06.25 |
GitHub Actions: 소개 및 가이드 (0) | 2024.05.25 |