(해당 내용은 NCP classic 환경 관련입니다)

 

새로운 서비스에 쿠버네티스를 도입하기 위해 스터디중 

 

쿠버네티스 최초 설치 및 환경설정 (마스터-워커노드 연결)을 진행한다.

(개발 환경은 naver cloud platform에서 진행하고 마스터노드1, 워커노드2개, VPC가 아닌 Classic 환경으로 구성함)

 

앞으로 이런식으로 구성해 볼 예정인데,

이번에는 ingress 여러개 구성은 나중에 하고 먼저 dev-ingress와 dev-api-service 연결까지 해볼 것임

 


1. 인스턴스 생성

서버 3개를 생성한다. (마스터노드1, 워커노드2 전용)

마스터노드는 최소한 2vCPU, 2GB Mem 스펙으로 만들어야 한다.

ACG 설정은 마스터노드는 워커노드 2개에 대해서 1-65535 (모든 포트 허용) 으로 설정하고 

워커노드에서는 마스터노드에 대해서 1-65535 포트 허용으로 설정한다.

 

 

Subnet을 구성해 같은 Subnet 안에 서버를 구성하면 ACG를 굳이 설정해 줄 필요가 없습니다!

아래 내용을 확인해주세요.

[kubernetes, ncp] 쿠버네티스 파드간 통신을 위한 Subnet 구성 - (4) :: . . . (tistory.com)

 

[kubernetes, ncp] 쿠버네티스 파드간 통신을 위한 Subnet 구성 - (4)

(해당 내용은 NCP classic 환경 관련입니다) ArogCD를 설치하고 테스트를 진행하던 도중 파드간 통신이 되지 않는 현상을 확인했다. (dial tcp i/o timeout... 과 비슷한 에러가 출력된 것으로 기억함) 관련

yong0810.tistory.com

 

2. 서버 설정

서버 내에서 쿠버네티스 사용을 위한 기본 설정을 진행한다.

 

(1) hosts 파일 수정

마스터 노드에서만 설정을 진행했음 (워커 노드는 설정하지 않았는데 kubectl init 시 오류가 발생해도 정상 구동됨)

cat << EOF >> /etc/hosts
<마스터노드 IP> k8s-master01
<워커노드1 IP> k8s-worker01
<워커노드2 IP> k8s-worker02
EOF

 

(2) 방화벽 설정

쿠버네티스 컴포넌트의 상호 통신을 위해 허용

sudo systemctl stop firewalld
sudo systemctl disable firewalld --now

(3) 서버 스왑 메모리 비활성화

kubelet 동작을 위해 swap 비활성화 (재부팅 후에도 적용되도록 수정)

sudo swapoff -a
sudo sed -i 's/^\(.*swap.*\)$/#\1/' /etc/fstab

 

(4) SELinux 비활성화

컨테이너가 호스트 파일시스템에 접근할 수 있도록 허용하는데 필요 (마찬가지로 재부팅 후에도 적용되도록 수정)

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sestatus

 

 

3. 컨테이너 런타임 설치

파드 구동을 위한 컨테이너 런타임을 설치한다.

(쿠버네티스 1.24 버전부터 Docker에 대한 지원을 중단하여 Containerd를 사용함)

 

(1) 구성

iptables가 브리지된 트래픽을 보게 하기 위한 br_netfilter 모듈 로드

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

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

sudo sysctl --system

 

(2) CentOS용 Containerd 설치

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install -y containerd.io

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

sudo systemctl start containerd
sudo systemctl enable containerd --now

 

 

4. 관련 패키지 설치

kubeadm: 클러스터를 부트스트랩하는 명령

kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트

kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티

 

(1) yum repository 생성

k8s 사이트의 가이드와 다르게 CentOS7에서는 signature could not .. 오류가 발생해서 gpgcheck, repo_gpgcheck 값을 0으로 수정한다.

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

 

(2) 설치

VERSION=1.24.1
sudo yum install -y kubelet-$VERSION kubeadm-$VERSION kubectl-$VERSION --disableexcludes=kubernetes

 

(3) kubelet 서비스 등록

sudo systemctl enable kubelet --now

 

 

5-1. (마스터 노드에서만 적용)  쿠버네티스 클러스터 생성 및 구성

(1) initialize

sudo kubeadm init --apiserver-advertise-address=<마스터노드IP>

해당 명령어 실행이 완료되면 kubeadm join ... 으로 명령어가 출력되는데,

이 명령어는 나중에 Worker node를 연결할 때 사용되므로 따로 복사해놓는다.

 

(2) 환경설정

클러스터를 사용하기 위해 설정

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

 

(3) 네트워크 플러그인 설치 (Calico)

파드가 서로 통신하기 위해 네트워크 플러그인을 노드에 설치한다

sudo curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O

kubectl apply -f calico.yaml

kubectl get pods -n=kube-system

 

 

5-2. (워커 노드에서만 적용) 클러스터 join

아까 위에서 마스터노드를 구동하고 출력되었던 join 명령어를 실행한다.

 

 

6. 연결 확인

kubectl get node

 

끝!

 

 

이어서 namespace, deployment, service을 생성하고 적용하는 부분까지 진행

[kubernetes, ncp] 쿠버네티스 namespace, deployment, service 설정 (2) :: . . . (tistory.com)

 

[kubernetes, ncp] 쿠버네티스 namespace, deployment, service 설정 (2)

[kubernetes, ncp] 쿠버네티스 최초 설치 및 기본 설정 (1) :: . . . (tistory.com) [kubernetes, ncp] 쿠버네티스 최초 설치 및 기본 설정 (1) 새로운 서비스에 쿠버네티스를 도입하기 위해 스터디중 쿠버네티스..

yong0810.tistory.com

 

+ Recent posts