Ubuntu 20.04 서버에 K3s 클러스터 구성하기

1. 서버 생성 후 root 계정으로 처음 접속 후 비밀번호 변경

passwd           <em># 이후 변경할 비밀 번호를 2번 입력</em>

2. 호스트 이름 확인 및 변경

hostname           <em># 호스트 이름 확인</em>

hostnamectl set-hostname some_name  <em># 현재 호스트를 some_name 으로 변경</em>

3. 사용자 계정 생성

adduser kube              <em># kube 라는 사용자 생성</em>

usermod -aG sudo kube     <em># kube 사용자가 sudo 명령어를 사용할 수 있도록 등록</em>

4. root 계정 접속 해제 후 kube 사용자로 다시 접속한 후 서버 패키지 업데이트

sudo apt update; sudo apt upgrade -y; sudo apt autoremove -y

5. 방화벽 설정

<em># iptables 사용 전, ufw 방화벽 끄기</em>
sudo ufw disable
<em>
# iptables 방화벽 설정 초기화</em>
sudo iptables -F
<em>
# iptables를 안정적으로 사용하기 위한 패키지 설치</em>
sudo apt install iptables-persistent netfilter-persistent

iptables 설정을 변경했다면 netfilter-persistent save 명령어로 저장하고, 나중에 netfilter-persistent reload 명령어로 다시 설정을 불러올 수 있다.

sudo netfilter-persistent save
sudo netfilter-persistent reload

재부팅 후 iptables -S 로 정책이 유지되는지 확인한다. 만일 변경되었거나 설정이 유지되지 않았다면 netfilter-persistent reload 명령으로 다시 방화벽 정책을 불러올 수 있다.

일반적으로 네트워크 트래픽은 양방으로 흘러야 하기 때문에 established and related 접속 허용한다.

<em># 마스터노드 및 각 워커노드</em>
sudo iptables -A INPUT -m conntrack <em>--ctstate ESTABLISHED,RELATED -j ACCEPT  </em>
sudo iptables -A OUTPUT -m conntrack <em>--ctstate ESTABLISHED -j ACCEPT</em>

일반적으로 많은 소프트웨어들이 localhost 어댑터와 통신이 되어야 하기 때문에 필요하다.

# 마스터노드 및 각 워커노드
sudo iptables -A INPUT -i lo -j ACCEPT

만약 핑(ping)을 허용하려면 아래 명령을 추가한다.

# 마스터노드 및 각 워커노드
sudo iptables -A INPUT -p icmp -j ACCEPT

ssl/sftp를 이용하기 위한 포트를 허용한다.

<em># 마스터노드 및 각 워커노드</em>
sudo iptables -I INPUT -p tcp <em>--dport 22 -j ACCEPT</em>

80포트 및 443 포트 허용한다.

# 마스터노드 및 각 워커노드
sudo iptables -A INPUT -p tcp <em>--dport 80 -j ACCEPT  </em>
sudo iptables -A INPUT -p tcp <em>--dport 443 -j ACCEPT</em>

마스터 노드에서 다음과 같이 사용할 포트를 허용한다.

# 마스터노드
sudo iptables -A INPUT -p tcp <em>--dport 6443 -j ACCEPT</em>
sudo iptables -A INPUT -p tcp <em>--dport 2379:2380 -j ACCEPT</em>
sudo iptables -A INPUT -p tcp <em>--dport 10250 -j ACCEPT</em>
sudo iptables -A INPUT -p tcp <em>--dport 10251 -j ACCEPT</em>
sudo iptables -A INPUT -p tcp <em>--dport 10252 -j ACCEPT</em>
sudo iptables -A INPUT -p tcp <em>--dport 30000:32767 -j ACCEPT</em>

각각의 워커 노드에서 다음과 같이 사용할 포트를 허용한다.

# 각 워커노드
sudo iptables -A INPUT -p tcp <em>--dport 10250 -j ACCEPT</em>
sudo iptables -A INPUT -p tcp <em>--dport 30000:32767 -j ACCEPT</em>

설정을 저장한다.

# 마스터노드 및 각 워커노드
sudo netfilter-persistent save

6. 마스터 노드 k3s 설치

# 마스터노드
sudo apt update
sudo apt install -y docker.io nfs-common dnsutils curl

# 내장 traefik ingress-contraller 설치하는 경우
curl -sfL https:<em>//get.k3s.io | sh -s - server --cluster-init</em>

# nginx-controller 를 설치하기 위해 traefik ingress-controller 를 빼고 설치
curl -sfL https:<em>//get.k3s.io | sh -s - --disable traefik --disable metrics-server server --cluster-init</em>

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

MASTER_IP=$(kubectl get node m1-k8s -ojsonpath="{.status.addresses[0].address}") # m1-k8s 부분은 해당 노드의 호스트명으로 대체함
NODE_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token)

# 설치 확인
kubectl cluster-info    # 에러 메시지가 없으면 설치 완료

echo $MASTER_IP
xx.xx.xx.x                     # 여기에 출력된 값을 워커 노드의 MASTER_IP 변수에 대입한다.

echo $NODE_TOKEN
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 여기에 출력된 값을 워커 노드의 NODE_TOKEN 변수에 대입한다.

7. 워커노드 k3s 설치

<em># 각 워커노드</em>
sudo apt update
sudo apt install -y docker.io nfs-common curl

<em># 마스터 노드에서 출력된 값을 대입하여 저장한다.</em>
MASTER_IP=xx.xx.xx.x     
NODE_TOKEN=xxxxxxxxxxxxxxxxxx...

curl -sfL https://get.k3s.io | K3S_URL=https://$MASTER_IP:6443 K3S_TOKEN=$NODE_TOKEN sh -s -

8. 마스터 노드에서 워커노드 확인

<em># 마스터노드</em>
kubectl get node -o wide    <em># 마스터 노드 외에 워커 노드가 표시 되면 설치 완료!!</em>

9. nginx-controller 설치

<em># helm 설치 후 아래 명령으로 설치</em>

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install my-release ingress-nginx/ingress-nginx -n kube-system

10. k3s 설치 제거

<em># 마스터노드 설치 제거</em>
/usr/local/bin/k3s-uninstall.sh

<em># 워커노드 설치 제거</em>
/usr/local/bin/k3s-agent-uninstall.sh

댓글 남기기