Ansible 네트워크 자동화 – 4

앤시블 네트워크 자동화 – 4

앤시블 role

Role은 함께 작동하는 앤시블 기본값, 파일, 작업, 템플릿, 변수, 그리고 다른 앤시블 구성요소들의 집합이다. 첫번째 playbook과 명령에서 본것 처럼, 명령에서 플레이북으로 이동하면 여러 작업을 쉽게 실행하고 같은 작업을 같은 순서로 반복할 수 있다. 플레이북에서 Role로 이동하면 명령한 작업을 보다 쉽게 재사용하고 공유할 수 있다. 내 role과 다른사람의 role을 직접 또는 갖법적으로 사용할 수있는 Ansible Galaxy를 볼 수 있다.

role의 이해

role이 정확히 무엇이며 왜 관심가져야 하는가? 앤시블 role은 기본적으로 알려진 파일구조로 나뉜 플레이북이다. 플레이북에서 role로 이동하면 앤시블 작업흐름을 쉽게 공유하고 읽고 업데이트할 수 있다.
예를들면 DNS 플레이북을 스스로 성할 필요가 없다. 대신 DNS서버와 role을 지정하여 구성하면된다.

DNS플레이북 예제.

role의 개념을 알기 위해 아래의 playbook.yml 파일은 두개의 작업을 가지는 하나의 yml 파일이다.
이 앤시블 플레이북은 시스코 IOS 장비의 호스트네임을 설정한 후 DNS 서버를 설정한다.

Continue reading

Ansible 네트워크 자동화 – 3

Ansible 네트워크 자동화 -3

앤시블 인벤토리(Inventory) 만들기

 

인벤토리 없이 플레이북을 실행하려면 명령어에 여러 플래그들이 필요하다. 또한 하나의 장비에 대해 플레이북을 실행하는 것은 같은 작업을 수동으로 하는 것과 비교하여 크게 효율적이지도 않다.
ansible_network_os 와 ssh 사용자같은 정보를 가지는 managed node를 구성하기위해 인벤토리 파일을 사용한다. 모든 기능을 가지는 인벤토리 파일은 네트워크의 진짜 소스로 쓰일 수 있다.
인벤토리 파일을 사용하여 한 플레이북에서 단일 명령으로 수백개의 네트워크 장비를 유지할 수 있다.

기본 인벤토리

먼저, 인벤토리를 논리적으로 그룹화한다. 우수 사례는 용도(어플리케이션, 스택이나 마이크로서비스), 장소(데이터센터나 지역), 시점(개발 단계)별로 서버와 네트워크 장비를 그룹화 하는 것이다.

그룹 이름에 공백, -, 숫자를 사용하면 안된다. 그룹이름은 대소문자를 구별한다.

아래 간단한 datacenter 예제는 기본 그룹 구조를 보여준다. 그룹은 [metagroupname:children] 문법을 사용하고 메타그룹의 멤버로 그룹을 나열한다. network 그룹은 모든 leap와 spine을 v포함한다. datacenter 그룹은 모든 네트워크장비와 모든 웹서버를 추가한다.

Continue reading

Ansible 네트워크 자동화 – 2

앤시블 네트워크 자동화 – 2

Ansible 네트워크 자동화

네트워크 자동화는 기본 앤시블 개념의 잇점이지만, 네트워크 모듈의 작동에는 중요한 차이점이 있다.

Control 노드에서 실행

대부분의 앤시블 모듈과는 달리 네트워크 모듈은 managed 노드에서 실행되지 않는다. 사용자 관점에서 네트워크 모듈은 다른 모듈처럼 작동한다. 그것은 ad-hoc 명령, playbook과 role을 가지고 작동한다.
그 이면에서 네트워크 모듈은 다른 (리눅스/유닉스 윈도우) 모듈과 다른 방법을 사용한다. 앤시블은 파이썬으로 작성되고 실행되기 때문에, 네트워크 장비에서 파이썬 실행을 할수 없으므로, 앤시블 네트워크 모듈은 control 노드에서 ansible 이나 ansible-playbook을 실행하는것으로 실행된다.

