Ansible은 다중 노드 게시 및 원격 작업 실행을 지원하는 모델 기반 구성 관리자입니다. 기본적으로 SSH는 원격 연결에 사용됩니다. 관리 노드에 추가 소프트웨어를 설치할 필요가 없으며 다양한 프로그래밍 언어를 사용하여 확장할 수 있습니다.
1. Ansible 기본 아키텍처
위 그림은 Ansible의 기본 아키텍처를 보여줍니다. 위 그림을 보면 다음과 같은 부분으로 구성되어 있음을 알 수 있습니다.
- 코어: 앤서블
- 핵심 모듈: Ansible과 함께 제공되는 모듈입니다
- 확장 모듈(Custom Modules): 핵심 모듈이 특정 기능을 완료하기에 충분하지 않은 경우 확장 모듈을 추가할 수 있습니다
- 플러그인: 모듈 기능 보완 완성
- 플레이북: 플레이북에서 여러 작업을 정의하고 ansible에 의해 자동으로 실행되는 Ansible의 작업 구성 파일
- 커넥터 플러그인: ansible은 연결 플러그인을 기반으로 각 호스트에 연결하지만, ansible은 각 호스트에 연결하기 위해 SSH를 사용하지만 다른 연결 방법도 지원하므로 연결 플러그인이 필요합니다.
- 호스트 인벤토리: ansible이 관리하는 호스트 정의
2. 앤서블의 작동 원리
위의 두 다이어그램은 인터넷에서 찾을 수 있는 Ansible 작동 원리 다이어그램입니다. 두 다이어그램 모두 기본적으로 아키텍처 다이어그램을 기반으로 한 확장입니다. 위 사진을 보시면 이해하실 수 있습니다:
1. 관리 터미널은 local, ssh, zeromq의 세 가지 연결 방법을 지원합니다. 기본값은 ssh 기반 연결을 사용하는 것입니다.---이 부분은 기본 아키텍처 다이어그램의 연결 모듈에 해당합니다. ;
2. 호스트 인벤토리(호스트 그룹)는 애플리케이션 유형 등에 따라 분류될 수 있습니다. 관리 노드는 단일 모듈, 단일 명령의 일괄 실행 등 다양한 모듈을 통해 해당 작업을 구현합니다.
3. 관리 노드는 플레이북을 사용하여 웹 서비스 설치 및 배포, 데이터베이스 서버 일괄 백업 등과 같은 유형의 기능을 구현하는 여러 작업 모음을 구현할 수 있습니다. 플레이북은 단순히 여러 임시 작업을 결합하여 시스템이 작동하는 구성 파일로 이해할 수 있습니다.
3. 앤서블의 7가지 명령어
ansible을 설치한 후 ansible이 ansible, ansible-doc, ansible-galaxy, ansible-lint, ansible-playbook, ansible-pull, ansible-vault 등 총 7가지 지침을 제공한다는 사실을 발견했습니다. 여기서는 사용법 부분만 살펴보았으며, 자세한 부분은 "command -h" 방법을 통해 알 수 있다.
1. 앤서블
으아아아
Ansible은 명령의 핵심 부분으로 주로 임시 명령, 즉 단일 명령을 실행하는 데 사용됩니다. 기본적으로 호스트와 옵션 부분을 따라야 하며, 기본적으로 모듈을 지정하지 않은 경우에는 명령 모듈을 사용합니다. 예:
으아아아
단, 기본 모듈은 ansible.cfg에서 수정할 수 있습니다. ansible 명령 아래의 매개변수는 다음과 같이 설명됩니다.
- 매개변수:
- -a 'Arguments', --args='Arguments' 명령줄 매개변수
-
-m NAME, --module-name=NAME 실행 모듈의 이름은 기본적으로 명령 모듈이 사용되므로 단일 명령만 실행하는 경우에는 -m 매개 변수가 필요하지 않습니다. 🎜>
- -i PATH, --inventory=PATH는 인벤토리 호스트 파일의 경로를 지정하며 기본값은 /etc/ansible/hosts입니다.
- -u Username, --user=Username 실행 사용자, 현재 사용자 대신 이 원격 사용자 이름 사용
- -U --sud-user=SUDO_User sudo할 사용자, 기본값은 루트입니다
- -k --ask-pass 로그인 비밀번호, 키 기반 인증을 가정하는 대신 SSH 비밀번호 프롬프트
- -K --ask-sudo-pass는 sudo를 사용하여 비밀번호를 묻는 메시지를 표시합니다
- -s --sudo sudo run
- -S --su su 명령 사용
- -l --list 지원되는 모든 모듈을 표시합니다.
- -s --snippet은 스크립트 조각을 표시하는 모듈을 지정합니다.
- -f --forks=NUM 병렬 작업 수입니다. NUM은 정수로 지정되며 기본값은 5입니다. #ansible testhosts -a "/sbin/reboot" -f 10 testhosts 그룹의 모든 머신을 한 번에 10대씩 다시 시작
- --private-key=PRIVATE_KEY_FILE 개인 키 경로, 이 파일을 사용하여 연결을 확인하세요.
- -v --자세한 내용
- all은 호스트가 정의한 모든 호스트에 대해 을 실행합니다.
- -M MODULE_PATH, --module-path=MODULE_PATH 실행할 모듈의 경로, 기본값은 /usr/share/ansible/
- --list-hosts는 어떤 호스트가 이 플레이북 파일을 실행할지 인쇄만 하고 실제로 플레이북 파일을 실행하지는 않습니다.
- -o --한 줄 압축 출력, 요약된 출력을 한 줄에 출력해 보세요.
- -t Directory, --tree=Directory 이 출력 디렉터리에 내용을 저장하고 결과를 각 호스트의 파일에 저장합니다.
- -B 백그라운드 실행 시간 초과
- -P 백그라운드 프로그램 시간 조사
- -T 초, --timeout=초 단위의 시간
- -P NUM, --poll=NUM 몇 초마다 백그라운드 작업을 폴링합니다. 필수 - b
- -c Connection, --connection=사용할 연결 연결 유형입니다. 가능한 옵션은 paramiko(SSH), SSH 및 로컬입니다. 로컬은 주로 crontab이나 시작에 사용됩니다.
- --tags=TAGS 지정된 태그가 있는 작업만 실행 예: ansible-playbook test.yml --tags=copy 태그가 있는 작업만 실행 copy
- --list-hosts는 어떤 호스트가 이 플레이북 파일을 실행할지 인쇄할 뿐 실제 플레이북 파일을 실행하지는 않습니다.
- --list-tasks 실행될 모든 작업 나열
- -C, --check는 변경될 사항만 테스트하고 실제로 실행하지는 않고 가능한 변경 사항을 예측하려고 합니다.
- --syntax-check 스크립트의 구문 검사를 수행하지만 실행하지는 않습니다.
- -l SUBSET, --limit=SUBSET 선택한 호스트/그룹 모드를 추가로 제한합니다. --limit=192.168.0.15 이 IP만 실행합니다
- --skip-tags=SKIP_TAGS 이 값과 일치하지 않는 태그가 있는 플레이와 작업만 실행하세요. --skip-tags=copy_start
- -e EXTRA_VARS, --extra-vars=EXTRA_VARS 키=값 또는 YAML/JSON으로 설정된 추가 변수
- #cat update.yml
- ---
- - 호스트: {{ 호스트 }}
- 원격_사용자: {{ 사용자 }}
- ............
- #ansible-playbook update.yml --extra-vars "hosts=vipers user=admin" {{hosts}}, {{user}} 변수를 전달합니다. 호스트는 IP 또는 그룹 이름일 수 있습니다
- -l,--limit 지정된 호스트/그룹에서 작업 실행--limit=192.168.0.10, 192.168.0.11 또는 -l 192.168.0.10, 192.168.0.11 이 2개 IP에서만 작업 실행
2. 앤서블문서
# ansible-doc -h
Usage: ansible-doc [options] [module...]
该指令用于查看模块信息,常用参数有两个-l 和 -s ,具体如下:
- //列出所有已安装的模块
- # ansible-doc -l
-
//查看具体某模块的用法,这里如查看command模块
- # ansible-doc -s command
3、ansible-galaxy
# ansible-galaxy -h
Usage: ansible-galaxy [init|info|install|list|remove] [--help] [options] ...
ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。如下示例:
[root@localhost ~]# ansible-galaxy install aeriscloud.docker
- downloading role 'docker', owned by aeriscloud
- downloading role from https://github.com/AerisCloud/ansible-docker/archive/v1.0.0.tar.gz
- extracting aeriscloud.docker to /etc/ansible/roles/aeriscloud.docker
- aeriscloud.docker was installed successfully
这个安装了一个aeriscloud.docker组件,前面aeriscloud是galaxy上创建该模块的用户名,后面对应的是其模块。在实际应用中也可以指定txt或yml 文件进行多个组件的下载安装。这部分可以参看官方文档。
4、ansible-lint
ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml 。
5、ansible-playbook
该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作,这个后面会做为一个重点来讲。
6、ansible-pull
该指令使用需要谈到ansible的另一种模式---pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。这部分也会单独做一节来讲。
7、ansible-vault
ansible-vault主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 --ask-vault-pass参数,同样需要输入密码后才能正常执行。具体该部分可以参查官方博客。
注:上面七个指令,用的最多的只有两个ansible 和ansible-playbook ,这两个一定要掌握,其他五个属于拓展或高级部分。
위 내용은 Ansible 아키텍처 및 작동 원리 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!