Containerd를 활용한 k8s 클러스터 구축

소시민A·2022년 5월 31일
0

참고문서

https://kubernetes.io/ko/docs/setup/

공식 문서에 한글 버젼으로도 잘 설명되있다.

사전구성

NodeOSCPUMemoryIP Address
MasterCentos4 Core4096MB192.168.56.11
Node1Centos2 Core2048MB192.168.56.101
Node2Centos2 Core2048MB192.168.56.102

Proxmox를 VM 환경으로 사용해 구성하였습니다.

개념정리

  1. Masternode
  • 전체 쿠버네티스 시스템 관리 통제하는 컨트롤 플레인을 관장
  1. Workernode
  • 실제 배포 어플리케이션을 담당
  1. 컨테이너런타임
  • 컨테이너들이 실행되어질 수 있는 발판을 마련해주는 소프트웨어
  • containerd (이 부분 사용)
    CRI-O
    도커 엔진
    미란티스 컨테이너 런타임
  1. containerd
  • 쿠버네티스 전용 컨테이너 런타임
  • runc를 효과적으로 관리
  1. runC
  • OCI를 준수하며 컨테이너를 실행하는 container runtime 툴
  • containerd 밑에서 작동
  1. cgroup
  • Linux에서 프로세스에 할당된 리소스를 제어
  1. systemd
  • Unix 시스템이 부팅후에 가장 먼저 생성된 후에 다른 프로세스를 실행하는 init 역할을 대체하는 데몬
  1. kubeadm
  • 클러스터를 bootstrap
  1. kubelet
  • 클러스터의 모든 머신에서 실행되고, pod 및 container 시작과 같은 작업을 담당
  1. Kubectl
  • 클러스터와 통신하기 위한 command line utility

사전준비

Master node firewalld 해제

sudo firewall-cmd --add-port 6443/tcp --permanent
sudo firewall-cmd --add-port 2379-2380/tcp --permanent
sudo firewall-cmd --add-port 10250-10252/tcp --permanent
sudo firewall-cmd --reload

Worker node firewalld 해제

sudo firewall-cmd --add-port 10250/tcp --permanent
sudo firewall-cmd --add-port 30000-32767/tcp --permanent
sudo firewall-cmd --reload

공통사항

  • 공통사항은 모든 노드 즉, Master, Worker Node 둘다 공통적으로 진행해야 할 사항을 적어놓았다.

1. IPtables 설정

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
EOF
sudo sysctl --system

2. SE Linux 해제

  • 컨테이너가 Pod 네트워크의 host filesystem 액세스 할 수 있도록 하기위해 SELinux 해제를 한다.
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

3. Swap off

쿠버네티스에서 Swap Memory 사용 시 속도가 저하된다. 따라서 스왑을 꺼주자.

sudo swapoff -a
sudo sed -i

4. 컨테이너 런타임 설치

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*
sudo yum install -y yum-utils
sudo yum-config-manager \
   --add-repo \
   https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install containerd.io
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 필요한 sysctl 파라미터를 설정하면 재부팅 후에도 유지된다.
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

# 재부팅하지 않고 sysctl 파라미터 적용
sudo sysctl --system

5. 저장소 업데이트

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

6. kubeadm, kubelet, kubectl 설치 (1.22.1 버젼)

kubesphere를 같이 사용하기 위해서 지원 latest 버젼인 1.22.1을 설치했다.

yum install -y kubelet-1.22.1 kubectl-1.22.1 kubeadm-1.22.1

7. kubeadm cluster 설치

cluster 관리를 위한 kubeadm initialize 및 kubectl 사용을 위한 config

kubeadm init
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

이 과정까지 완료되면 마스터노드가 컨트롤플레인으로 설정된다.

profile
계속해서 Blue를 이겨내가는 사람 / System Engineer / Server, OS, Storage, Network, Cloud / 이제 다시 코딩으로!!

0개의 댓글