서버

Rancher 로 쿠버네티스 시작

백봉 2025. 6. 30. 17:15



쿠버네티스 설치 방법이 너무 다양하고 오류발생 가능성이 너무 많아서 랜처를 사용하게됐다. 

 

먼저 우분투 설치 후 ssh 포트 변경의경우

$ sudo vi /etc/ssh/sshd_config
Port **** 변경
$ sudo systemctl daemon-reload
$ sudo systemctl restart ssh

 

마스터 노드 설치(클러스터 설치, 마스터 노드를 추가할 경우 아래 마스터 노드 추가 스크립트)

#!/bin/bash

set -e

echo "==> 스왑 비활성화"
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

echo "==> 현재 메모리/스왑 상태"
free -h

echo "==> RKE2 서버 설치"
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="server" sh -

echo "==> rke2-server 서비스 활성화 및 시작"
sudo systemctl enable rke2-server.service
sudo systemctl start rke2-server.service

echo "==> rke2-server 서비스 상태 확인 (잠시 대기)"
sleep 15
sudo systemctl status rke2-server.service --no-pager

echo "==> kubectl 사용을 위한 kubeconfig 복사 및 환경변수 추가"
mkdir -p ~/.kube
sudo cp /etc/rancher/rke2/rke2.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
echo 'export PATH=/usr/local/bin:/var/lib/rancher/rke2/bin:$PATH' >> ~/.bashrc
export PATH=/usr/local/bin:/var/lib/rancher/rke2/bin:$PATH

echo "==> 노드 상태 확인 (최초 기동시 약간 대기 필요)"
sleep 10
kubectl get nodes

echo "------------------------------------------------------------"
echo "RKE2 마스터 노드 정보"
echo "------------------------------------------------------------"
echo "■ 서버 토큰 (worker 노드 조인시 사용):"
sudo cat /var/lib/rancher/rke2/server/node-token
echo
echo "■ 이 노드의 내부 IP:"
hostname -I | awk '{print $1}'
echo
echo "■ 노드 목록"
kubectl get nodes -o wide
echo "------------------------------------------------------------"
echo "설치 완료. bash를 재시작하거나 'source ~/.bashrc'를 실행하세요."

 

마스터 노드 추가

#!/bin/bash

set -e

# 파라미터 체크
if [ $# -ne 2 ]; then
  echo "사용법: $0 <기존마스터 IP> <노드토큰>"
  echo "예시: $0 192.168.0.2 K10b...."
  exit 1
fi

MASTER_IP="$1"
NODE_TOKEN="$2"

echo "==> 스왑 비활성화"
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

echo "==> 현재 메모리/스왑 상태"
free -h

echo "==> RKE2 서버(컨트롤플레인) 설치"
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="server" sh -

echo "==> /etc/rancher/rke2/config.yaml 파일 생성"
sudo mkdir -p /etc/rancher/rke2
sudo tee /etc/rancher/rke2/config.yaml >/dev/null <<EOF
server: https://$MASTER_IP:9345
token: $NODE_TOKEN
# HA 환경에서 VIP나 LB FQDN으로도 접근 가능하면 tls-san 추가
# tls-san:
#   - cluster-vip.example.com
EOF

echo "==> rke2-server 서비스 활성화 및 시작"
sudo systemctl enable rke2-server.service
sudo systemctl start rke2-server.service

echo "==> rke2-server 서비스 상태 확인 (잠시 대기)"
sleep 15
sudo systemctl status rke2-server.service --no-pager

echo "==> 이 노드의 내부 IP:"
hostname -I | awk '{print $1}'

echo "==> 마스터 조인 완료. 기존 마스터에서 'kubectl get nodes'로 상태 확인."

 

워커 노드 설치

#!/bin/bash

set -e

# 파라미터 체크
if [ $# -ne 2 ]; then
  echo "사용법: $0 <마스터노드 IP> <노드 토큰>"
  echo "예시: $0 192.168.0.2 K10b...."
  exit 1
fi

MASTER_IP="$1"
NODE_TOKEN="$2"

echo "==> 스왑 비활성화"
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

echo "==> 현재 메모리/스왑 상태"
free -h

echo "==> RKE2 워커(Agent) 설치"
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -

echo "==> /etc/rancher/rke2/config.yaml 파일 생성"
sudo mkdir -p /etc/rancher/rke2
sudo tee /etc/rancher/rke2/config.yaml >/dev/null <<EOF
server: https://$MASTER_IP:9345
token: $NODE_TOKEN
EOF

echo "==> rke2-agent 서비스 활성화 및 시작"
sudo systemctl enable rke2-agent.service
sudo systemctl start rke2-agent.service

echo "==> rke2-agent 서비스 상태 확인 (잠시 대기)"
sleep 10
sudo systemctl status rke2-agent.service --no-pager

echo "==> 워커 노드의 내부 IP:"
hostname -I | awk '{print $1}'

echo "==> 설치 완료. 클러스터 조인 후 마스터에서 'kubectl get nodes'로 상태 확인하세요."

 

 

인증서를 마스터노드에 준비하고 그 폴더에서 인증서 Secret 생성

#!/bin/bash

set -e

# 변수 설정 (필요에 따라 수정)
NAMESPACE="cattle-system"
SECRET_NAME="rancher-tls-secret"
CERT_FILE="fullchain1.pem"   # 실제 인증서 파일명
KEY_FILE="privkey1.pem"      # 실제 개인키 파일명
RANCHER_HOSTNAME="rancher.pdb.co.kr"   # 사용할 도메인
BOOTSTRAP_PASSWORD="admin"             # 최초 관리자 패스워드

echo "==> 0. Helm 설치 확인 및 설치 진행"
if ! command -v helm &> /dev/null; then
  echo "Helm이 설치되어 있지 않습니다. 설치를 시작합니다..."
  curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
else
  echo "Helm이 이미 설치되어 있습니다."
fi

echo "==> 1. 네임스페이스 생성"
kubectl create namespace $NAMESPACE || true

echo "==> 2. TLS Secret 생성"
kubectl delete secret $SECRET_NAME -n $NAMESPACE --ignore-not-found
kubectl create secret tls $SECRET_NAME \
  --cert="$CERT_FILE" \
  --key="$KEY_FILE" \
  -n $NAMESPACE

echo "==> 3. Helm 저장소 추가 및 업데이트"
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable || true
helm repo update

echo "==> 4. Rancher Chart 설치"
helm upgrade --install rancher rancher-stable/rancher \
  --namespace $NAMESPACE \
  --set hostname=$RANCHER_HOSTNAME \
  --set bootstrapPassword=$BOOTSTRAP_PASSWORD \
  --set ingress.tls.source=secret \
  --set ingress.tls.secretName=$SECRET_NAME
# --set ingress.tls.source=none > 인증서 설정 없음

echo "==> 5. Ingress 생성 및 배포 상태 확인"
kubectl get ingress -n $NAMESPACE

echo "==> Rancher 설치가 완료되었습니다."
echo "   접속: https://$RANCHER_HOSTNAME"

 

 

아래와 같이 나오면 완료이며, 80또는 443 포트로 진입한다. 

root@ubuntu-k8s-203:/home/ab/helm# kubectl get ingress -n cattle-system
NAME      CLASS    HOSTS                     ADDRESS                                        PORTS     AGE
rancher   <none>   rancher.pdb.co.kr   192.168.10.202,192.168.10.203,192.168.10.204   80, 443   8m52s

 

 

 

대단히 편리하다.