목표
구글에서 제공하는 GKE를 활용하는 것이 아니라,
GCP의 Compute Engine을 통해서 VM을 생성한 뒤 Master Node, Worker Node를 직접 생성한 뒤,
Docker Engine 설치 및 Kubeadm을 통해 Kubernetes Cluster를 직접 구현해보겠습니다.
이전편 보기
이번편 주요내용
- 도커 런타임 설치
- 도커 cgroup driver 설정
- 방화벽 및 네트워크 설정
작업준비
앞편에서 작업했던 VM 4개(master 1, worker3)에 대해 모두 앞편의 설정했던 대로 SSH 로 로그인 합니다.
본인은 작업하기 편하게 아래와 같이 터미널 창을 띄어 놓고 했습니다.
반복되는 명령어가 많아서 창을 동시에 띄어놓고 복붙으로 하는게 개인적으로 편리하더라고요.
root 계정으로 로그인
모두 root 계정으로 진행할 예정이니 root 계정으로 로그인하도록 합니다.
su -
사전준비
(중요) 아래 작업은 VM 4개 모두 공통으로 각각 진행해줍니다.
본격적인 도커 런타임 및 쿠버네티스를 설치하기 전에 사전 작업을 진행합니다.
패키지 업데이트
apt update -y && apt upgrade -y
VM에 설치되어 있는 우분투 패키지에 대해서 업데이트 및 업그레이드를 진행해줍니다.
SWAP 메모리 해제
추후 각 노드에서 kubelet이라는 컴포넌트가 제대로 동작하기 위해서는 리눅스의 SWAP 메모리 기능을 해제해줘야 합니다.
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
swapoff -a
(복붙해서 각각 입력해주면 됩니다)
도커 설치하기 (23.01 수정)
(중요) 아래 작업은 VM 4개 모두 공통으로 각각 진행해줍니다.
쿠버네티스가 동작하기 위해서는 컨테이너 런타임이 필요합니다.
container.d, cri-o 등이 있지만 .. container.d를 설치하겠습니다.
- https://docs.docker.com/engine/install/ubuntu/ 를 참조하였습니다.
- 아래 명령을 복사해서 터미널에 붙여넣기 하시면 됩니다.
- 이미 root 계정으로 로그인 했지만, 편의상 명령어 앞에 sudo를 그대로 두겠습니다.
1. 도커 설치에 필요한 패키지 다운로드
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- HTTPS를 통해 도커 Repository에 접근할 것이므로, 접근에 필요한 패키지들을 다운로드 받습니다
2. 도커 공식 GPG key 등록
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
3. 도커 Repository 설정
echo \
"deb [arch=$(dpkg --print-architecture) 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
4. 도커 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
5. 도커 cgroup driver 설정
도커가 설치 완료되었으면, 이제 도커가 사용하는 드라이버를 (쿠버네티스가 권장하는) systemd로 설정해줄 차례입니다.
(자세한 내용은 아래 링크를 참고하시면 됩니다.)
- https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/
- 어려울 건 없습니다..! 그대로 복붙하시면 됩니다.
sudo mkdir /etc/docker
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
6. 도커 재시작 및 부팅시 시작 설정
도커에 대한 설정이 완료되었으니, 재시작 및 부팅 시 자동으로 실행되도록 설정하겠습니다.
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
7. Container.d 런타임에 대해서 CRI 비활성화 해제 ('23.01 추가)
오랜만에 재설치를 해보려고 하니 k8s 버전도 올라가면서 수정된 사항이 있어서 추가 기술합니다.
위에서 Docker 를 설치하고 실질적으로 container.d 를 런타임으로 사용하는데, 기본적으로 CRI가 비활성화 되어 있습니다.
k8s에서 CRI를 사용할 수 있게 아래와 같은 처리가 필요합니다. (Master, Worker Node 모두)
편집기를 통해 아래 파일을 열어줍니다.
vi /etc/containerd/config.toml
그리고 중간에 disable_plugins.. 된 부분을 주석 처리 해줍니다.
그리고 containerd 를 재시작해줍니다.
systemctl restart containerd
여기까지 컨테이너 런타임인 도커(container.d)에 대한 설치가 완료되었습니다.
방화벽 및 네트워크 환경설정
(중요) 아래 작업은 VM 4개 모두 공통으로 각각 진행해줍니다.
추후 쿠버네티스 환경에서 서로 노드간의 CNI를 통해서 통신을 하게 될 예정인데,
그 전에 필요한 네트워크 및 방화벽 환경 설정을 진행합니다.
modprobe overlay
modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
- 그대로 복붙해주면 됩니다.
- 자세한 내용은 아래 링크를 참조하시면 됩니다.
- https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#network-plugin-requirements
마무리
이제 kubeadm을 통해 본격적으로 kubernetes를 설치해보겠습니다.
'Cloud > kubernetes (k8s)' 카테고리의 다른 글
IT서적후기 :: 쿠버네티스 오퍼레이터 (8) | 2024.09.04 |
---|---|
쿠버네티스 :: GCP(VM)에 kubernetes Cluster 직접 구축하기 - 3 (23.01 수정) (3) | 2022.03.12 |
쿠버네티스 :: GCP(VM)에 kubernetes Cluster 직접 구축하기 - 1 (1) | 2022.03.12 |