Ansible Playbook 실습 - Ansible AWX - K3s 설치 자동화 - 설계 > Ansible 자료실

본문 바로가기
사이트 내 전체검색

Ansible 자료실

실습 Ansible Playbook 실습 - Ansible AWX - K3s 설치 자동화 - 설계

페이지 정보

profile_image
작성자 꿈꾸는여행자
댓글 0건 조회 2,824회 작성일 25-02-17 17:34

본문

안녕하세요.

 

꿈꾸는여행자입니다.

 

 

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

```



댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : (주)리눅스데이타시스템
대표이사 : 정정모
본사 : 강남구 봉은사로 114길 40 홍선빌딩 2층
- tel : 02-6207-1160
대전지사 : 유성구 노은로174 도원프라자 5층
- tel : 042-331-1161

접속자집계

오늘
2,421
어제
2,585
최대
8,445
전체
2,034,631
Copyright © www.linuxdata.org All rights reserved.