(해당 내용은 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)
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] 쿠버네티스 ArgoCD 적용하기 - (5) (0) | 2022.07.14 |
---|---|
[kubernetes, ncp] 쿠버네티스 파드간 통신을 위한 Subnet 구성 - (4) (0) | 2022.07.13 |
[kubernetes, ncp] 쿠버네티스 nginx ingress controller 설정 및 배포 (3) (0) | 2022.06.29 |
[kubernetes, ncp] 쿠버네티스 namespace, deployment, service 설정 (2) (0) | 2022.06.28 |