쿠버네티스를 구축하는 방법은 다양하다.

가장 쉬운 방법은 AWS EKS(Elastic Kubernetes Service), GCP GKE(Google Kubernetes Engine), 국산을 좋아한다면 NCP의 Kubernetes Sercie를 이용하는 방법이 있다.

쿠버네티스에서 제공하는 Cloud volume 마운트 기능 등을 각 플랫폼에서 제공하는 방법으로 쉽게 쉽게 Mount를 할 수도 있고 레퍼런스도 많고 무수한 장점이 있겠지만 지속적으로 비용이 발생한다는 단 하나의 단점이 있다.

 

그래서 방구석에서 쿠버네티스 클러스터를 구축해보며 까먹지 않기 위해 기록한다.

 

OS

- Ubuntu 18.04.5 LTS

 

Container Runtime

- Docker

 

컨테이너는 CRI-O 등 대안이 존재하지만 워낙 레퍼런스 찾기가 힘들어 사실상의 표준이라 생각하는 도커를 사용했다.

 

클러스터 구축 툴

- kubeadm

 

오픈소스 프로젝트라 그런지 구축을 결심하자마자 선택지부터 발생했다.

쿠버네티스 클러스터 구축을 도와주는 toolkit으로는 kubeadm, kops, kubespray등의 도구가 있다.

kubeadm을 선택한 이유는 가장 레퍼런스가 많아서.. 이므로 각 툴의 원하는 기능이 있다면 다른 도구를 사용해 구축하는게 편할 것이다.

 

1. Update

$ apt update -y
$ apt upgrade -y

모든 노드의 패키지를 업데이트받는다.

 

2. Swap Memory off

$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
$ swapoff -a

쿠버네티스 환경에서는 Swap기능을 off하는게 권장된다.

관련 discussion이 있으니 나중에 확인.

 

3. Docker 설치

$ sudo apt-get update && sudo apt-get install -y
$ apt-transport-https ca-certificates curl software-properties-common gnupg2
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key --keyring /etc/apt/trusted.gpg.d/docker.gpg add -
$ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ apt update

여기까지 진행 한 후 만약 apt install -y containerd.io docker-ce 같은 명령어로 도커를 설치하지 말고 쿠버네티스 버전과 도커 버전을 잘 확인 후 진행하도록 하자..

해당 정보는 여기에서 확인 할 수 있다.

나의 쿠버네티스는 v1.20.2이며 도커는 19.03.12 버전을 설치했다.

$ apt-cache madison docker-ce

위 명령어로 버전을 확인 한 후

$ sudo apt-get install docker-ce=5:19.03.12~3-0~ubuntu-bionic docker-ce-cli=5:19.03.12~3-0~ubuntu-bionic containerd.io

명령으로 도커를 설치했다.

 

$ mkdir -p /etc/systemd/system/docker.service.d
$ tee /etc/docker/daemon.json < {\
"exec-opts": ["native.cgroupdriver=systemd"],\
"log-driver": "json-file",\
"log-opts": {\
"max-size": "100m"\
},\
"storage-driver": "overlay2"\
}
EOF

이후 directory와 configuration을 만들어주고 도커를 재시작한다.

 

$ systemctl daemon-reload
$ systemctl restart docker
$ systemctl enable docker

 

kubelet, kubeadm, kubectl을 설치한다.

$ apt-get update
$ apt-get install -y
$ apt-transport-https curl
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
$ echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
$ apt update
$ apt -y install vim git curl wget kubelet kubeadm kubectl
$ apt-mark hold kubelet kubeadm kubectl

 

방화벽 설정 (패킷 포워딩 활성화)

$ modprobe overlay
$ modprobe br_netfilter
$ tee /etc/sysctl.d/kubernetes.conf< net.bridge.bridge-nf-call-ip6tables = 1\
net.bridge.bridge-nf-call-iptables = 1\
net.ipv4.ip_forward = 1\
EOF
$ sysctl --system

 

Kubelet 시작, kubeadm 이미지 업데이트, kubeadm 으로 클러스터 시작

$ systemctl enable kubelet
$ kubeadm config images pull
$ kubeadm init --pod-network-cidr=10.244.0.0/16