다양한 통신 프로토콜(multiple communication protocol)

managed 노드 대신 control 노드에서 네트워크 모듈이 실행되기 때문에, 다양한 통신 프로토콜을 지원해야한다.
네트워크 모듈에 선택된 통신 프로토콜(XML over SSH, CLI over SSH, API over HTTPS)은 모듈의 의도와 플랫폼에 따라 다르다.
어떤 네트워크 모듈은 하나의 프로토콜만 지원하며, 어떤 모듈은 프로토콜을 선택할 수 있다.
가장 일반적인 통신 프로토콜은 CLI over SSH 이다.
통신 프로토콜은 ansible_connection 변수로 설정한다.

Continue reading

Ansible 네트워크 자동화 – 1

앤시블(Ansible) 네트워크 자동화 – 1

앤시블 기초

Ansible은 IT 자동화 도구이며, 기본적으로 ssh 프로토콜을 이용한다. 또한 데몬이 실행되지도 않는다.

참고:  SF 소설에서의 Ansible –  앤시블은 원래 SF 소설에서 초광속 실시간 통신을 위한 개념으로 사용했다. 1966년  Ursula K. Le Guin의 소설에서 Ansible이란 단어를 처음 사용했다고 한다. Orson Scott Card의  소설 엔더스 게임이나 듀나의 소설 대리전에서도 앤시블 통신을 사용하는 것을 볼 수 있다.

앤시블 구성

Control Node
ansible이 설치되어 있는 어떤 기계들도 control node가 될 수 있다. control node에서 anaible이나 ansible-playbook 명령을 실행한다. 파이썬이 설치된 어떤 컴퓨터든 control node로 사용할 수 있지만, 윈도우가 설치된 기계는 control node로 사용할 수 없다. 또한 control node를 여러개 가질 수도 있다.

Managed Node
Ansible이 관리하는 네트워크 장치들이나 서버들. Managed node는 때대로 host 라 부르기도 하며, managed node에는 ansible을 설치하지 않는다.

Inventory
Managed node의 목록. 인벤토리 파일은 때때로 hostfile 이라 부른다. inventory 파일은 각 managed node의 정보(ip 주소 등)가 명시된다. managed node를 그룹으로 만들고 중첩시킬 수도 있다.

Collection
collection은 playbook, role, module, plugin을 포함하는 ansible 콘텐츠의 배포 포맷이다. ansible galaxy를 통해 collection을 설치하고 사용할 수 있다.

Modules
ansible 실행 코드의 단위. 각 모듈은 특정 용도를 가진다.

Tasks
ansible의 작업 단위. ad-hoc 명령으로 한번의 task를 실행할 수 있다.

Playbook
순서가 지정된 task 리스트가 저장되어 해당 task를 반복 실행할 수 있다. playbook은 변수와 task를 포함할수도 있다. playbook은 YAML로 작성되어 읽고 쓰고 공유하고 이해하기 쉽다.

Continue reading

ssh key exchange method, ciphers 오류 처리.

구형 시스코 네트워크 장비에 ssh 접속했는데, 아래와 같은 오류가 발생함.

$ ssh snowfox@192.168.0.100

Unable to negotiate with 192.168.0.100 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1

구버전(ssh 6 이하)에서 지원하던 key exchange method를 지원하지 않아서 발생하는 문제로, 홈디렉토리의 .ssh/config 파일이나, /etc/ssh/ssh_config에 아래 내용을 추가하면 된다.

KexAlgorithms +diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1

Continue reading

qemu-kvm Guest VM(윈도우 10)에서 nvidia GPU path through 사용하기.

qemu-kvm Guest VM(윈도우 10)에서 nvidia GPU path through 사용하기.

* 작업환경
Host OS: ubuntu 18.04 (EFI boot)
Guest OS: windows 10
Hypervisor : qemu-kvm

