오프라인 패키지 준비
인터넷 연결 가능한 환경에서 설치에 필요한 모든 구성요소를 미리 다운로드합니다. 아래 예시는 kubeasz 3.6.0 기준입니다.
# 릴리즈 버전 지정
export release=3.6.0
# ezdown 스크립트 다운로드
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
# 기본 구성요소 다운로드 (코드, 바이너리, 컨테이너 이미지)
./ezdown -D
# 추가 컴포넌트 이미지 확보 (필요시)
./ezdown -X cilium
./ezdown -X flannel
./ezdown -X prometheus
# OS 패키지 미러 구축 (yum/apt 미사용 환경용)
./ezdown -P centos_7
다운로드 완료 후 /etc/kubeasz 디렉터리에 다음과 같이 구성됩니다:
| 경로 | 내용 |
|---|---|
/etc/kubeasz | kubeasz 릴리즈 코드 |
/etc/kubeasz/bin | k8s, etcd, containerd, CNI 바이너리 |
/etc/kubeasz/down | 오프라인 컨테이너 이미지 |
/etc/kubeasz/down/packages | OS 기본 패키지 |
타겟 서버 환경 구성
오프라인 설치 대상 서버에서 사전 준비 작업을 수행합니다.
# 방화벽 비활성화
systemctl stop firewalld && systemctl disable firewalld
# SELinux 해제
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
# 스왑 영역 해제
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a
오프라인 모드 설정
설치 소스를 오프라인으로 전환합니다.
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/kubeasz/example/config.yml
kubeasz 컨테이너 기동
cd /etc/kubeasz
# 패키지 무결성 재확인
./ezdown -D
# kubeasz 컨테이너 실행
./ezdown -S
컨테이너 실행 실패 시 Docker 수동 설치 후 재시도하거나, 명령어를 반복 실행해보세요.
클러스터 정의 및 설정
컨테이너 내부로 진입하여 새 클러스터를 생성합니다.
docker exec -it kubeasz /bin/bash
ezctl setup my-cluster
생성된 설정 파일을 노드 구성에 맞게 수정합니다.
hosts 파일 수정
/etc/kubeasz/clusters/my-cluster/hosts 파일에서 다음 항목을 IP 주소 기반으로 설정합니다.
[etcd]
10.0.1.10
10.0.1.11
10.0.1.12
[kube_master]
10.0.1.10
[kube_node]
10.0.1.11
10.0.1.12
# 런타임 및 네트워크 플러그인 지정
CONTAINER_RUNTIME="containerd"
CLUSTER_NETWORK="calico"
hostname 대신 반드시 IP 주소를 사용해야 합니다.
스토리지 경로 커스터마이징
config.yml에서 데이터 저장 경로를 환경에 맞게 조정합니다.
ETCD_DATA_DIR: /data/etcd
CONTAINERD_STORAGE_DIR: /data/containerd
KUBELET_ROOT_DIR: /data/kubelet
SSH 무인 접속 설정
ssh-copy-id 10.0.1.10
ssh-copy-id 10.0.1.11
ssh-copy-id 10.0.1.12
클러스터 배포
docker exec -it kubeasz ezctl setup my-cluster all
Python 인터프리터 이슈
다음과 같은 오류 발생 시 hosts 파일의 파이썬 경로를 수정합니다.
# 오류 메시지 예시
"/usr/bin/python3: No such file or directory"
# 해결: hosts 파일 내 다음 항목 변경
ansible_python_interpreter=/usr/bin/python
Calico 관련 커널 요구사항
Calico 3.23 이상은 Linux 커널 5.1+가 필요합니다. CentOS 7 등 구버전 커널 환경에서는 업그레이드가 필요합니다.
# 현재 커널 확인
uname -r
# ELRepo 커널 패키지 다운로드 및 설치
yum install -y perl wget
cd /tmp
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.278-1.el7.elrepo.x86_64.rpm
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.278-1.el7.elrepo.x86_64.rpm
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-tools-5.4.278-1.el7.elrepo.x86_64.rpm
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-tools-libs-5.4.278-1.el7.elrepo.x86_64.rpm
# 기존 tools 패키지 충돌 방지
yum remove kernel-tools kernel-tools-libs -y
# 새 커널 설치
rpm -ivh kernel-lt-tools-libs-*.rpm
rpm -ivh kernel-lt-tools-*.rpm
rpm -ivh kernel-lt-5.4*.rpm
rpm -ivh kernel-lt-devel-*.rpm
# 부팅 우선순위 설정
grub2-set-default 0
reboot
재부팅 후 커널 버전을 확인합니다.
uname -r
# 5.4.278-1.el7.elrepo.x86_64
설치 결과 검증
# 노드 상태 확인
kubectl get nodes
# Control Plane 컴포넌트 상태
kubectl get cs
# 전체 파드 상태
kubectl get pods -A
# 서비스 목록
kubectl get svc -A
대시보드 접근
관리자 토큰을 확인하여 Kubernetes Dashboard에 로그인합니다.
# Secret 목록 조회
kubectl get secret -n kube-system | grep admin
# 토큰 값 추출
kubectl describe secret -n kube-system admin-user
출력된 token 필드 값을 복사하여 Dashboard 로그인 화면에 입력합니다.
클러스터 제거
docker exec -it kubeasz ezctl destroy my-cluster