일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 빨콩
- 쿠버네티스
- 미지아
- 포토박스
- Thunderbolt3
- talos linux
- centos
- 트랙포인트
- 울트라나브
- Rocky LInux
- 가상컴퓨터
- IoT
- lenovo
- 시놀로지
- SSD인클로저
- lubuntu
- 외장SSD
- synology
- k8s
- 원격
- 탁상시계
- k0s
- ACASIS
- Kubernetes
- VMM
- 미니스튜디오
- TRACKPOINT
- USB4.0
- 스마트 디스플레이
- Code-Server
- Today
- Total
테크믈리에의 리뷰 공간
[k0s Cluster 구축] 1. Ansible을 통한 기초 세팅 본문
Ansible이란
Ansible 공식 홈페이지: https://www.ansible.com
Ansible은 RedHat에서 개발 중인 환경 구성 자동화 도구로 SSH를 기반으로 하여 타겟 노드들에 자동으로 명령을 내리고 그 값을 처리할 수 있는 도구이다. 기존 .sh 파일을 사용하던 Bash Shell Script와는 달리 Yaml 파일을 사용하여 플레이북이라 불리는 명령어 셋을 정의하게 되며, 이를 인벤토리에 정의된 host 들에 전달하는 방식으로 동작한다.
k0s 환경을 본격적으로 구성하려 한다면 최소 3대 이상의 컴퓨터를 설치하게 될텐데, 이를 일일히 설정해주는 것은 매우 번거롭기 때문에 Ansible을 통해 자동으로 환경 구축하는 것이 여러모로 편할 것이다.
(Host) Mac / Ubuntu OS 등에 Ansible 설치
우선은 명령을 내릴 컴퓨터에 Ansible을 설치하도록 한다.
Ansible은 Python을 기반으로 동작하기에 Python 3가 깔려있다면 아래의 명령어로도 간단하게 설치가 된다.
pip3 install ansible
(Client) Rocky Linux에 의존 패키지 및 Ansible 설치 (Client)
그 다음에는 k0s를 운용할 컴퓨터에도 Ansible을 설치해주도록 한다.
Rocky Linux나 CentOS 계열에서는 epel-release에 ansible이 포함되어 있으며, 이를 설치하면 알아서 Python3도 설치해준다.
sudo dnf update -y
sudo dnf install epel-release -y
sudo dnf install ansible -y
설치가 끝난 다음 Ansible 동작 확인은 아래 명령어로 해보도록 한다.
ansible --version
Ansible 설정
이제 남은 것은 Host에서 Client들에게 명령을 내릴 수 있게 SSH 연결을 설정하는 것이다.
우선은 Host에서 SSH 연결에 쓰일 암호키를 생성하도록 하자.
ssh-keygen
그 다음, 해당 암호키를 Client에 전송하기 위해 아래 명령어를 실행하도록 한다.
ssh-copy-id <관리자 계정>@<타겟 IP>
k0s는 기본적으로 동작하는데 루트 권한을 요구하기 때문에 관리자 계정에는 root를 적어주는 것이 여러모로 편할 것이다.
(몇몇 명령어는 디폴트 상황에서는 sudo 명령어와 함께 사용하여도 동작하지 않는다. 때문에 아래 root 계정 기반으로 작성된 ansible 플레이북은 동작하지 않을 수 있다.)
만약 root 외의 계정으로 ansible을 사용하고자 한다면 아래 명령어를 통해 암호 없이도 sudo를 사용할 수 있게 해주자.
(아래 명령어는 해당 관리자 계정으로 SSH 접속하여 실행하도록 한다.)
echo "$(whoami) ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/$(whoami)
그 다음, Host에서 아래 명령어를 실행하여 ansible 설정 폴더를 만들도록 한다.
sudo mkdir -p /etc/ansible
/etc/ansible/hosts 파일을 생성하여 아래의 양식으로 관리할 Client 정보를 작성한다. 만약 전역 설정으로 관리하고 싶지 않다면 Ansible Inventory 관련 내용을 읽어보고 따로 관리하도록 하자.
[<그룹이름>]
<client IP 1> ansible_user=<관리자 계정>
<client IP 2> ansible_user=<관리자 계정>
# 예제
# [non-gpu]
# 192.168.0.2 ansible_user=user1
# 192.168.0.3 ansible_user=user2
#
# [gpu]
# 192.168.0.4 ansible_user=user3
# 192.168.0.5 ansible_user=user4
작성이 끝난 다음 아래 명령어를 통해 접속 가능 여부를 확인할 수 있다.
ansible -m ping <그룹이름>
Ansible 스크립트
이제 전체 노드들을 설정할 준비는 끝났다.
우선은, k0s를 설치하는 플레이북을 실행해주도록 하자.
자세한 파일 내용 및 실행 방법 등은 아래 접은 글에 들어 있으며, 최하단의 주의 사항을 읽고 실행하도록 하자.
파일 이름: k0s_setup.yml
실행 방법:
ansible-playbook k0s_setup.yml
파일 내용:
---
- name: k0s_setup
hosts: all
tasks:
- name: Disable Swap Memory
shell: swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
become: yes
- name: Setup NTP
shell: "echo server <NTP 중앙 서버 IP> | tee -a /etc/chrony.conf"
become: yes
- name: Restart NTP
systemd:
state: restarted
name: chronyd
become: yes
- name: IpTables Setting 1
shell: |
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
nf_nat
xt_REDIRECT
xt_owner
iptable_nat
iptable_mangle
iptable_filter
EOF
become: yes
- name: IpTables Setting 2
shell: |
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 1
EOF
become: yes
- name: Apply IpTables Settings
shell: sudo sysctl --system
become: yes
- name: Add K8S Repository
shell: |
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
become: yes
- name: Install latests kubectl
ansible.builtin.dnf:
name: kubectl
state: latest
become: yes
- name: Add Docker Repository
shell: dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
become: yes
- name: Install Docker / Containerd / Docker-Compose
ansible.builtin.dnf:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-compose-plugin
state: latest
become: yes
- name: Enable Docker service
systemd:
name: docker
enabled: yes
masked: no
state: started
become: yes
- name: Install latest k0s
shell: curl -sSLf https://get.k0s.sh | DEBUG=true sh
become: yes
** 파일 내용 중 <NTP 중앙 서버 IP>를 본인의 상황에 맞게 대체하도록 한다.
** 만약 NTP 중앙 서버가 아직 준비되지 않았다면 아래 명령어를 참고하여 NTP 서버를 준비하자
sudo nano /etc/chrony.conf
# 접근할 네트워크 목록 추가
# 예시: allow 192.168.0.1/24
sudo systemctl restart chronyd
# 만약 firewall이 실행중이라면?
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
만약 Nvidia GPU 노드가 있어서 k0s 환경에서 GPU를 사용하고 싶다면 아래 플레이북을 참고하도록 하자.
파일 이름: nvidia_setup.yml
실행 방법:
ansible-playbook nvidia_setup.yml
파일 내용:
---
- name: nvidia_setup
hosts: gpu
tasks:
- name: Add Nouveau on blacklist
shell: |
cat << EOS > /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOS
become: yes
- name: Disable Nouveau
shell: dracut --force
become: yes
- name: Restart and Wait
reboot:
reboot_timeout: 3600
- name: Download Nvidia Cuda 12.3 bash
get_url:
url: https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda_12.3.2_545.23.08_linux.run
dest: /tmp/cuda_installer.run
mode: 777
- name: Install Nvidia Driver and Cuda
shell: sh /tmp/cuda_installer.run --silent --driver --toolkit
become: yes
- name: Add Nvidia-Container-Toolkit Repo
shell: |
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
- name: Install Nvidia-Container-Toolkit
ansible.builtin.dnf:
name: nvidia-container-toolkit
state: latest
become: yes
#- name: Add CUDA to zshrc
# shell: |
# echo export PATH="/usr/local/cuda-12.2/bin:\$PATH" | tee -a /home/<사용자명>/.zshrc
# echo export LD_LIBRARY_PATH="/usr/local/cuda-12.2/lib64:\$LD_LIBRARY_PATH" | tee -a /home/<사용자명>/.zshrc
** 파일 내용 중 hosts: gpu는 본인이 /etc/ansible/hosts에서 정의한 그룹 중 GPU를 갖고 있는 그룹 이름으로 변경한다.
** CDUA to zshrc 항목의 경우, 사용자 명을 본인이 생성한 사용자 이름으로 변경한 다음 주석을 풀어 사용하도록 한다.
Reference
https://linux.how2shout.com/how-to-install-ansible-on-rocky-linux-8-or-almalinux/
'프로그래밍|소프트웨어 > K0S' 카테고리의 다른 글
[k0s Cluster 구축] 5. k0s 클러스터에서 Rook Ceph Block Storage 사용하기 (0) | 2023.12.01 |
---|---|
[k0s Cluster 구축] 4. k0s 클러스터에서 Nvidia GPU 사용하기 (0) | 2023.11.23 |
[k0s Cluster 구축] 3. OpenLens의 기초 세팅법 (0) | 2023.11.23 |
[k0s Cluster 구축] 2. k0s 클러스터 구축 및 OpenLens 기초 사용법 (0) | 2023.11.22 |
[k0s Cluster 구축] 0. Rocky Linux 8.5 설치 (0) | 2023.11.21 |