관리 메뉴

IT창고

쿠버네티스(kubernetes) 설치하기 (CentOS 7) 본문

서버운영/Virtualization

쿠버네티스(kubernetes) 설치하기 (CentOS 7)

방구석여포 2019. 8. 8. 00:41

쿠버네티스에 대해 알아보겠습니다.

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼으로 구글에서 Brog 프로젝트로 시작하여 현재 쿠버네티스가 되었습니다. 

클라우드와 도커를 사용하게 되면 거의 대부분 쿠버네티스를 사용할텐데 쿠버네티스의 장점으로 자동복구 기능과 동시 배포 등이 있습니다.

 

설치할 테스트 환경은 VMware에 리눅스(CentOS 7) 2대로 테스트를 진행하도록 하겠습니다.

서버 최소 사항으로 2GB 이상의 RAM과 CPU2개 입니다.

 

테스트 서버인 CentOS 7설치 시 가상머신 설정에서 위와 같이 가상화 부분에 체크해주도록 합니다.

또한 나머진 CPU와 RAM은 위와 같은 설정으로 설치하여 테스트를 진행합니다.

CentOS 7을 설치할때 몇 가지 주의사항으로 MAC주소 및 uuid가 고유의 값을 가져야 하며 2대의 리눅스 서버는 같은 네트워크에 존재해야 하며 마지막으로 호스트이름이 겹치면 안됩니다.

일반적으로 설치를 진행하게 되면 문제없이 테스트 환경 구성이 가능합니다. 또한 모든 작업은 root 계정으로 진행합니다.

 

hostname 확인방법 : hostname 

product_uuid 확인방법 : cat /sys/class/dmi/id/product_uuid

MAC 주소 확인방법 : ifconfig -a , ip addr

 

위와 같은 방법으로 확인해볼 수 있습니다.  설치 전 겹치는 부분이 있는지 확인해봅니다. 

겹치는 부분이 없는걸 확인했다면 스왑 기능과 SELinux을 꺼두어야 하고 원활한 테스트를 위해 friewalld 데몬도 비활성화 해두도록 하겠습니다. (SELinux off방법은 따로 설명하지 않겠습니다.)

ex) SELinux disabled : vi /etc/sysconfig/selinux 파일 수정(diabled로 수정)

스왑오프하는 방법은 swapoff -a 명령어를 입력하고 /etc/fstab 파일에 위와 같이 맨 아래에 있는 /dev/mapper/cent .... 부분을 #으로 주석처리 합니다. 추가로 firewalld 데몬을 비활성화는 systemctl stop firewalld 후 systemctl disable firewalld 명령어를 입력해 줍니다. ( firewalld데몬 OFF  -> systemctl stop firewalld && systemctl disable firewalld  )

 

iptable설정을 하도록 하겠습니다.

CentOS 7사용자 중 일부 iptables가 우회되어 트래픽이 잘못 라우딩되는 경우가 있어 따로 설정해줘야 합니다.

/etc/sysctl.d/k8s.conf 파일에 아래의 내용을 추가해줍니다.

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

 

/etc/sysctl.d/k8s.conf 파일은 존재하지 않으므로 새로 추가해서 위의 내용을 추가합니다. sysctl --system명령어로 k8s.conf파일이 적용되어있는지 확인이 가능합니다.

 

마지막으로 /etc/hosts파일에 클러스터를 구성할 서버의 IP와 호스트이름을 작성합니다.

여기까지 설치 전 준비과정 입니다. 

 

이제 쿠버네티스 설치 전에 도커를 설치하도록 하겠습니다. 도커는 도커 외부저장소를 추가하여 yum으로 설치하도록 하겠습니다.

먼저 yum install -y yum-utils device-mapper-persistent-data lvm2 명령어를 입력하여 필요한 패키지를 설치하도록 합니다. 기본 패키지를 설치 후 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 명령어를 입력하면 외부 저장소가 등록됩니다.

yum install docker-ce 명령어를 사용하여 도커를 설치하도록 합니다. 설치 후 systemctl start docker && systemctl enable docker 명령어로 도커를 실행과 동시에 서비스 시작 등록을 하도록 합니다.

 

도커까지 설치되었으므로 쿠버네티스 설치를 진행하도록 하겠습니다.