M/B: ASUS WS X299 SAGE
GPU: Gforce RTX2080 TI 4개
MEM: 128GB
CPU: Intel(R) Core(TM) i9-10900X CPU @ 3.70GHz

1. 커널의 iommu 지원 설정

/etc/default/grub 파일에서 아래 내용을 수정 또는 추가한다.

# vi /etc/default/grub
...
GRUB_CMDLINE_LINUX="xhci-hcd.quirks=262144 kvm-intel.nested=1 intel_iommu=on modprobe.blacklist=nouveau"
...

커널에 적용하고 재부팅한다.

# grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

Continue reading

linux partitionmanager 로 lvm2 다루기.

우분투 리눅스 lvm2 GUI 툴(partitionmanager)

작업 환경:
virtualbox, ubuntu 20.04(server) guest 에서 작업.

사전 준비사항
os disk: /dev/sda
pv: /dev/sdb, /dev/sdc, /dev/sdd

우분투 리눅스에서 세개의 디스크를 partitionmanager를 사용하여 lv로 만들어 사용하려고 한다.
디스크를 parted 명령으로 확인하면, 아래와 같이 Partition Table이 unknown으로 보인다.(한 번도 사용하지 않았으므로)

$ sudo parted -l
[sudo] password for snowfox:
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 17.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  17.2GB  17.2GB  ext4


Error: /dev/sdb: unrecognised disk label
Model: VBOX HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Error: /dev/sdc: unrecognised disk label
Model: VBOX HARDDISK (scsi)
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Error: /dev/sdd: unrecognised disk label
Model: VBOX HARDDISK (scsi)
Disk /dev/sdd: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Continue reading

ubuntu 리눅스에 ethminer 설치하기.

ubuntu 18.04 ethminer 설치하기.

ethminer 는 이더리움을 채굴하는 커맨드라인 기반 프로그램이다.

* 사전 준비사항.

nvidia 드라이버 및 cuda 설치가 되어 있어야 한다.
cmake, libdbus-1-dev, build-essential 패키지가 설치되어 있어야한다. 만약 설치되어 있지않다면 설치한다.

# apt install cmake  libdbus-1-dev build-essential

1. repository 추가

# add-apt-repository -y ppa:ethereum/ethereum

2. ethereum 패키지 설치

# apt install ehereum

Continue reading

윈도우10에 WSL2 설치 하기

윈도우10에 WSL(Windows Subsystem for Linux)2 설치하기

관리자권한으로 powershell이나 명령프롬프트를 실행하고 아래 명령으로 wsl을 사용가능하도록 만든다.

PS C:\WINDOWS\system32> dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

배포 이미지 서비스 및 관리 도구
버전: 10.0.17763.1518

이미지 버전: 10.0.17763.1637

기능을 사용하도록 설정하는 중
[==========================100.0%==========================]
작업을 완료했습니다.

Continue reading

리눅스 블럭 디바이스 이름 임시 변경(sdb를 sdc로)

리눅스 블럭 디바이스 이름을 임시로 변경하는 방법.

아래와 같이 디스크를 구성해서 사용하던중, 임시로 디스크 하나들 더 붙일 필요가 생겼다.
OS 디스크: /dev/sda (xfs 포맷)
공유디스크 : /dev/sdb (iSCSI 볼륨, lvm 으로 구성)

디스크를 하나 더 붙였는데, 공유디스크가 sdc로 변경되며, 이 때문에 lv를 정상적으로 사용할 수 없는 상태가 되었다.
즉, /dev/sdb를 /dev/sdc로 그리고 /dev/sdc를 /dev/sdb로 바꿔야할 상황이 된 것이다.

# lsscsi
[0:0:0:0]    cd/dvd  VBOX     CD-ROM           1.0   /dev/sr0
[2:0:0:0]    disk    ATA      VBOX HARDDISK    1.0   /dev/sda
[3:0:0:0]    disk    ATA      VBOX HARDDISK    1.0   /dev/sdb
[4:0:0:0]    disk    LIO-ORG  sdisk            4.0   /dev/sdc

Continue reading