쿠버네티스 설치 방법이 너무 다양하고 오류발생 가능성이 너무 많아서 랜처를 사용하게됐다.
먼저 우분투 설치 후 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
대단히 편리하다.
'서버' 카테고리의 다른 글
| k8s에서 스카우터 이름 고유하게 설정하기(helm) (0) | 2025.09.10 |
|---|---|
| MyService 마이크로서비스 통합 모니터링 시스템 구축기 (0) | 2025.09.09 |
| NGINX PROXY MANAGER에서 언더바 헤더 사용하기 (0) | 2025.05.16 |
| IIS 에서 중앙인증서 설정 Centralized Certificate Store (CCS) (0) | 2025.04.24 |
| IIS 환경에서 CORS 설정 (0) | 2025.04.24 |