vi /etc/yum.repos.d/kubernetes.repo 파일에 위와 같이 쿠버네티스 저장소 설정을 작성합니다.

yum외부저장소 파일을 작성 하였다면 yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes 명령어를 사용하여 쿠버네티스 패키지를 설치하도록 합니다. 설치가 끝났다면 systemctl enable --now kubelet 명령어로 서비스 등록을 하도록 합니다. 여기까지 진행되었다면 reboot명령어로 재부팅 한번 해줍니다.

 

쿠버네티스 패키지가 설치되었으므로 마스터 노드 설치를 진행하도록 하겠습니다.

마스터 노드를 설치할 서버는 hostname : master 서버입니다.

마스터 노드 초기화 전에 kubeadm config images pull 명령어를 입력하여 설치 시 사용할 이미지를 먼저 다운로드 합니다. 

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=100.100.100.160 명령어로 마스터 노드를 초기화 시킵니다.

--apiserver-advertise-address= 옵션에는 마스터 서버의 IP를 입력해줍니다. 

--pod-network-cidr=10.244.0.0/16 옵션의 경우 Pod 애드온 설치를 위한 옵션입니다. Fiannel을 사용하지 않는다면 이 옵션은 사용하지 않습니다.

초기화가 정상적으로 되었다면 성공 메세지를 확인해볼수있습니다. 그리고 아래에 join 토큰 값을 확인할수있습니다.

kubeadm token list 명령어로 쿠버네티스 토큰값을 확인할수있으며 kubeadm token create 명령어로 24시간동안 사용할수있는 새 토큰값을 생성할 수 있습니다. 

root계정으로 kubectl명령어를 사용하기 위해 export KUBECONFIG=/etc/kubernetes/admin.conf 명령어를 입력하여 환경변수 설정을 합니다.

 

여기서 root 사용자가 아닌 일반사용자 계정이 kubectl명령어를 사용하기 위해서는 아래와 같이 작업합니다. (kubernetes docs 참고)

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

위와 같이 kubectl명령어를 사용하여 Pod 애드온을 설치합니다.

쿠버네티스에서 Pod는 여러 노드에 걸쳐서 배포되는데 Pod는 서로 하나의 네트워크에 있는것처럼 통신이 가능합니다. 이러한 기능을 지원하는 CNI(Container Network Interface) 플러그인을 설치하도록 하겠습니다. 

마스터 노드에만 설치를 하며 응용 프로그램보다 우선적으로 설치되어야 합니다. 이번 테스트는 Flannel로 진행합니다.

Pod 네트워크 애드온 설치에 대해서 클릭을 누르면 자세히 알수있습니다. (클러스터 당 하나의 Pod 네트워크만 설치할수있습니다.)

 

kubectl get pods --all-namespaces 명령어로 마스터 노드가 제대로 설치되었는지 확인해볼수있습니다. 

kube-system   coredns-5c98db65d4-ndlr9         
kube-system   coredns-5c98db65d4-rm65l

위의 두개의 경우 Pending 상태로 시간이 조금 걸리므로 느긋하게 상태를 확인해보도록 합니다.

 

 

일반 노드를 설치해보도록 하겠습니다.

일반 노드를 설치할 서버는 hostname : node1 입니다.

마스터 노드를 초기화 할때 확인할수있었던 join token값이 있었습니다. 이걸 일반 노드에 입력하면 마스터 노드에 추가됩니다.

마스터 노드 서버에서 위와 같이 kubectl get nodes 명령어로 확인해보면 제대로 일반 노드가 클러스터에 참여되어있는지 확인해볼수있습니다.

join token값으로 다른 일반 노드들을 더 많이 클러스터에 참여시킬수있습니다.

 

마지막으로 마스터 노드 서버에서 kubectl cluster-info 명령어로 클러스터 정보를 확인해볼 수 있습니다. 

여기까지 쿠버네티스 설치과정 이였습니다.

'서버운영 > Virtualization' 카테고리의 다른 글

Docker SSL / TLS 적용  (0) 2021.02.01
Docker 설치 (CentOS)  (0) 2021.01.28
VMware ESXi 설치 및 활용  (0) 2019.05.06
OpenStack 설치  (0) 2019.02.24
docker 사용법2 및 활용  (0) 2019.02.17
Comments