-
[K8S][폐쇄망]Kubespray로 Kubernetes 설치하기 - CentOS7/Rocky8Kubernetes 2025. 3. 20. 20:08
설치 환경
- OS : Rocky8.9
- Kubernetes : v1.27.7
- Kubespray : v2.23
- ansible-core : v2.12.5
- docker : v20.10
- Kubernetes 설치 최소 버전 : v1.25
- Python 필요 버전 : v3.9 - v3.11
설치 파일
설치 디렉토리 (ex. install/)에 필요 파일들 준비
(GPU를 사용하지 않는다면 epel.tar.gz 파일을 제외해도 Kubernetes 설치에는 문제가 없습니다.)
☞ [K8S][폐쇄망] Kubespray 폐쇄망 설치 파일 준비하기
☞ [CentOS7/Rocky8] local-repo + docker-ce repo 생성하기
☞ https://www.python.org/downloads/
install/
🤐 kubespray_cache_2.23.0.tgz
🤐 kubespray-2.23.0.tgz
🤐 k9s_Linux_amd64.tar.gz
🤐 Python-3.10.12.tgz
📁 repo
ㄴoffline-files.tar.gz
ㄴ📁 repos
ㄴ🤐 docker-ce.tar.gz
ㄴ🤐 baseos.tar.gz
ㄴ🤐 appstream.tar.gz
ㄴ🤐 epel.tar.gz
ㄴ📄 docker-ce.repo
ㄴ📄 rocky8.repo
📁 pip
ㄴ📁 kubespray
ㄴ🤐 ansible-5.7.1.tar.gz
ㄴ🤐 ansible-core-2.12.5.tar.gz
ㄴ📄 ansible 필요 패키지들.whl
ㄴ📁 virtualenv
ㄴ📄 virtualenv 패키지들.whl환경 설정
- 방화벽 및 SELINUX 끄기 (모든 노드에 설정)
# 방화벽 systemctl disable firewalld # swapoff swapoff -a # SELINUX off vi /etc/sysconfig/selinux ''' SELINUX=disabled ''' reboot
Repo 설정) 1. python 설치하기
- install/repo → tar 파일들 모두 압축 해제
cd repo tar xvf offline-files.tar.gz cd repos # 현재 폴더에 tar파일 한번에 압축 해제 명령어 find . -name '*.tar.gz' -exec tar xvf {} \;
- yum repository 설정
- baseurl → 폴더 경로 입력
# nvidia-docker.repo baseurl= file:///root/install/repo/repos/libnvidia-container baseurl= file:///root/install/repo/repos/nvidia-container-runtime baseurl= file:///root/install/repo/repos/nvidia-docker # rocky8.repo baseurl= file:///root/install/repo/repos/appstream/ baseurl= file:///root/install/repo/repos/baseos/ baseurl= file:///root/install/repo/repos/epel/
- /etc/yum.repos.d에 있는 기존 Centos.repo 파일들 backup 폴더로 이동
mkdir -p /etc/yum.repos.d/backup mv /etc/yum.repos.d/Rocky-* /etc/yum.repos.d/backup/
- yum.repos.d/에 있는 .repo 파일들 /etc/yum.repos.d로 복사
cp docker-ce.repo nvidia-docker.repo rocky8.repo /etc/yum.repos.d/
- python 3.10 설치
# 필요 패키지 설치 yum install -y curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel tar wget make # 압축해제 및 폴더 이동 tar xvf Python-3.10.12.tgz cd Python-3.10.12 # 빌드 및 컴파일 ./configure --enable-optimizations make altinstall # 심볼릭 링크 설정 ln -s /usr/local/bin/python3.10 /usr/bin/python3 ln -s /usr/local/bin/pip3.10 /usr/bin/pip3 # 확인 python3 --version
Repo 설정) 2. local-repo를 webserver로 띄워서 사용하기
- /etc/yum.repo.d/ 경로에 .repo파일 수정 (모든 노드에 설정)
# docker-ce.repo baseurl= http://{Master IP}:50000/repos/docker-ce # nvidia-docker.repo baseurl= http://{Master IP}:50000/repos/libnvidia-container baseurl= http://{Master IP}:50000/repos/nvidia-container-runtime baseurl= http://{Master IP}:50000/repos/nvidia-docker # rocky8.repo baseurl= http://{Master IP}:50000/repos/appstream baseurl= http://{Master IP}:50000/repos/baseos baseurl= http://{Master IP}:50000/repos/epel
- local-repo 파일이 있는 디렉토리에서 다음 명령어 실행 (/repos의 상위폴더 = /repo)
cd repo python3 -m http.server 50000 &
- repo webserver 접속 확인
- http://IP:PORT
Kubernetes 설치
- /tmp 디렉토리에 kubespray_cache.tgz 파일 풀기
tar xvf kubespray_cache_2.23.0.tgz -C /tmp
- kubespray 압축해제 및 이동
tar xvf kubespray-2.23.0.tgz cd kubespray-2.23.0/
- 필수 패키지 설치
yum install -y sshpass
- +) Roky8에서는 kubespray 실행 중 runc 패키지 충돌 에러가 발생할 수 있다...! 미리 제거
yum remove runc
- virtualenv 설치
# 오프라인 설치 명령 --no-index -f [파일 찾을 경로] [찾을 파일] pip3 install --no-index -f /root/install/pip/virtualenv virtualenv
- virtualenv 생성 및 활성화
# 생성 virtualenv --python=$(which python3) kubespray-venv # 활성화 source kubespray-venv/bin/activate ### 비활성화 시 deactivate
- ansible 설치
pip3 install -U --no-index -f /root/install/pip/kubespray pip pip3 install -U --no-index -f /root/install/pip/kubespray -r /root/install/kubespray-2.23/requirements.txt
- inventory 폴더 복사 및 스크립트 실행
- IP : 구성할 노드 ip (ex. 192.168.0.100 192.168.0.101 192.168.0.102)
- HOST_PREFIX : hosts명
- KUBE_CONTROL_HOSTS : Master 갯수
- CONFIG_FILE : 설정할 hosts.yaml 파일 경로
# 복사 cp -rfp inventory/sample inventory/mycluster # 환경변수 지정 및 스크립트 실행 # Update Ansible inventory file with inventory builder # declare -a IPS=(Master_IP Node1_IP Node2_IP) declare -a IPS=(IP) HOST_PREFIX=test KUBE_CONTROL_HOSTS=1 CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
- hosts.yaml 파일 수정
- vars : 모든 hosts에 공통변수 작성 (공통변수가 아닐 경우 hosts아래에 개별 작성)
- ansible_user : 앤서블 실행 유저
- ansible_password : 실행 유저 비밀번호
- ansible_become_password: root계정 비밀번호
- master, etcd는 홀수로 구성
all: vars: ansible_user: 'root' ansible_password: 1234 ansible_become_password: 1234 hosts: master-name: ansible_host: {Master_IP} ip: {Master_IP} access_ip: {Master_IP} node1-name: ansible_host: {Node1_IP} ip: {Node1_IP} access_ip: {Node1_IP} node2-name: ansible_host: {Node2_IP} ip: {Node2_IP} access_ip: {Node2_IP} children: kube_control_plane: hosts: master-name: kube_node: hosts: master-name: node1-name: node2-name: etcd: hosts: master-name: k8s_cluster: children: kube_control_plane: kube_node: calico_rr: hosts: {}
- +) pem키 사용 방법
- ansible_ssh_private_key_file : pem 키 경로
all: vars: ansible_user: "centos" ansible_ssh_private_key_file: '/home/centos/test.pem'
- +) label 추가
- hosts.yaml에서 전체(vars에 기재) 또는 개별로 node label 부여 가능
node1-name: ansible_host: {Node1_IP} ip: {Node1_IP} access_ip: {Node1_IP} node_labels: nodetype: 'worker' node2-name: ansible_host: {Node2_IP} ip: {Node2_IP} access_ip: {Node2_IP} node_labels: gputype: 'V100'
- inventory/mycluster/group_vars/all/offline.yml 파일 수정
files_repo: "http://{Master 1번 IP}:50000/offline-files" ### If using CentOS, RedHat, AlmaLinux or Fedora yum_repo: "http://{Master 1번 IP}:50000/repos" rhel_enable_repos: false ### Docker / Containerd docker_rh_repo_base_url: "{{ yum_repo }}/docker-ce" docker_rh_repo_gpgkey: "" # {files_repo} 포함하는 부분 전부 주석 해제!!!
- 설치 (cluster.yml 파일이 위치한 kubespray 디렉토리 안에서 명령어 실행)
- ansible-playbook : ansible 실행 명령어
- -i 경로 : hosts파일 경로 지정
- --become : root 권한으로 수행
- cluster.yml : kubernetes 배포 yml
ansible-playbook -i inventory/mycluster/hosts.yaml --become cluster.yml
- 설치 확인
# 노드 확인 kubectl get nodes # 모든 파드 확인 kubectl get pod -A
'Kubernetes' 카테고리의 다른 글
[K8S] kubespray inventory_builder 제거 (0) 2025.03.21 [K8S][폐쇄망]Kubespray로 Kubernetes 설치하기 - Ubuntu (0) 2025.03.20 [K8S][폐쇄망] Kubespray 폐쇄망 설치 파일 준비하기 (0) 2025.03.20 [K8S] Kubespray로 Kubernetes 설치하기 - Ubuntu (0) 2025.03.20 [ERROR] The conditional check 'groups.get('kube_control_plane')' failed. (0) 2025.03.20