쿠버네티스 설치

yoongyum·2022년 4월 20일
0
post-thumbnail

쿠버네티스 클러스터 설치 방법은 굉장히 많습니다. 클라우드 플랫폼별(EKS, GKE, AKS), 운영체제 환경별 다양한 방법들이 있습니다.

저는 K3s를 사용해서 클러스터를 구축하도록 하겠습니다.

공식 사이트 : https://k3s.io/


🔎k3s란?

k3s는 IoT 및 edge computing 디바이스 위에서도 동작할 수 있도록 만들어진 경량화된 쿠버네티스 입니다. 외부 클라우드 서비스와 연동 기능을 최소한도로 줄이고, 고가용성 배포를 위해 기본으로 사용되던 etcd 의존성을 없애고 sqlite를 기본값으로 사용합니다.

👍🏼장점

  • 쉬운 설치

  • 가벼움

  • 대부분의 기능 보유


🔱클러스터 구성

위 그림에서 K3s Server는 k8s에서 master, Agent를 워커노드라고 생각하시면 됩니다.

저의 구성에서는 하나의 마스터노드와 하나의 워커노드를 연결하여 구축할 계획입니다.


👑마스터 노드

마스터 노드에는 열려있어야 하는 포트가 있습니다.

프로토콜포트 범위목적
TCP6443API서버
TCP2379-2380etcd 서버 client API
TCP10250kublet API
TCP10251kube-scheduler
TCP10252kube-controller-manager
TCP30000-32767nodePort services

마스터로 사용 할 서버에서 다음 명령을 실행 합니다.

$ sudo apt update
$ sudo apt install -y docker.io nfs-common dnsutils curl

#k3s 설치
$ curl -sfL http://get.k3s.io | INSTALL_K3S_EXEC="\
	--disable traefik \
    --disable metrics-server \
    --node-name master --docker" \
    INSTALL_K3S_VERSION="v1.18.6+k3s1" sh -s -

설치가 되면 master통신 설정을 해줘야 합니다.

$ mkdir ~/.kube
$ sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
$ sudo chown -R $(id -u):$(id -g) ~/.kube
$ echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc
$ source ~/.bashrc



쿠버네티스 명령어 포맷

kubectl [COMMAND] [TYPE] [NAME] [FLAGS]
  • COMMAND : create, get, describe 등 operation 종류
  • TYPE : pods, nodes 등
  • NAME : 특정 리소스의 이름 선언
  • FLAGS : 추가적인 옵션 선언

참고링크 : https://kubernetes.io/docs/reference/kubectl/#operations


설치확인 명령어입니다.

$ kubectl cluster-info

$ kubectl get node -o wide	#클러스터에 존재하는 노드들을 보여줍니다.

master 노드 하나가 보이고 STATUS가 READY이면 마스터 노드가 정상 설치가 되었다고 보시면 됩니다.

-o 는 출력옵션(Output option)입니다.

kubectl [command] [TYPE] [NAME] -o <output_format>

참고링크 : https://kubernetes.io/docs/reference/kubectl/#output-options




💰토큰 , IP 확인

클러스터에 워커노드를 추가하기 위해서는 워커노드가 마스터노드의 NODE_TOKEN 과 MASTER_IP를 알아야 합니다.

마스터 토큰 확인

$ NODE_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token)

$ echo $NODE_TOKEN

마스터 IP 확인

$ MASTER_IP=$(kubectl get node master -o jsonpath="{.status.addresses[0].address}")

$ echo $MASTER_IP

토큰과 아이피를 적어둡니다.



👷‍♂️ 워커노드

마스터 서버 말고 워커 노드 서버를 켜서 터미널에 들어갑니다.

워커 노드도 마찬가지로 열려있어야 할 포트가 있습니다.

프로토콜포트 범위목적
TCP10250kublet API
TCP30000-32767nodePort services
$ NODE_TOKEN=<마스터 토큰>
$ MASTER_IP=<마스터 아이피>

$ sudo apt update
$ sudo apt install -y docker.io nfs-common curl

#k3s 워커 설치
$ curl -sfL https://get.k3s.io | K3S_URL=https://$MASTER_IP:6443 \
K3S_TOKEN=$NODE_TOKEN \
INSTALL_K3S_EXEC="--node-name worker1 --docker" \
INSTALL_K3S_VERSION="v1.18.6+k3s1" sh -s -

성공적으로 설치가 되었다면 마스터서버로 가서 워커노드가 들어왔는지 확인합니다.

worker1에도 Ready상태로 추가가 되어있네요. 그렇다면 제대로 설치가 된것입니다.




쿠버네티스 클러스터 구축이 완료되었습니다.

다음 포스트부터는 클러스터 제어하는 명령을 알아보겠습니다.


사실 클러스터 구축과정에서 실패를 엄청나게 맛봤습니다.
정말 힘들었어요 ㅠ 시작도 하기 전에 삽질할 줄은…

1개의 댓글

comment-user-thumbnail
2022년 9월 17일

안녕하세요! 질문이 있어서 댓글 남깁니다. master 서버와 workernode에 k3s를 설치하고 cluster구성하기 위해서 게시글을 참고했습니다.
비슷하게 한 것 같은데 kubectl get node했을 때 master server의 정보만이 뜹니다. k3s-agent의 service도 active인데요.
이때까지 계속 막혔던 부분이 master 서버에는 k3s를 설치했지만 agent 에 설치하고 systemctl status k3s-agent 했을 때 active가 아닌 loaded여서 cluster 구성이 안 되었습니다.
하지만 이번에는 active가 되어서 성공한 줄 알고 kubectl get node를 해보았지만 워커노드의 정보가 뜨지 않아서 cluster 구성이 완료되지 않았습니다.
다만 다른 점이 yoongyum님께서는 master와 workernode에 따로따로 설치하고 cluster구성은 워커노드에서 하셨다는 점인데요,
저는 제 장비 자체가 master이자 워커노드의 역할도 동시에 가능하기 때문에 master와 워커노드 각각 설치를 하지 않고 노드장비에서 설치진행하였습니다. 이 차이점 때문에 cluster 구성이 완료되지 않았을까요? 혹시 아신다면 댓글 달아주시면 감사하겠습니다. ㅠㅠㅠ 1주일 넘게 동안 설치가 안 돼서 진행이 안 되네요 ㅠㅠ
참고로 제가 사용 중인 장비는 xavier2입니다.

답글 달기