실습 Ansible Playbook 실습 - Ansible AWX - K3s 설치 자동화 - 설계
페이지 정보

본문
안녕하세요.
꿈꾸는여행자입니다.
Ansible을 통한 Playbook을 활용에 대해서 Ansible AWX 구성 자동화 방안을 생각해 보았습니다.
해당 항목들을 설계 및 구현 해보는 과정을 진행하고자 합니다.
이번 항목에서는 다음 내용을 기준으로
설계해 보겠습니다.
1. K3s 오프라인 설치를 위한 Ansible 기반 자동화
감사합니다.
> 아래
## **K3s 오프라인 설치를 위한 Ansible 기반 자동화 설계**
---
## **1. 개요**
본 문서는 **K3s(경량 Kubernetes)** 를 오프라인 환경에서 자동으로 설치하기 위한 **Ansible 기반의 자동화 설계**를 설명합니다.
이를 통해 **네트워크가 제한된 환경**에서도 신속하고 일관된 K3s 클러스터 설치가 가능합니다.
### **설계 목표**
1. **자동화된 배포:** Ansible을 활용한 K3s 오프라인 설치
2. **유지보수 용이성:** Role 기반 구조 설계
3. **확장성 확보:** 추가 노드 및 환경 변경 시 용이한 적용
---
## **2. 시스템 구성**
### **2.1 주요 구성 요소**
- **제어 노드 (Ansible Control Node)**
- Ansible이 실행되는 노드
- K3s 설치를 위한 오프라인 패키지 다운로드 및 배포 담당
- **대상 노드 (Target Nodes)**
- K3s가 설치될 서버
### **2.2 디렉토리 구조**
```sh
with-ansible/
│── inventory.ini # Ansible 인벤토리 파일
│── playbook.yml # Ansible 실행을 위한 메인 Playbook
│── prepare.yml # 환경 준비 Playbook
│── install-k3s.yml # K3s 설치 Playbook
│── group_vars/ # 공통 변수 저장소
│ └── all.yml # K3s 설치 변수 파일
│── roles/ # Ansible 역할 디렉토리
│ ├── setup_control_node/ # 제어 노드 설정
│ ├── prepare_k3s_offline/ # K3s 오프라인 패키지 준비
│ ├── copy_offline_package/ # 패키지 복사 및 배포
│ ├── install_k3s_offline/ # K3s 설치
│── files/ # 필요한 파일 저장소
└── README.md # 문서화 파일
```
---
## **3. 작업 흐름**
### **3.1 Ansible 작업 순서**
1. **작업 디렉토리 준비**
- GitLab 저장소에서 프로젝트 클론
- 기본 디렉토리 및 역할(Role) 생성
2. **제어 노드 설정 (`setup_control_node`)**
- 필수 패키지 설치 (`dnf install`)
- SSH 키 생성 및 배포
- 컨테이너 런타임 활성화
3. **K3s 오프라인 패키지 준비 (`prepare_k3s_offline`)**
- K3s 바이너리, 설치 스크립트, Helm 다운로드
- 다운로드한 파일을 압축하여 오프라인 패키지 생성
4. **오프라인 패키지 복사 (`copy_offline_package`)**
- 대상 노드에 오프라인 패키지 복사 및 압축 해제
- K3s 실행 파일 및 설치 스크립트 이동
5. **K3s 설치 (`install_k3s_offline`)**
- 오프라인 환경에서 K3s 설치 실행
- `kubectl get nodes`를 통한 정상 작동 확인
6. **GitLab에 소스 커밋 및 푸시**
---
## **4. Ansible 역할(Role)별 상세 설계**
### **4.1 제어 노드 설정 (`setup_control_node`)**
#### **역할**
- Ansible 제어 노드의 환경을 설정
#### **파일 경로**
`roles/setup_control_node/tasks/main.yml`
#### **주요 작업**
- 필수 패키지 설치
- SSH 키 자동 생성 및 대상 노드로 배포
- `containerd` 활성화
```yaml
---
- name: Setup Ansible Control Node for K3s Deployment
hosts: localhost
become: yes
tasks:
- name: Update all packages
dnf:
name: "*"
state: latest
- name: Install required packages
dnf:
name:
- net-tools
- curl
- sshpass
- tar
- unzip
state: present
- name: Start and enable containerd
systemd:
name: containerd
state: started
enabled: yes
```
---
### **4.2 K3s 오프라인 패키지 준비 (`prepare_k3s_offline`)**
#### **역할**
- K3s 및 Helm 관련 파일을 미리 다운로드하여 압축
#### **파일 경로**
`roles/prepare_k3s_offline/tasks/main.yml`
#### **주요 작업**
- K3s 바이너리, 설치 스크립트, Helm 다운로드
- 패키지를 압축하여 하나의 파일로 저장
```yaml
---
- name: Prepare K3s offline package
hosts: localhost
become: yes
vars_files:
- group_vars/all.yml
tasks:
- name: Download K3s binary
get_url:
url: "{{ k3s_url }}"
dest: "{{ offline_package_dir }}/k3s"
mode: '0755'
- name: Compress offline package
archive:
path: "{{ offline_package_dir }}/"
dest: "{{ offline_package_archive }}"
format: gz
```
---
### **4.3 오프라인 패키지 복사 (`copy_offline_package`)**
#### **역할**
- 대상 노드로 K3s 오프라인 패키지를 전송
#### **파일 경로**
`roles/copy_offline_package/tasks/main.yml`
#### **주요 작업**
- 오프라인 패키지 복사 및 압축 해제
- K3s 실행 파일 이동
```yaml
---
- name: Copy offline package to target nodes
hosts: k3s_nodes
become: yes
tasks:
- name: Copy K3s offline package
ansible.builtin.copy:
src: "{{ offline_package_archive }}"
dest: "{{ offline_package_dir }}/k3s_offline_package.tar.gz"
mode: '0644'
- name: Extract offline package
ansible.builtin.unarchive:
src: "{{ offline_package_dir }}/k3s_offline_package.tar.gz"
dest: "{{ offline_package_dir }}/"
remote_src: yes
```
---
### **4.4 K3s 설치 (`install_k3s_offline`)**
#### **역할**
- 오프라인 환경에서 K3s를 설치
#### **파일 경로**
`roles/install_k3s_offline/tasks/main.yml`
#### **주요 작업**
- `INSTALL_K3S_SKIP_DOWNLOAD=true` 설정을 통해 설치 실행
- K3s 실행 확인
```yaml
---
- name: Install K3s in Air-Gap Mode
hosts: k3s_nodes
become: yes
tasks:
- name: Install K3s
shell: "INSTALL_K3S_SKIP_DOWNLOAD=true {{ k3s_install_script_dest }}"
- name: Verify K3s installation
command: "kubectl get nodes"
register: node_status
- debug:
var: node_status.stdout_lines
```
---
## **5. 변수 설정**
### **5.1 K3s 관련 변수 (`group_vars/all.yml`)**
```yaml
# K3s 버전
k3s_version: "v1.31.5+k3s1"
k3s_url: "https://github.com/k3s-io/k3s/releases/download/{{ k3s_version }}/k3s"
# 오프라인 패키지 경로
offline_package_dir: "./k3s_offline_package"
offline_package_archive: "./k3s_offline_package.tar.gz"
```
---
## **6. 실행 방법**
### **6.1 준비 단계 실행**
```sh
ansible-playbook -i inventory.ini prepare.yml --ask-pass --ask-become-pass
```
### **6.2 설치 단계 실행**
```sh
ansible-playbook -i inventory.ini install-k3s.yml --ask-pass --ask-become-pass
```
- 이전글Ansible Playbook 실습 - Ansible AWX - K3s 설치 자동화 - 구현 1 25.02.18
- 다음글Ansible Playbook 실습 - 취약점 분석 점검 항목 - root 계정 원격 접속 제한 - 설계 2 25.02.14
댓글목록
등록된 댓글이 없습니다.