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개의 답글