쿠버네티스 설치 방법 – VM 환경 튜토리얼
쿠버네티스(Kubernetes)는 현대 애플리케이션 배포와 관리에 있어 필수적인 도구로 자리 잡았습니다. 특히, 클라우드 네이티브 환경에서 컨테이너화된 애플리케이션을 운영하기 위해서는 쿠버네티스의 중요성이 더욱 부각됩니다. 이 튜토리얼에서는 가상 머신(VM) 환경에서 쿠버네티스를 설치하는 방법을 단계별로 안내합니다. 간단한 소개와 함께 시작하여, 실제 설치 과정까지 자세히 설명함으로써 초보자도 쉽게 따라할 수 있도록 돕겠습니다. 쿠버네티스 설치를 통해 인프라 관리의 효율성을 극대화하고, 확장 가능한 애플리케이션 운영 환경을 구축하는 데 필요한 모든 정보를 제공하고자 합니다. 해당 포스트는 쿠버네티스 설치 를 VM 환경에서 구성하는 방법을 가이드 합니다. 1개의 Master node와 3개의 Worker node로 클러스터를 구성했습니다.
목차
1. Kubernetes 클러스터란?
2. Kubernetes 클러스터 사전구성
2-1. 메모리 swap 기능 비활성화
2-2. 네트워크 옵션 설정
2-3. 방화벽 설정
2-4. 컨테이너 런타임 설치
3. 쿠버네티스 설치 하기
4. Kubernetes 클러스터 설정하기
4-1. master node 설정
4-2. worker node 설정
5. 결론
1. Kubernetes 클러스터란?
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션을 자동화하고 관리하기 위한 오픈소스 플랫폼입니다. 이를 통해 애플리케이션을 클러스터화하여 확장성, 고가용성 및 유연성을 제공하며, 컨테이너 관리 및 오케스트레이션을 간편하게 수행할 수 있습니다.
쿠버네티스 클러스터는 여러 개의 노드(Node)로 구성되어 있습니다. 각 노드는 애플리케이션을 실행하고 관리하는데 사용됩니다. 클러스터는 마스터(Master) 노드와 워커(Worker) 노드로 구성됩니다.
- 마스터 노드: 클러스터를 제어하고 관리하는 역할을 합니다. 이 노드에는 쿠버네티스 API 서버, 스케줄러, 컨트롤 매니저 등의 컴포넌트가 실행됩니다.
- 워커 노드: 애플리케이션 컨테이너가 실행되는 노드입니다. 워커 노드에는 컨테이너를 실행하는 데 필요한 Kubernetes 에이전트 및 관련 도구가 설치되어 있습니다.
쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 효율적으로 배포, 확장 및 관리할 수 있는 강력한 플랫폼으로 작동합니다.
2. Kubernetes 클러스터 사전구성
쿠버네티스 설치 및 구성에 앞서 사전에 준비가 필요합니다. 클러스터를 구성할 master node와 worker node 전부 설정을 진행합니다. 이 포스트에서는 모든 설치 과정을 root 계정에서 진행했습니다.
2-1. 메모리 swap 기능 비활성화
Kubernetes의 안정적인 작동을 위해서 메모리 swap 기능을 비활성화합니다.
# swapoff -a
# sed -i '/swap/s/^/#/' /etc/fstab
명령어를 입력하여 비활성화를 확인합니다. 아무것도 출력되지 않으면 비활성화가 완료된 것입니다.
# swapon -s
2-2. 네트워크 옵션 설정
Kubernetes 클러스터 구성을 위해 모듈을 로드하고, 네트워크를 설정하는 파일을 생성합니다.
# cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
# cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
명령어를 통해 변경한 설정을 적용합니다.
# sysctl --system
2-3. 방화벽 설정
방화벽이 활성화된 환경에서 Kubernetes 환경을 구축할 경우, 특정 포트의 개방이 필요합니다.
master node(Control plane)
| 프로토콜 | 방향 | 포트 범위 | 용도 | 사용 주체 |
| TCP | Inbound | 6443 | 쿠버네티스 API 서버 | 전부 |
| TCP | Inbound | 2379-2380 | etcd 서버 클라이언트 API | kube-apiserver, etcd |
| TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
| TCP | Inbound | 10259 | kube-scheduler | Self |
| TCP | Inbound | 10257 | kube-controller-manager | Self |
worker node
| 프로토콜 | 방향 | 포트 범위 | 용도 | 사용 주체 |
| TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
| TCP | Inbound | 30000-32767 | NodePort Services† | 전부 |
명령어를 통해 포트들을 개방합니다.
# firewall-cmd --permanent --add-port=6443/tcp
...
포트 개방을 완료한 후 방화벽 설정을 적용합니다.
# firewall-cmd --reload
2-4. 컨테이너 런타임 설치
Kubernetes는 컨테이너들을 통합 관리하는 오케스트레이션 플랫폼이기 때문에 컨테이너의 실행, 관리 등의 역할을 수행하는 컨테이너 런타임의 설치를 필요로 합니다. 이 포스트에서는 Docker를 설치 후 Containerd 패키지를 사용하는 방법을 사용합니다.
Docker 설치를 위해 apt 업데이트 및 필수 패키지 설치를 진행합니다.
# apt-get update
# apt-get install -y apt-transport-https ca-certificates curl gnupg
Docker의 공개 키를 다운로드하고, 저장소를 등록합니다.
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | 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" | tee /etc/apt/sources.list.d/docker.list > /dev/null
저장소를 업데이트하고, Docker 설치를 진행합니다,
# apt update
# apt install -y docker.io
Docker 데몬의 구성 파일을 설정합니다.
# cat <<EOF | tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
cgroup(runc) 옵션 설정을 위해 containerd 구성 파일을 생성합니다.
# mkdir -p /etc/containerd
# containerd config default | tee /etc/containerd/config.toml
생성한 파일을 수정합니다.
vi /etc/containerd/config.toml
# 파일의 해당 옵션을 true로 수정
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
수정 사항을 적용합니다.
# systemctl restart containerd
3. 쿠버네티스 설치 하기
쿠버네티스 설치 및 클러스터 구성을 위해 kubelet, kubeadm, kubectl을 설치합니다.
클러스터를 구성할 master node와 worker node 전부 설치를 진행합니다.
저장소를 업데이트하고, 필수 패키지를 설치합니다.
# apt-get update
# apt-get install -y apt-transport-https ca-certificates curl gnupg
공개 키를 다운로드하고, 저장소를 추가합니다.
# curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | 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.28/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
해당 내용에 변화가 있을 수 있으므로 공식 문서를 참고하세요.
저장소를 업데이트하고 kubelet, kubeadm, kubectl 설치를 진행합니다.
master node는 모든 패키지를 필수적으로 설치해야 하지만, worker node의 경우 kubelet과 kubeadm 2개의 패키지만 필수적으로 요구합니다.
# apt-get update
# apt-get install -y kubelet kubeadm kubectl
설치한 패키지의 버전을 고정합니다.
# apt-mark hold kubelet kubeadm kubectl
4. 쿠버네티스 설치 – 클러스터 설정하기
설치가 완료된 이후, 클러스터 구성을 위해서 master node와 worker node의 개별적인 설정이 필요합니다.
4-1. 쿠버네티스 설치 – master node 설정
명령어를 통해 Kubernetes 클러스터를 초기화하고, master node를 설정합니다.
# kubeadm init --pod-network-cidr=10.244.0.0/16
설정이 끝나고 worker node를 클러스터에 등록하기 위한 join 명령어가 출력됩니다.
kubeadm join 192.168.***.***:6443 --token ******.5vfxtbd99w84usur \
--discovery-token-ca-cert-hash sha256:338d571521069b7ecd6358cae93c6c6658******************************
root가 아닌 사용자가 kubectl 명령어를 사용할 수 있도록 설정하기 위해
kubectl 명령어를 사용할 사용자 계정에서 다음 명령어를 실행합니다.
$ mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
컨테이너 간의 네트워크를 제어하기 위한 CNI(Container Network Interface)를 설정합니다.
이 포스트에서는 Flannel을 사용했습니다.
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4-2. 쿠버네티스 설치 – worker node 설정
master node에서 kudeadm init 명령어를 통해 생성한 join 명령어를 통해 클러스터에 worker node를 등록합니다.
# kubeadm join 192.168.***.***:6443 --token ******.5vfxtbd99w84usur \
--discovery-token-ca-cert-hash sha256:338d571521069b7ecd6358cae93c6c6658******************************
master node에서 등록된 worker node를 확인합니다.
# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane 3d1h v1.28.8
worker1 Ready <none> 3d1h v1.28.8
worker2 Ready <none> 3d1h v1.28.8
worker3 Ready <none> 3d v1.28.8
5. 결론
이번 튜토리얼에서는 가상 머신 환경에서 쿠버네티스를 설치하는 과정을 단계별로 살펴보았습니다. 쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장, 관리에 있어 강력한 도구로, 이를 통해 인프라 관리의 복잡성을 크게 줄일 수 있습니다.
쿠버네티스를 성공적으로 설치하고 기본 설정을 완료했다면, 이제 더 다양한 기능들을 탐색해 보세요. 예를 들어, 클러스터 오토스케일링, 네트워크 정책 설정, 모니터링 및 로깅 도구 통합 등을 시도해 볼 수 있습니다. 또한, 지속적인 학습과 실습을 통해 쿠버네티스의 잠재력을 최대한 활용해 보세요.
쿠버네티스 설치와 기본 설정 과정을 성공적으로 마친 여러분은 이제 컨테이너화된 애플리케이션의 효율적인 관리와 운영을 위한 첫걸음을 내디뎠습니다. 앞으로도 이 강력한 도구를 통해 다양한 프로젝트에서 성공을 거두시길 바랍니다.
쿠버네티스 구축과 쿠버네티스 인그레스 컨트롤러 대한 컨설팅 및 기술지원을 원하시면 아래 양식을 통해 문의해주세요.
댓글을 달려면 로그인해야 합니다.