클러스터의 pot network 옵션을 위와 같이 지정한건 이후 CNI로 flannel을 사용할 예정이기 때문이다.

flannel은 위와 같이 pod network 옵션을 주는 것을 권장하고 있다.

다른 CNI를 사용한다면 해당 CNI에서 권항하는 ip대역대가 있는지 한번 알아보면 좋을 것 같다.

calico에서는 pot-network 대역으로 192.168.0.0/16 를 권장한다.

 

kubeadm init을 한다면 

kubeadm join master:6443 --token ~~ \
--discovery-token-ca-cert-hash sha256:~~~

이러한 형태의 토큰을 확인 할 수 있는데, 다른 노드에서 해당 토큰으로 쿠버네티스 클러스터에 접근 할 수 있다.

만약 까먹거나 24시간이 지났다면

$ kubeadm token list
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

다시 확인 할 수 있다.

 

$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ chown $(id -u):$(id -g) $HOME/.kube/config

위 명령어 3종세트로 kubectl에 대한 권한을 해당 계정에 부여 할 수 있다.

 

coredns loop 해제

$ kubectl edit cm coredns -n kube-system

위 명령어로 실행하여 loop 옵션을 주석처리한다.

 

CNI설치

falnnel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 

calico

kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml

guide: https://docs.projectcalico.org/getting-started/kubernetes/quickstart

 

참고자료

www.liquidweb.com/kb/how-to-install-kubernetes-using-kubeadm-on-ubuntu-18/

728x90
반응형

'OS & Container > Kubernetes' 카테고리의 다른 글

[쿠버네티스] StatefulSet  (0) 2021.07.03
[쿠버네티스] Deployment  (0) 2021.07.02
[쿠버네티스] Service  (0) 2021.07.01
[쿠버네티스] Liveness Probe  (0) 2021.07.01

집에 간이로 구성한 서버용 Ubuntu 데스크탑에 GUI환경을 구성하기로 했다.

 

별 의미 없지만.. 원래 데스크탑으로 사용하던 PC여서 그런지 GUI환경을 구축해주고 싶었다.

 

GUI환경을 구축하려고 보니 키보드도, 마우스도 달려있지 않은 PC의 GUI를 활용할 방법이 없어 Windows PC에서 RDP로 접속할 수 있는 환경을 만들기로 하고, Ubuntu 18.04.5 버전을 구글링해가며 XRDP 설치 방법들을 찾던 도중 기막힌 웹사이트를 발견했다.

xRDP Installation Script (Free)

해당 웹사이트에서 일반적인 Ubuntu 환경에서 RDP설치를 쉽게 도와주는 Shell Script를 받을 수 있다.

그것도 Free로.

 

DIRECT DOWNLOAD LINK

 

사용방법은 c-nergy.be/blog/?p=15733 에 자세히 나와있지만 이곳에 간략히 서술한다.

 

compatibility

  • Ubuntu 16.04.x 
  • Ubuntu 18.04.x
  • Ubuntu 20.04.x
  • Ubuntu 20.10

각 LTS Version (Standard)에서 작동한다.

 

How to use

1. 다운로드 받은 zip 파일의 압축을 풀고 shell script 파일에 실행 권한을 준다. (chmod +x)

2. 관리자 계정이 아닌 일반 계정으로 실행한다.

3. optional parameters

--help or -h => 기본적인 help 메뉴를 출력한다.

--sound or -s => 소리 redirection을 추가한다.

--loginscreen or -l => XRDP 로그인화면을 커스터마이징 한다.

--remove or -r => XRDP 패키지를 제거한다.

--custom or -c => 커스텀 모드로 설치한다.

 

자세한 내용은 상단의 링크에 모두 있으며, 만약 나처럼 이것저것 xRDP와 관련된 패키지들을 설치하다가 중간에 발견했다면 -r 옵션으로 먼저 xRDP를 제거한 후 설치하면 좋다.

 

추가로 xRDP는 접속하려는 사용자가 log-in 되어있다면 접속 할 수 없으니 log-out 하는 습관을 들이도록 하자.

728x90
반응형

+ Recent posts