Kubeadm으로 K8S 구성

empty·2020년 9월 10일
4

Kubernetes

목록 보기
1/7
post-thumbnail

Kubeadm?

K8S에서 공식적으로 제공해주는 도구이다.
클러스터를 빨리 구축하기 위한 다양한 기능을 제공한다.

  • 구성환경: Vagrant로 CentOS 이미지 사용
NodeOSCPUMemoryIP Address
MasterCentos4 Core4096MB192.168.56.11
Node1Centos2 Core2048MB192.168.56.101
Node2Centos2 Core2048MB192.168.56.102
Node3Centos2 Core2048MB192.168.56.103

*쿠버네티스 공식 Docs를 보고 설치를 하였다.

네트워크 어댑터가 두 개 이상 (Public, Private)사용을 권장한다.

포트 개방

Master Node

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

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/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

2. SELinux 해제

컨테이너가 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. 컨테이너 런타임(도커) 설치

  • 쉘로 자동으로 설치해 주는 명령어
    curl -fsSL https://get.docker.com/ | sudo sh

  • docker 서비스 시작
    sudo systemctl start docker.service docker.socket
    sudo systemctl enable docker.service docker.socket

5. 저장소(repo) 업데이트

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=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
exclude=kubelet kubeadm kubectl
EOF

6. Kubeadm, Kubelet, Kubectl 설치

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
  • Kubeadm : 클러스터를 Bootstrap 해주는 명령.
  • Kubelet : 클러스터의 모든 머신에서 실행되고 Pod 및 Container 시작과 같은 작업을 수행하는 구성 요소.
  • kubectl: 클러스터와 통신하기위한 Command Line 유틸리티.

Master Node -클러스터 구성

1. Cluster 설치

sudo kubeadm init --apiserver-advertise-address=192.168.56.11

!! 해당 명령어가 완료되면 kubeadm join 명령어가 출력되는데 이 명령어는 Worker Node를 클러스터에 연결할 때 사용되므로 기록해두거나 복사해놓자.

  • --apiserver-advertise-address 옵션은 마스터 노드의 API Server 주소를 설정할 때 사용하는 옵션이다. 워커노드들은 이 API 주소로 Master Node와 통신을 한다.

만약 Master Node를 다중으로 구성하였다면 --control-plane-endpoint 옵션을 사용하여 엔드 포인트를 설정할 수 있다. 하지만 지금 구성 환경은 단일 Master 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
  • kubectl 명령을 사용하기 위함.

추가로 kube 환경설정 파일을 환경변수로 지정할 수 있다.
export KUBECONFIG=/etc/kubernetes/admin.conf

3. 네트워크 (애드온) 플러그인 설치 (Callico)

  1. 설치
    curl https://docs.projectcalico.org/manifests/calico.yaml -O
    kubectl apply -f calico.yaml

Worker Node - Cluster 연결

1. Master Node에 연결

kubeadm join 192.168.56.11:6443 --token o0zezq.d3a298ky1xqdyz15 \
    --discovery-token-ca-cert-hash sha256:81089ceaa64bdda339043ee5321667ddb5c948e5c4f42dcbde3c33fbdcbc98c1
  • Master Node에서 kubeadm join 명령어를 그대로 복사 붙여넣기 해주면 알아서 연결이 된다. (user일 경우 sudo 붙여야 함)

Reference

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises

2개의 댓글

comment-user-thumbnail
2021년 9월 14일

좋은 글 포스팅해주셔서 감사합니다.
지금 운영 중인 여러 서버를 묶는 kubernetes cluster를 구성하려고 하는데, 지금 worker node가 port forwarding을 통해 특정 port만 사용가능한 경우에는 어떤 방식으로 접근하면 좋을까요?

1개의 답글

관련 채용 정보