술퍼먹고 집에가는길에 패북에 올렸던 글인듯...
구글 메모에 있길래 옮겨 놓아봄..
=====
바람이 분다
이런날이면
발은 그 길위에 있고
눈은 저 멀리 전선줄 없는 하늘과 지평선 너머 산을 바라본다
어렸을때 꿈이라는 단어가 뭔지도 몰랐다가
언제부턴가 꿈이 참 좋았고
지금은 그 꿈이 싫다
단어를 사전적 의미로 소비하던 30대 초반
꿈만 있으면 언젠가는 되겠지... 라는 막연함이
시간이 지나서
아무것도 하지 않으면 아무것도 없다는...
까미노에서 자주봤던
No pain no glory
No pain, no gain
로또를 맞으려면 로또를 사고 빌라는 명언
그런 시간이 지나고
꿈이란 단어는
적당한 이유로 "절대 하지 않겠다"는 의미로 해석 되어졌고
시간이 지나 이제
단어를 감성으로 소화하기위해 노력한다
.꿈.을 대체한 단어는 .소망.
꿈이나 소망이나
내가 무엇인가 하겠다는것 보다
기복의 의미가 큰 건 다를바 없겠지만
꿈보다 어쩐지 좀더 개인적인듯하고
꿈보다 어쩐지 좀더 소중한 느낌이랄까
바람이 부는날이면
경계의 끝자락에서서 기다리다
아니 오셨던듯이
사뿐이 날려갈 날을 기다린다.
2017년 8월 22일 화요일
2017년 8월 10일 목요일
지랄지랄
.지랄지랄.
박근혜탄핵되면
나라가 망한다고 지랄지랄
나라가 망한다고 지랄지랄
(요즘 기사와 비리들 보면서 태극기들던 인종중에 쪽팔려서 말 못하고 있는 세끼들
숨어 있는거 안다.
어깨 펴라 씨발
살다보면 병신짓도 가끔 하는거다
탄핵했으니 이제 구속시켜서 늙어죽는꼴을 본다면 나라가 좀 망해도 참을 수 있다)
숨어 있는거 안다.
어깨 펴라 씨발
살다보면 병신짓도 가끔 하는거다
탄핵했으니 이제 구속시켜서 늙어죽는꼴을 본다면 나라가 좀 망해도 참을 수 있다)
김상조 공정위원장 뽑으면
나라가 망할꺼라고 지랄지랄
나라가 망할꺼라고 지랄지랄
(개사이다... 존경합니다. 꼭 4대기업 특히 삼성 현대는 정상적인 회사가 되도록 해주세요
이 섹히들 때문에 중소기업을 못 다니겠어요)
이 섹히들 때문에 중소기업을 못 다니겠어요)
사대강보(라쓰고 댐이라고읽는다) 열면
가뭄, 홍수로 망한다고 지랄지랄
가뭄, 홍수로 망한다고 지랄지랄
(이건뭔....생각좀 하고 말좀 하자...MB야 언넝 나온나)
국정원 민간사찰 조사하겠다니
주사파가 나라말아먹는다고 지랄지랄
주사파가 나라말아먹는다고 지랄지랄
(한나라때도 선거때면 운동권이라고 하던놈들
특히 따먹문수같은 인종들 니들이 다 말아먹은 나라 살리느라 지금 이 고생이다)
특히 따먹문수같은 인종들 니들이 다 말아먹은 나라 살리느라 지금 이 고생이다)
삼성이 망하면
나라가 망한다고 지랄지랄
나라가 망한다고 지랄지랄
(회장 구속되면 주가가 오른다
삼성전자는 수원단지 공장들 이미 베트남등으로 옮긴지 한참이고
삼성전자는 수원단지 공장들 이미 베트남등으로 옮긴지 한참이고
SDS는 자체 사업이라고는 할 줄 모르니 중소기업 파이 뺏아 먹느라 정신이 없다)
최저임금 올리면
기업이 다 떠나 나라가 망한다고 지랄지랄
(이전 준비 몇 년동안 하다가 임금올라서 회사가 떠난다고 개구라 치는 놈들 좀 잡아 넣어라)
기업이 다 떠나 나라가 망한다고 지랄지랄
(이전 준비 몇 년동안 하다가 임금올라서 회사가 떠난다고 개구라 치는 놈들 좀 잡아 넣어라)
건보지원 확대 한다니
건보돈 다써서 망한다고 지랄지랄
건보돈 다써서 망한다고 지랄지랄
(언제부터 사보험-실비보험-들었는지 기억은 하냐 이명박때부터다
그전에 실비보험이 뭔지나 알았냐
정신좀 차려랴 보장범위확대 하고
대기업 실비보험에 꼴아박는 돈의 반만 내면 건강보험 걱정 없다)
그전에 실비보험이 뭔지나 알았냐
정신좀 차려랴 보장범위확대 하고
대기업 실비보험에 꼴아박는 돈의 반만 내면 건강보험 걱정 없다)
이 개종자세끼들은
주둥아리 지랄 말고는 할 줄 아는게 없는게 확실하다
.
2017년 6월 22일 목요일
ATOM기반으로 Ansible개발환경 설정하기
앞서 Eclpise기반으로 yml을 편집하고 런쳐로 실행하는 포스팅을 올렸다.
https://yckwon2nd.blogspot.kr/2017/03/ansible.html
근데 오타 대마왕인 나로써는 코드 코디네이터(자동완성기능같은...)가 꼭 필요한데
Eclipse에서 찾을 수 가 없더라고....
그래서 혹시나 ATOM을 뒤져 봤더니 대박!
그것 뿐 아니라 Syntax checker까지 다 나와있다... 이미 몇 년전 부터 -.-;;
그래서 ATOM을 기반으로 Ansible playbook 개발과 실행을 위한 환경을 구성해 보았다.
https://yckwon2nd.blogspot.kr/2017/03/ansible.html
근데 오타 대마왕인 나로써는 코드 코디네이터(자동완성기능같은...)가 꼭 필요한데
Eclipse에서 찾을 수 가 없더라고....
그래서 혹시나 ATOM을 뒤져 봤더니 대박!
그것 뿐 아니라 Syntax checker까지 다 나와있다... 이미 몇 년전 부터 -.-;;
그래서 ATOM을 기반으로 Ansible playbook 개발과 실행을 위한 환경을 구성해 보았다.
2017년 4월 30일 일요일
지름신이 강림하사 (IKEA Workstation, LG 34인치 울트라와이드 34UM59)
질렀다
모니터...21인치가 인생 가장 큰 모니터였던 내가
까이꺼 함 질러보지뭐! 하고 확 질러주셨음
잘팔려서 그런지 내가 원하는 기종(34UM59)은 시장에서 품절
4월 중순 예약 주문하고 4월 28일 배송 시작 29일 배송이 되었다
우아...박스 사이즈봐라....깡패내 ㅋㅋ
모니터를 질러놓고 보니 다이닝테이블인 내 책상이..... 꺼떡꺼떡 거리는 불안한 나무 다리를 보다가 아침에 눈뜨자 마자 이케아로 달려갔다(집이 안양...광명 이케아 차몰고 15분)
집에와서 풀어 놓고 보니
어쩔.....
이거 혼자 어케 만들지....
그래도 한다.
2시간 정도 걸려서 조립후 내 방에 밀어넣었다
양쪽으로 날개가 달렸는데 폭이 180이라 한쪽으로 몰아서 붙였다는
사이즈가 이 방에 딱이다!!
34UM59는 사이즈로 이야기 하면 27인치 모니터를 두개 이어 놓은 사이즈로
높이는 그리 높지 않다
만약 32인치 모니터라면 사진 처럼 안들어가고 아래쪽 페널을 제거하고 올려놓아야 할 듯
여하간 대략 올려두고 PC도 아래쪽에 밀어 넣어놓고 보니 간지는 작렬한다
(자...이제 대체 뭘 할꺼냐????)
참고로 이케아 워크스테이션 아래쪽에는 좌 우로 물건을 올릴 수 있는 자리가 있다.
PC를 올리라고 해놓은 것으로 보이고
5.1 체널 우퍼를 왼쪽에 올리고
우측에 PC를 넣는데....... ㅠ.ㅠ
공간이 높이 50Cm
PC케이스가 50Cm 상단 배기팬이 있고 전원이 위쪽에 있음...
넣을 수 는 있는데 전원을 켤 수 가 없음...
포기하고 그냥 바닥에 놓고 선방에는 허브와 뭐...잡다구리한거 대충 던져놓고 셋팅 끝
지금 이 포스팅을 하는데도 모니터의 어마무시한 사이즈가 적응이 잘 안됨 ^^;;
우측을 보려면 고개가 돌아감
제공하는 어플을 깔면 PIP나 화면 분할(기본 밝기, 명도등은 당연히 조정됨)이 지원되는데
동영상 편집작업과 뭐 몇가지 하다보니 처음 써봐서 그런지 살짝 당혹(?)스럽지만
넓은 화면에 대충 던져 놓는것 보다 알아서 들러붙는 기능이 상당히 편한듯 함
고장만 나지말고 백년 만년 쓰자꾸나 ^^;;
아래는 조립과정 동영상
모니터...21인치가 인생 가장 큰 모니터였던 내가
까이꺼 함 질러보지뭐! 하고 확 질러주셨음
잘팔려서 그런지 내가 원하는 기종(34UM59)은 시장에서 품절
4월 중순 예약 주문하고 4월 28일 배송 시작 29일 배송이 되었다
우아...박스 사이즈봐라....깡패내 ㅋㅋ
모니터를 질러놓고 보니 다이닝테이블인 내 책상이..... 꺼떡꺼떡 거리는 불안한 나무 다리를 보다가 아침에 눈뜨자 마자 이케아로 달려갔다(집이 안양...광명 이케아 차몰고 15분)
모니터와 IKEA Fredde Workstation 책상 |
어쩔.....
이거 혼자 어케 만들지....
그래도 한다.
아놔... |
2시간 정도 걸려서 조립후 내 방에 밀어넣었다
양쪽으로 날개가 달렸는데 폭이 180이라 한쪽으로 몰아서 붙였다는
사이즈가 이 방에 딱이다!!
무게가 예술임.... |
일단 모니터와 놋북부터 올려봄 |
높이는 그리 높지 않다
만약 32인치 모니터라면 사진 처럼 안들어가고 아래쪽 페널을 제거하고 올려놓아야 할 듯
AMD 설정 59를 산 이유가 AMD FreeSync 기능때문이였는데... 뭐가 문제인지 지원안함으로 나온다.... 해결해야지.... |
(자...이제 대체 뭘 할꺼냐????)
참고로 이케아 워크스테이션 아래쪽에는 좌 우로 물건을 올릴 수 있는 자리가 있다.
PC를 올리라고 해놓은 것으로 보이고
5.1 체널 우퍼를 왼쪽에 올리고
우측에 PC를 넣는데....... ㅠ.ㅠ
공간이 높이 50Cm
PC케이스가 50Cm 상단 배기팬이 있고 전원이 위쪽에 있음...
넣을 수 는 있는데 전원을 켤 수 가 없음...
포기하고 그냥 바닥에 놓고 선방에는 허브와 뭐...잡다구리한거 대충 던져놓고 셋팅 끝
지금 이 포스팅을 하는데도 모니터의 어마무시한 사이즈가 적응이 잘 안됨 ^^;;
우측을 보려면 고개가 돌아감
제공하는 어플을 깔면 PIP나 화면 분할(기본 밝기, 명도등은 당연히 조정됨)이 지원되는데
동영상 편집작업과 뭐 몇가지 하다보니 처음 써봐서 그런지 살짝 당혹(?)스럽지만
넓은 화면에 대충 던져 놓는것 보다 알아서 들러붙는 기능이 상당히 편한듯 함
고장만 나지말고 백년 만년 쓰자꾸나 ^^;;
아래는 조립과정 동영상
2017년 3월 29일 수요일
Ansible 개발환경 구성하기
언제까지 vi로 시커먼데서 스페이스로 줄 맞춰가며 yml파일을 만들껀가!!!!
이번에는 좀 간지나게 playbook을 만들기위해 eclipse를 사용해 보도록 하자
개발자면 깔린 eclipse가 있을것이니 플러그인 몇 개 깔면 될것이고
취향에 따라 여러가지가 있으니 알아서 하시면 됨...
여기서는 잘 모르고 일단 시작할때 어떻게 하는것인가 정도로 참고하시면 되겠음.
가벼운거 좋아하심 edit+ 쓰시덩가 딴지걸지 말자 (개발환경운 개취임)
1. eclipse 설치
https://www.eclipse.org/downloads
아무거나 받아서 깔자 나는 최신판으로 받았더니 neon 이라는 버젼이 떨어졌다.
몇 년만에 이클립스인지 몰것다...
2. eclipse plugin설치
이클립스는 기본 설치만 하면 그냥 편집기 수준이다.
내가 java 개발자면 거기에 맞춰서 다른 언어 개발자라면 또 거기에 맞춰서....
힙분석이나 UML 에디터로 사용할 수 도 있다.
플러그인을 뭘 쓰고 얼마나 익숙한지가 관건이므로
회사마다 개발조직마다의 암묵적인 룰이 있을 것으로 안다.
아래 플러그인은 꼭 써야 하는게 아니라
개발환경의 편의성증대(생산성)를 위한 것이므로 그저 참고만 하도록 하자
(잘 몰것으면 그냥 찾아서 깔아주자)
플러그인은 아래 링크를 클릭해 들어가서 검색후 설치하면 된다.
https://marketplace.eclipse.org
Eclipse Runner - for grouping of Run configurations ansible-playbook으로 yml을 런칭하기위해 사용한다.
Grep Console - for log output highlighting 출력결과 보기 편하라고
Shell Script (DLTK) - shell 스크립트 editor도 하나 깔자 쉘스크립트 편집기
YEdit - for YAML syntax highlighting yml 파일 편집기
PyDev - Python IDE (if you want to develop custom Python modules or dig into Ansible core) 파이선편집
세상좋아졌다.
마켓 플레이스에 접속해서 install 이라는 링크를 끌어서
이클립스 작업공간에 드랍하면 설치된다 0.0!!!
리파지토리 추가하고 뭐하고뭐하고 하니라 삽질하고 하얗게 밤새던 그때가...지랄....
3. 공개된 sample을 받아와서 참고하도록 하자
뭐 해본적이 없는 사람이 가장 빠르게 뭔갈 하는방법(?)은 일단 샘플보고 연습하는것 아니겠는가
조금씩 하다 보면 참고하고 배끼기 위해서라도 샘플 정도는 한세트 받아서 참고하도록 하자
좀 간지나게 git으로 함 빨아보기로 했다.
https://github.com/ansible/ansible-examples/ 사이트에 제공하는 셈플이 있으므로
git으로 빨아서 내 작업공간에 저장하도록 한다.
yckwon@yckwonS440 ~/work/git $ git clone https://github.com/ansible/ansible-examples/ ~/work/git/ansible-examples/
Cloning into '/home/yckwon/work/git/ansible-examples'...
remote: Counting objects: 3190, done.
remote: Total 3190 (delta 0), reused 0 (delta 0), pack-reused 3189
Receiving objects: 100% (3190/3190), 16.25 MiB | 124.00 KiB/s, done.
Resolving deltas: 100% (1105/1105), done.
Checking connectivity... done.
!! 혹시 git이 안갈렸다면 아래와 같이 설치한다.
yckwon@yckwonS440 ~/work/git $ sudo apt install git
4. 이클립스에 샘플 등록 및 창 추가
별건 아니고 이클립스에 받은 셈플을 프로젝트로 등록해서 필요할때 열어 볼 수 있도록 하자
아래순서를 참고해서 이클립스의 메뉴를 열어서 프로젝트를 만들고
참고로 git로 연결되어 있으면 이리저리 번거러우므로 연결을 끊는 작업까지 하도록 하자
File -> New -> Project
General -> Project
Project name: ansible-examples (그냥 맘대로 정하자)
Uncheck "Use default location" and select directory with ansible-examples sources (/.../ansible-examples)
왼쪽에 project가 추가되고 git과 연결되었다고 파란색 표시가 있을 것이다.
그 다음에
Right-Click on the project -> Team -> Disconnect <== git원본과 연결을 끊어준다...난 다 망쳐버릴꺼니까 ㅋㅋ
앞서 설치한 플러그인 창도 보이도록 하자 (깔아놓고 안보면 뭐하러 까나)
Window -> Show View -> Other.. > General -> Runner
Window -> Show View -> Console
쪼끔 다르겠지만 아래같이 왼쪽에는 프로젝트 가운데는 코드
(yml을 클릭해서 열면 색으로 구분-하일라이팅-되면 yedit가 잘 먹은거다)
아래쪽 창에 runner 와 console이 보이면 대충 된거다
혹시나 아직 ansible이 설치되어 있지도 않다면 아래처럼 그냥 깔믄된다.
Ansible설치 (난 민트리눅스라)
#sudo apt install ansible
5.eclipse Runner plugin에 Ansible 실행환경 등록
ansible-playbook이 실행(?)시키는 yml 파일은 일반적인 실행 파일이나 java APP 아니므로
런쳐(ansible-playbook)과 연결하여 실행할 수 있도록 구성을 추가해야한다.
이 런쳐는 playbook을 만들때 마다 이하나씩 만들어줘야 이클립스에서 play 버튼을 눌러서 쉽게 테스트 할 수 있다.
물론 이렇게 안하고 eclips에서는 편집만 하고 쉘에서 직접 돌려도 아무상관없다....
편하게 살자고....편하게...
아래 메뉴로 접근 하여 런쳐를 추가한다.
Run -> External Tools -> External Tools Configurations -> Program(우클릭하면 new나온다) -> New launch configuration
런쳐에 내가 실행시킬 플레이북을 돌릴 수 있도록 설정을 추가한다.
location : /usr/bin/ansible-playbook (ansible-palybook 명령어 위치 )
working Directory : ${workspace_loc:/Ansible-Examples/jboss-eap7-standalone} (ansible project 위치 )
변수처리된 path가 해깔리면 그냥 하드코딩 해도 된다. 내경우
/home/yckwon/work/git/ansible-examples/jboss-eap7-standalone 이다.
Arguments : ${workspace_loc:/Ansible-Examples/jboss-eap7-standalone/site.yml} -i hosts -u jboss -v
-i 옵션이 없으면 기본으로 /etc/ansible/hosts 파일을 참고한다
-u 대상 서버에 접근할때 사용할 계정정보를 fix했다. 없으면 hosts파일에 넣어도 되고 playbook에서 지정할 수 도 있다.
-v 수행결과가 상세하게 출력되도록
이렇게 하면 화면에서 play 버튼을 누르면 수행이 되고 결과는 앞서 설치한 console 플러그인 윈도우로 출력된다.
위에 주황색으로 표시한 부분은 playbook 연습시에 실제 eclipse project의 폴더명과 같아야 한다는 것을 강조하려고...
안맞으면 당근 site.yml을 못찾아서 실행이 안될것이다.
일단 개발환경 설정하는건 이정도 까지 하고
다음에는 ad hoc으로 날리던 간단한 명령들을 playbook으로 만들어 돌려보고
작업이 복잡해 지면 task의 재 사용성을 높이고
표준화된 환경을 사용하기 위해 role로 task들을 쪼개서 사용하는 연습을 해보자
.이상
이번에는 좀 간지나게 playbook을 만들기위해 eclipse를 사용해 보도록 하자
개발자면 깔린 eclipse가 있을것이니 플러그인 몇 개 깔면 될것이고
취향에 따라 여러가지가 있으니 알아서 하시면 됨...
여기서는 잘 모르고 일단 시작할때 어떻게 하는것인가 정도로 참고하시면 되겠음.
가벼운거 좋아하심 edit+ 쓰시덩가 딴지걸지 말자 (개발환경운 개취임)
1. eclipse 설치
https://www.eclipse.org/downloads
아무거나 받아서 깔자 나는 최신판으로 받았더니 neon 이라는 버젼이 떨어졌다.
몇 년만에 이클립스인지 몰것다...
2. eclipse plugin설치
이클립스는 기본 설치만 하면 그냥 편집기 수준이다.
내가 java 개발자면 거기에 맞춰서 다른 언어 개발자라면 또 거기에 맞춰서....
힙분석이나 UML 에디터로 사용할 수 도 있다.
플러그인을 뭘 쓰고 얼마나 익숙한지가 관건이므로
회사마다 개발조직마다의 암묵적인 룰이 있을 것으로 안다.
아래 플러그인은 꼭 써야 하는게 아니라
개발환경의 편의성증대(생산성)를 위한 것이므로 그저 참고만 하도록 하자
(잘 몰것으면 그냥 찾아서 깔아주자)
플러그인은 아래 링크를 클릭해 들어가서 검색후 설치하면 된다.
https://marketplace.eclipse.org
Eclipse Runner - for grouping of Run configurations ansible-playbook으로 yml을 런칭하기위해 사용한다.
Grep Console - for log output highlighting 출력결과 보기 편하라고
Shell Script (DLTK) - shell 스크립트 editor도 하나 깔자 쉘스크립트 편집기
YEdit - for YAML syntax highlighting yml 파일 편집기
PyDev - Python IDE (if you want to develop custom Python modules or dig into Ansible core) 파이선편집
세상좋아졌다.
마켓 플레이스에 접속해서 install 이라는 링크를 끌어서
이클립스 작업공간에 드랍하면 설치된다 0.0!!!
리파지토리 추가하고 뭐하고뭐하고 하니라 삽질하고 하얗게 밤새던 그때가...지랄....
3. 공개된 sample을 받아와서 참고하도록 하자
뭐 해본적이 없는 사람이 가장 빠르게 뭔갈 하는방법(?)은 일단 샘플보고 연습하는것 아니겠는가
조금씩 하다 보면 참고하고 배끼기 위해서라도 샘플 정도는 한세트 받아서 참고하도록 하자
좀 간지나게 git으로 함 빨아보기로 했다.
https://github.com/ansible/ansible-examples/ 사이트에 제공하는 셈플이 있으므로
git으로 빨아서 내 작업공간에 저장하도록 한다.
yckwon@yckwonS440 ~/work/git $ git clone https://github.com/ansible/ansible-examples/ ~/work/git/ansible-examples/
Cloning into '/home/yckwon/work/git/ansible-examples'...
remote: Counting objects: 3190, done.
remote: Total 3190 (delta 0), reused 0 (delta 0), pack-reused 3189
Receiving objects: 100% (3190/3190), 16.25 MiB | 124.00 KiB/s, done.
Resolving deltas: 100% (1105/1105), done.
Checking connectivity... done.
!! 혹시 git이 안갈렸다면 아래와 같이 설치한다.
yckwon@yckwonS440 ~/work/git $ sudo apt install git
4. 이클립스에 샘플 등록 및 창 추가
별건 아니고 이클립스에 받은 셈플을 프로젝트로 등록해서 필요할때 열어 볼 수 있도록 하자
아래순서를 참고해서 이클립스의 메뉴를 열어서 프로젝트를 만들고
참고로 git로 연결되어 있으면 이리저리 번거러우므로 연결을 끊는 작업까지 하도록 하자
File -> New -> Project
General -> Project
Project name: ansible-examples (그냥 맘대로 정하자)
Uncheck "Use default location" and select directory with ansible-examples sources (/.../ansible-examples)
왼쪽에 project가 추가되고 git과 연결되었다고 파란색 표시가 있을 것이다.
그 다음에
Right-Click on the project -> Team -> Disconnect <== git원본과 연결을 끊어준다...난 다 망쳐버릴꺼니까 ㅋㅋ
앞서 설치한 플러그인 창도 보이도록 하자 (깔아놓고 안보면 뭐하러 까나)
Window -> Show View -> Other.. > General -> Runner
Window -> Show View -> Console
쪼끔 다르겠지만 아래같이 왼쪽에는 프로젝트 가운데는 코드
(yml을 클릭해서 열면 색으로 구분-하일라이팅-되면 yedit가 잘 먹은거다)
아래쪽 창에 runner 와 console이 보이면 대충 된거다
혹시나 아직 ansible이 설치되어 있지도 않다면 아래처럼 그냥 깔믄된다.
Ansible설치 (난 민트리눅스라)
#sudo apt install ansible
5.eclipse Runner plugin에 Ansible 실행환경 등록
ansible-playbook이 실행(?)시키는 yml 파일은 일반적인 실행 파일이나 java APP 아니므로
런쳐(ansible-playbook)과 연결하여 실행할 수 있도록 구성을 추가해야한다.
이 런쳐는 playbook을 만들때 마다 이하나씩 만들어줘야 이클립스에서 play 버튼을 눌러서 쉽게 테스트 할 수 있다.
물론 이렇게 안하고 eclips에서는 편집만 하고 쉘에서 직접 돌려도 아무상관없다....
편하게 살자고....편하게...
아래 메뉴로 접근 하여 런쳐를 추가한다.
Run -> External Tools -> External Tools Configurations -> Program(우클릭하면 new나온다) -> New launch configuration
런쳐에 내가 실행시킬 플레이북을 돌릴 수 있도록 설정을 추가한다.
location : /usr/bin/ansible-playbook (ansible-palybook 명령어 위치 )
working Directory : ${workspace_loc:/Ansible-Examples/jboss-eap7-standalone} (ansible project 위치 )
변수처리된 path가 해깔리면 그냥 하드코딩 해도 된다. 내경우
/home/yckwon/work/git/ansible-examples/jboss-eap7-standalone 이다.
Arguments : ${workspace_loc:/Ansible-Examples/jboss-eap7-standalone/site.yml} -i hosts -u jboss -v
-i 옵션이 없으면 기본으로 /etc/ansible/hosts 파일을 참고한다
-u 대상 서버에 접근할때 사용할 계정정보를 fix했다. 없으면 hosts파일에 넣어도 되고 playbook에서 지정할 수 도 있다.
-v 수행결과가 상세하게 출력되도록
이렇게 하면 화면에서 play 버튼을 누르면 수행이 되고 결과는 앞서 설치한 console 플러그인 윈도우로 출력된다.
위에 주황색으로 표시한 부분은 playbook 연습시에 실제 eclipse project의 폴더명과 같아야 한다는 것을 강조하려고...
안맞으면 당근 site.yml을 못찾아서 실행이 안될것이다.
일단 개발환경 설정하는건 이정도 까지 하고
다음에는 ad hoc으로 날리던 간단한 명령들을 playbook으로 만들어 돌려보고
작업이 복잡해 지면 task의 재 사용성을 높이고
표준화된 환경을 사용하기 위해 role로 task들을 쪼개서 사용하는 연습을 해보자
.이상
2017년 3월 28일 화요일
Ansible Ad Hoc 해보기
Ansible Ad Hoc 해보기 (모듈의 기본적인 사용)
먼저 글에서 이야기 했듯이
Ansible Tower를 운영(단순사용자말고)하려면
Ansible 명령어의 구문을 어느정도 익히고 미리 제공되는 module에 조금 익숙해야 한다
모듈 안쓰고 그냥 쉘로 주구장창 날려서 처리 할 수 있으나
이렇게 되면 멱등성(?) 이나 반영전 테스트에 번거로움이 많을것 같다
일단 이 글에서는 Ansible을 깔고
가장먼서 CLI에서 몇가지 module로 작업하는 예를 수행해봤다.
Ansible을 보면 Ad Hoc(에드혹)이라는것이 나오는데...
간단하게 이야기 해서 /etc/ansible/hosts 에 나열된 서버들에 대해서
원격지 명령을 보냄과 같다
AdHoc "특별한 목적을 위해 " 라는 뜻의 라틴어인데
네떡(network)에서 사용하더니 요즘은 이쪽에서도 쓴다
그냥 있던 단어 쓰면되지....
그냥 작업중에 별도의 일을 하기 위해 명령어를 날리는 것이고
여기서는 터미널 상에서 명령어 날리는 것이라고 이해 하자
아래 처럼 3개의 서버 리스트를 만들고 그룹명을 testserver 라고 지었다면
[testserver]
192.168.56.10 : ansible tower 설치
192.168.56.11 : node1
192.168.56.12 : node2
일단 ls를 해보자
단일 서버에는
[jboss@rockplace .ssh]$ ansible 192.168.56.11 -a "ls -al" <== 요래 보내면
192.168.56.11 | SUCCESS | rc=0 >>
합계 28
drwx------. 16 jboss jboss 4096 3월 27 14:45 .
drwxr-xr-x. 3 root root 19 3월 22 15:12 ..
-rw-------. 1 jboss jboss 930 3월 27 13:15 .ICEauthority
drwx------. 3 jboss jboss 17 3월 27 14:08 .ansible
...
요런식으로 출력된다
그룹단위로 몽땅 보낼꺼면
[jboss@rockplace .ssh]$ ansible testserver -a "ls -al"
192.168.56.11 | SUCCESS | rc=0 >>
합계 28
...
192.168.56.12 | SUCCESS | rc=0 >>
합계 28
...
192.168.56.10 | SUCCESS | rc=0 >>
합계 56
요런식으로 나온다
잠시 딴 이야기로
각 호스트에 대한 명령은 병렬로 처리되는데(전체 또는 그룹단위로실행하는경우)
동시에 몇 개까지 처리할것인지의 갯수를 fork 라고 한다
아래 config 파일에서 기본값이 수정 가능하다. 주석되어 있으나 기본 5개로 처리한다.
/etc/ansible/ansible.cfg
#forks = 5
os에서 Process를 구동하는것을 fork라고 하고 유사한 개념에서
ansible 명령어를 여러 서버에 전달할때 동시에 몇 개까지 수행할(보낼)지를 지정한다
이 fork갯수는 ansible server(ansible tower)의 처리 속도와 관계가 있다고 하겠다
물론 fork 갯수를 많이 하면 수행하는 Ansible server의 부하가 높아지므로 자원량에 따라 적절히 조정해야 하겠다 (5개는 너무 작다 WAS 서버 30대를 동시에 처리하면 30개 이상 잡아야하겠다)
또한
Multi Process로 fork 되어 수행되므로 수행 할 때 마다 먼저 처리되는 서버의 응답이 먼저 출력된다
hosts 파일에 10.11.12 순으로 있다고 그 순서대로 결과가 나오는게 아니다
여하간 이런식으로 간단히 명령어를 날릴 수 있다
만약 쉘로 짠다면
for node in 10 11 12
do
ssh 192.168.56.$node "ls -al"
done
뭐 이렇게 되겠다. 별 차이 없어 보이겠지만 업무가 복잡해지면(조건) 엄청나게 코드에서 차이가 발생한다
Ansible은 보시다시피 상당히 간결하게 된다
단순한 명령어가 이정도 이고 좀더 복잡한 작업을 단순화 하기 위해
모듈이라는 개념이 사용된다
만약 파일을 원격지의 다수의 서버에 복사한다고 치면
Shell)
#scp /tmp/file.txt jboss@192.168.56.10:/home/jboss
#scp /tmp/file.txt jboss@192.168.56.11:/home/jboss
#scp /tmp/file.txt jboss@192.168.56.12:/home/jboss
Ansible)
#ansible testserver -m copy -a "src=/tmp/file.txt dest=/home/jboss"
한줄로 끝난다.
여기서 -m 옵션이 module을 의미하고 Ansible에 이미 정의된 여러 모듈중에서 copy 모듈을 사용한다는 의미가 되겠다
만약 파일을 복사하고 권한을 755로 변경하고 오너 및 그룹을 변경하기 위한 작업은 어찌될까
Shell)
#scp /tmp/file.txt jboss@192.168.56.10:/home/jboss
#scp /tmp/file.txt jboss@192.168.56.11:/home/jboss
#scp /tmp/file.txt jboss@192.168.56.12:/home/jboss
#ssh jboss@192.168.56.10 "chmod 755 /home/jboss/file.txt;chown jboss:jboss home/jboss/file.txt"
#ssh jboss@192.168.56.11 "chmod 755 /home/jboss/file.txt;chown jboss:jboss home/jboss/file.txt""
#ssh jboss@192.168.56.12 "chmod 755 /home/jboss/file.txt;chown jboss:jboss home/jboss/file.txt""
Ansible) - copy, file module 사용
#ansible testserver -m copy -a "src=/tmp/file.txt dest=/home/jboss"
#ansible testserver -m file -a "dest=/home/jboss/file.txt mode=755 owner=jboss group=jboss"
점점 차이가 나는것을 알 수 있다.
물론 쉘을 루프를 걸면 되겠지만 로직을 짜는것 자체가 공수(Ansible에는 이미 제공되는 모듈에서 이 부분을 커버한다)이고
이때 발생할 수 있는 오타.... 로지컬한 실수...
특히나 쉘의 경우 상용에 테스트를 해볼 수 없으니 별도의 서버에 한번쯤 돌려보는 수고를 해야 겠으나
ansible에서는 -C (or --check) 옵션을 포함하여 간단하게 수행이 가능하다
(나중에 알겠지만 shell 모듈이 있다.
모듈을 쓰지 않고 직접 쉘명령을 사용하는경우 주의해야 한다.
모듈은 테스트가 가능하지만 쉘명령은 실행 되면 그냥 반영되버릴 수 있다.)
#ansible testserver -C -m copy -a "src=/tmp/file.txt dest=/tmp" <== 되는지 테스트
#ansible testserver -m copy -a "src=/tmp/file.txt dest=/tmp" <==실제 복사
#ansible testserver --check -m file -a "dest=/tmp/file.txt mode=755 owner=jboss group=jboss"
테스트 결과는 아래와 같이 출력된다.
192.168.56.10 | SUCCESS => {
"changed": true,
"gid": 1000,
"group": "jboss",
"mode": "0664",
"owner": "jboss",
"path": "/tmp/file.txt",
"secontext": "unconfined_u:object_r:user_tmp_t:s0",
"size": 4,
"state": "file",
"uid": 1000
}
#ansible testserver -m file -a "dest=/tmp/file.txt mode=755 owner=jboss group=jboss"
실제 반영된 결과는
192.168.56.10 | SUCCESS => {
"changed": true,
"gid": 1000,
"group": "jboss",
"mode": "0755",
"owner": "jboss",
"path": "/tmp/file.txt",
"secontext": "unconfined_u:object_r:user_tmp_t:s0",
"size": 4,
"state": "file",
"uid": 1000
}
이제 마무리로 ... 모든 모듈을 나열 할 수도 의미도 없으니 기본 모듈은 아래 URL에서 확인할 수 있다
별별 모듈이 다있는데
예를 들어 L7장비인 Big-IP F5에 원격으로 붙어서 그룹을 제어하거나...하는짓(?) 도 할 수 있다.
Module Index
http://docs.ansible.com/ansible/modules_by_category.html
위 예 이외에 몇가지 기본 사용법은 아래를 참고한다.
다양한 모듈을 쓰지 않고 shell모듈 하나만 가지고..
또는 쌩으로 쉘스크립트를 날려서 처리할 수 있지만
Ansible의 자동화 기능을 잘 사용하기 위해서는 어느정도 module에 대한 이해가 필요하니
처음부터 끝까지 읽어보라기 보다는
지금 내가 하는 작업을 ansible로 몇가지 해보면 금방 적을 될 듯 하다.
또한 모듈이 기본 기능이라면
이미 사전정의된 작업파일을 템플릿으로 제공하고 있다. (ansible galaxy)
요건 다음에 공부해보자....
Ansible 타워는 언제하냐.... ㅋ상ㅋ 뭘 알아야 태워서 돌려보지
막 그냥 돌리는건 메뉴얼보고 하면 되기는 하는데....
기본은 어느정도 봐야 하지 않겠내 싶어서 바닥부터 간다
.이상
먼저 글에서 이야기 했듯이
Ansible Tower를 운영(단순사용자말고)하려면
Ansible 명령어의 구문을 어느정도 익히고 미리 제공되는 module에 조금 익숙해야 한다
모듈 안쓰고 그냥 쉘로 주구장창 날려서 처리 할 수 있으나
이렇게 되면 멱등성(?) 이나 반영전 테스트에 번거로움이 많을것 같다
일단 이 글에서는 Ansible을 깔고
가장먼서 CLI에서 몇가지 module로 작업하는 예를 수행해봤다.
Ansible을 보면 Ad Hoc(에드혹)이라는것이 나오는데...
간단하게 이야기 해서 /etc/ansible/hosts 에 나열된 서버들에 대해서
원격지 명령을 보냄과 같다
AdHoc "특별한 목적을 위해 " 라는 뜻의 라틴어인데
네떡(network)에서 사용하더니 요즘은 이쪽에서도 쓴다
그냥 있던 단어 쓰면되지....
그냥 작업중에 별도의 일을 하기 위해 명령어를 날리는 것이고
여기서는 터미널 상에서 명령어 날리는 것이라고 이해 하자
아래 처럼 3개의 서버 리스트를 만들고 그룹명을 testserver 라고 지었다면
[testserver]
192.168.56.10 : ansible tower 설치
192.168.56.11 : node1
192.168.56.12 : node2
일단 ls를 해보자
단일 서버에는
[jboss@rockplace .ssh]$ ansible 192.168.56.11 -a "ls -al" <== 요래 보내면
192.168.56.11 | SUCCESS | rc=0 >>
합계 28
drwx------. 16 jboss jboss 4096 3월 27 14:45 .
drwxr-xr-x. 3 root root 19 3월 22 15:12 ..
-rw-------. 1 jboss jboss 930 3월 27 13:15 .ICEauthority
drwx------. 3 jboss jboss 17 3월 27 14:08 .ansible
...
요런식으로 출력된다
그룹단위로 몽땅 보낼꺼면
[jboss@rockplace .ssh]$ ansible testserver -a "ls -al"
192.168.56.11 | SUCCESS | rc=0 >>
합계 28
...
192.168.56.12 | SUCCESS | rc=0 >>
합계 28
...
192.168.56.10 | SUCCESS | rc=0 >>
합계 56
요런식으로 나온다
잠시 딴 이야기로
각 호스트에 대한 명령은 병렬로 처리되는데(전체 또는 그룹단위로실행하는경우)
동시에 몇 개까지 처리할것인지의 갯수를 fork 라고 한다
아래 config 파일에서 기본값이 수정 가능하다. 주석되어 있으나 기본 5개로 처리한다.
/etc/ansible/ansible.cfg
#forks = 5
os에서 Process를 구동하는것을 fork라고 하고 유사한 개념에서
ansible 명령어를 여러 서버에 전달할때 동시에 몇 개까지 수행할(보낼)지를 지정한다
이 fork갯수는 ansible server(ansible tower)의 처리 속도와 관계가 있다고 하겠다
물론 fork 갯수를 많이 하면 수행하는 Ansible server의 부하가 높아지므로 자원량에 따라 적절히 조정해야 하겠다 (5개는 너무 작다 WAS 서버 30대를 동시에 처리하면 30개 이상 잡아야하겠다)
또한
Multi Process로 fork 되어 수행되므로 수행 할 때 마다 먼저 처리되는 서버의 응답이 먼저 출력된다
hosts 파일에 10.11.12 순으로 있다고 그 순서대로 결과가 나오는게 아니다
여하간 이런식으로 간단히 명령어를 날릴 수 있다
만약 쉘로 짠다면
for node in 10 11 12
do
ssh 192.168.56.$node "ls -al"
done
뭐 이렇게 되겠다. 별 차이 없어 보이겠지만 업무가 복잡해지면(조건) 엄청나게 코드에서 차이가 발생한다
Ansible은 보시다시피 상당히 간결하게 된다
단순한 명령어가 이정도 이고 좀더 복잡한 작업을 단순화 하기 위해
모듈이라는 개념이 사용된다
만약 파일을 원격지의 다수의 서버에 복사한다고 치면
Shell)
#scp /tmp/file.txt jboss@192.168.56.10:/home/jboss
#scp /tmp/file.txt jboss@192.168.56.11:/home/jboss
#scp /tmp/file.txt jboss@192.168.56.12:/home/jboss
Ansible)
#ansible testserver -m copy -a "src=/tmp/file.txt dest=/home/jboss"
한줄로 끝난다.
여기서 -m 옵션이 module을 의미하고 Ansible에 이미 정의된 여러 모듈중에서 copy 모듈을 사용한다는 의미가 되겠다
만약 파일을 복사하고 권한을 755로 변경하고 오너 및 그룹을 변경하기 위한 작업은 어찌될까
Shell)
#scp /tmp/file.txt jboss@192.168.56.10:/home/jboss
#scp /tmp/file.txt jboss@192.168.56.11:/home/jboss
#scp /tmp/file.txt jboss@192.168.56.12:/home/jboss
#ssh jboss@192.168.56.10 "chmod 755 /home/jboss/file.txt;chown jboss:jboss home/jboss/file.txt"
#ssh jboss@192.168.56.11 "chmod 755 /home/jboss/file.txt;chown jboss:jboss home/jboss/file.txt""
#ssh jboss@192.168.56.12 "chmod 755 /home/jboss/file.txt;chown jboss:jboss home/jboss/file.txt""
Ansible) - copy, file module 사용
#ansible testserver -m copy -a "src=/tmp/file.txt dest=/home/jboss"
#ansible testserver -m file -a "dest=/home/jboss/file.txt mode=755 owner=jboss group=jboss"
점점 차이가 나는것을 알 수 있다.
물론 쉘을 루프를 걸면 되겠지만 로직을 짜는것 자체가 공수(Ansible에는 이미 제공되는 모듈에서 이 부분을 커버한다)이고
이때 발생할 수 있는 오타.... 로지컬한 실수...
특히나 쉘의 경우 상용에 테스트를 해볼 수 없으니 별도의 서버에 한번쯤 돌려보는 수고를 해야 겠으나
ansible에서는 -C (or --check) 옵션을 포함하여 간단하게 수행이 가능하다
(나중에 알겠지만 shell 모듈이 있다.
모듈을 쓰지 않고 직접 쉘명령을 사용하는경우 주의해야 한다.
모듈은 테스트가 가능하지만 쉘명령은 실행 되면 그냥 반영되버릴 수 있다.)
#ansible testserver -C -m copy -a "src=/tmp/file.txt dest=/tmp" <== 되는지 테스트
#ansible testserver -m copy -a "src=/tmp/file.txt dest=/tmp" <==실제 복사
#ansible testserver --check -m file -a "dest=/tmp/file.txt mode=755 owner=jboss group=jboss"
테스트 결과는 아래와 같이 출력된다.
192.168.56.10 | SUCCESS => {
"changed": true,
"gid": 1000,
"group": "jboss",
"mode": "0664",
"owner": "jboss",
"path": "/tmp/file.txt",
"secontext": "unconfined_u:object_r:user_tmp_t:s0",
"size": 4,
"state": "file",
"uid": 1000
}
#ansible testserver -m file -a "dest=/tmp/file.txt mode=755 owner=jboss group=jboss"
실제 반영된 결과는
192.168.56.10 | SUCCESS => {
"changed": true,
"gid": 1000,
"group": "jboss",
"mode": "0755",
"owner": "jboss",
"path": "/tmp/file.txt",
"secontext": "unconfined_u:object_r:user_tmp_t:s0",
"size": 4,
"state": "file",
"uid": 1000
}
이제 마무리로 ... 모든 모듈을 나열 할 수도 의미도 없으니 기본 모듈은 아래 URL에서 확인할 수 있다
별별 모듈이 다있는데
예를 들어 L7장비인 Big-IP F5에 원격으로 붙어서 그룹을 제어하거나...하는짓(?) 도 할 수 있다.
Module Index
http://docs.ansible.com/ansible/modules_by_category.html
위 예 이외에 몇가지 기본 사용법은 아래를 참고한다.
Introduction To Ad-Hoc Commands
http://docs.ansible.com/ansible/intro_adhoc.html다양한 모듈을 쓰지 않고 shell모듈 하나만 가지고..
또는 쌩으로 쉘스크립트를 날려서 처리할 수 있지만
Ansible의 자동화 기능을 잘 사용하기 위해서는 어느정도 module에 대한 이해가 필요하니
처음부터 끝까지 읽어보라기 보다는
지금 내가 하는 작업을 ansible로 몇가지 해보면 금방 적을 될 듯 하다.
또한 모듈이 기본 기능이라면
이미 사전정의된 작업파일을 템플릿으로 제공하고 있다. (ansible galaxy)
요건 다음에 공부해보자....
Ansible 타워는 언제하냐.... ㅋ상ㅋ 뭘 알아야 태워서 돌려보지
막 그냥 돌리는건 메뉴얼보고 하면 되기는 하는데....
기본은 어느정도 봐야 하지 않겠내 싶어서 바닥부터 간다
.이상
2017년 3월 27일 월요일
Ansible Node추가 및 Inventory구문이해
노드 추가 및 작업 환경 만들기 및 Inventory(서버목록)
여기서 테스트를 위해 아래 3개를 노드로 구성한다
192.168.56.10 : ansible tower 설치
192.168.56.11 : node1
192.168.56.12 : node2
1. 관리대상 node에 ssh key 기반 접속 환경 구성
Ansible은 모든 target node 작업을 ssh 기반으로 접근하여 처리한다
이때 ansible tower에서 관리하는 계정이 타 시스템으로 접근하여 작업을 하기 위해서는
ID/PASS 문의 없이 암호화된 키를 전달하여 상호 인증하는 환경을 구성해야 한다.
SSH Key를 이용하면 이러한 구성이 가능하다가
-flow
ansible tower server에서 관리용 계정을 만든다 (예 jboss)
jboss계정에서 ssh key를 생성한다
!! 생성시에는 패스워드 없이 만들도록 한다.
[jboss@rockplace ~]$ ssh-keygen -t rsa -C "yckwon@rockplace.co.kr"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jboss/.ssh/id_rsa): <== 키 생성할 위치 및 파일명
Enter passphrase (empty for no passphrase): <== 키 패스워드 없이 만든다. (만드는 경우 반듯이 잘 보관해야 함 일어버리면 다시만들고 다시 복사하는 작업 필요)
Enter same passphrase again:
Your identification has been saved in /home/jboss/.ssh/id_rsa.
Your public key has been saved in /home/jboss/.ssh/id_rsa.pub.
The key fingerprint is:
bd:64:16:57:84:d2:ef:76:1b:50:35:8b:07:f0:8c:b8 yckwon@rockplace.co.kr
The key's randomart image is:
+--[ RSA 2048]----+
| o.+o.o|
| o *.o.o|
| ..o.=.o |
| ..o .o |
| SE= .. |
| + . o..|
| . . .o|
| . |
| |
+-----------------+
아래 같은 파일이 생성 되어 있다.
[jboss@rockplace ~]$ cd ./.ssh
[jboss@rockplace .ssh]$ pwd
/home/jboss/.ssh
[jboss@rockplace .ssh]$ ls -al
합계 20
drwx------. 2 jboss jboss 80 3월 27 14:02 .
drwx------. 18 jboss jboss 4096 3월 27 14:04 ..
-rw-------. 1 jboss jboss 1675 3월 27 14:02 id_rsa
-rw-r--r--. 1 jboss jboss 404 3월 27 14:02 id_rsa.pub
-rw-r--r--. 1 jboss jboss 175 3월 22 16:25 known_hosts
자기자신에게도 패스워드 없이 로그인해야 할 수 있으므로 공개키 저장소 파일을 만든다
[jboss@rockplace .ssh]$ cp id_rsa.pub authorized_keys (authorized_keys 파일은 ssh가 내부적으로 인식하는 승인된 서버의 암호화 키다 들어있는 파일이다)
다른 서버에도 모두 복사한다
최초 1회 이러한 작업을 모두 수행한다. 이후부터는 jboss계정은 패스워드 질의 없이 접근 된다.
[jboss@rockplace ~] ssh jboss@192.168.56.11 "mkdir ./.ssh;chmod 700 ./.ssh"
[jboss@rockplace ~] ssh jboss@192.168.56.12 "mkdir ./.ssh;chmod 700 ./.ssh
[jboss@rockplace ~] scp authorized_keys jboss@192.168.56.11:~/.ssh/authorized_keys
[jboss@rockplace ~] scp authorized_keys jboss@192.168.56.12:~/.ssh/authorized_keys
.ssh 폴더가 없을 경우 실패할 수 있다. 폴더를 만들되 권한을 700 으로 해야 정상동작한다(ssh서비스 보안사항임)
위의 ssh 명령으로 해도 되고 직접 접속시 아래와 같이 수행하도록 한다.
[jboss@rockplace ~]$ mkdir ./.ssh
[jboss@rockplace ~]$ chmod 700 ./.ssh
[jboss@rockplace ~]$ ls -al | grep ssh
drwx------. 2 jboss jboss 29 3월 27 14:04 .ssh
2. 간단한 ansible ping으로 확인
[jboss@rockplace .ssh]$ ansible 192.168.56.10 -m ping (여기서 ping은 icmp가 아니라 ssh 포트를 체크한다)
[jboss@rockplace .ssh]$ ansible 192.168.56.11 -m ping
[jboss@rockplace .ssh]$ ansible 192.168.56.12 -m ping
정상이면 아래처럼 나온다.
192.168.56.10 | SUCCESS => {
"changed": false,
"ping": "pong"
}
absible ping 수행시 오류발생 케이스
192.168.56.11 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", <== pub key없어서 오류
"unreachable": true
}
192.168.56.10 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Host key verification failed.\r\n", <== pub key를 복사했으나 직접 1회 접속해서 known hosts에 들어가도록 해야함
"unreachable": true
}
ssh는 대상 node에 최초 접근시 호스트키 확인과정을 통해 known hosts 파일에 내용을 기록합니다. (최초1회)
이러한 과정때문에 한번도 접속한 이력이 없는(known_hosts 목록에 없는경우)경우 ansible 수행시 검증실패로 인하여 동작하지 않을 수 있습니다.
한번 수작업으로 ssh 접속을 하면서 등록을 하던가
이런 확인 과정을 비활성화 하길 원한다면 /etc/ansible/ansible.cfg
또는 ~/.ansible.cfg 파일을 수정하여 해결할 수 있습니다.
예 : /etc/ansible/ansible.cfg
[defaults]
...
# uncomment this to disable SSH key host checking
#host_key_checking = False
3. hosts 리스트를 만들자 (인벤토리 Inventory 설명)
2항에서는 하나하나 서버에 테스트하기 위해 host 명을 명시했지만
자동화를 위해 매번이렇게 할 수 없다
ansible에서는 여러대의 서버를 그룹 과 목록으로 관리하기 위하여 /etc/ansible/hosts 파일에 인벤토리를 만들어서 일괄작업이 가능하도록 한다.
기본 파일 또는 작업별로 여러 hosts파일을 만들어서 지정해서 쓸 수 있다
기본 파일 수정 (/etc/ansible/hosts)
[jboss@rockplace .ssh]$ cat /etc/ansible/hosts
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
...
[testserver]
#ansible node1
#192.168.56.11
#ansible node2
#192.168.56.12
192.168.56.[10:12] <== 여러대의 경우 이런식도 가능하다, hostname으로 해도 된다.
inventory 파일 예제
mail.example.com
[webservers]
foo.example.com
bar.example.com
[wasservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com:2456
two.example.com:2456
three.example.com:2456
[wasservers]
www[01:10].was.com ansible_connection=ssh ansible_user=mpdehaan
[pgsqldb]
db-[a:f].pgsqldb.com
[tunneling_DB]
db-[1:3].oracle.com ansible_port=5555 ansible_host=192.0.2.50
3.0 사용하는 host name은 ansible에서 lookup 이 가능하도록 DNS에 있거나 hosts 파일에 정의 되어 있어야 한다.
3.1. [] 는 그룹명으로 ansible에서 지정할 수 있다. 그룹을 지정하면 목록의 범위는 그룹아래 쪽 host가 target이 된다,
3.2. target node는 여러 그룹에 포함 될 수 있다. (하나의 서버에 WEB / WAS가 다 있는경우)
3.3. 대상서버의 ssh 서비스가 비표준(22번이 아닌)번호를 쓰는경우 : 으로 명시한다. (특정 서비스 포트가 아니라 ssh 서비스포트)
3.4. 동일서비스의 다수서버의 이름이 순차적일때 일일이 넣지 않고 패턴으로 넣을 수 있다.
db-[a:f].pgsqldb.com는
db-a.pgsqldb.com
db-b.pgsqldb.com
db-c.pgsqldb.com ... f까지
www[01:10].was.com 는
www01.was.com
www02.was.com ... 10번까지
숫자와 문자 패턴만 지원한다.
~(web|db).*\.example\.com 등으로 정규식 지원가능...하지만 잘 모르면 머리아프다 ...단순하게 하자 단순하게
3.5. 터널링을 하는경우(보안이나....여하간의...이런방법을 기본으로 쓰는건 좋지 않다.) 특정 서버를 거쳐 다른권한으로 다른 서버에 접속하기 위하여
ansible_port= ansible_host= 옵션을 추가한다.
예를 들어
db-1.oracle.com ansible_port=5555 ansible_host=192.0.2.50
은 192.0.2.50 서버의 5555 ssh 포트에 접속하여 터널링을 만들고 db-1.oralce.com으로 접근하여 작업을 수행한다.
!! Ansible 2.0 부터
ansible_ssh_user, ansible_ssh_host, and ansible_ssh_port 는
ansible_user, ansible_host, and ansible_port 로 변경되었다.
별도파일을 쓰는 경우 -i 옵션을 주고 수행할 수 있다.
#ansible -i /ansible/inven/webserver.list all -m ping
3.6. 특정 서버에 접근시 계정을 지정하고 하는경우 (없으면 실행하는 계정으로 접근을 시도한다)
www[01:10].was.com ansible_connection=ssh ansible_user=jboss
3.7. 특정서버에 connection을 ssh가 아닌 다른 형식으로 접근할 수 있다
www[01:10].was.com ansible_connection=ssh ansible_user=jboss
ansible 1.2.x + paramiko (예전방식, openssh보다 빨라서 사용했음)
ansible 1.2.x + openssh (명령어에 -c ssh 를 명시해줬어야했음)
ansible 1.3.x + openssh (이후 부터는 기본 통신이 ssh로 변경되었기 때문에 그냥 쓰면됨, 하위호환성을 위한)
기타 ssh 접근이 아닌 방식
local
docker
smart (스마트하게....기본 값이다. 일반적으로 안넣어도 된다)
3.8 host와 group에 대한 변수처리
호스트에서
[atlanta]
host1 http_port=80 maxRequestsPerChild=808 이렇게 넣으면 뒤에 playbook에서 변수를 가져다 쓸 수 있다. 꼭 이럴 필요는 없으나 필요하면...
host2 http_port=303 maxRequestsPerChild=909
그룹에서
[atlanta:vars] <== 이렇게 주면 위의 atlanta 그룹에서 변수를 사용할 수 있다. 이것도 필요하면..playbook에서 변수처리를 다 할 수 있다.
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
3.9 그룹의 그룹도 가능하다 (children)
[atlanta]
host1
host2
[raleigh]
host2
host3
[southeast:children] <== southeast는 atlanta 그룹과 raleigh 그룹을 병합한 그룹이다.
atlanta
raleigh
[southeast:vars] <== southeast 그룹에 변수를 추가할 수 있다.
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2
[usa:children] <== usa 그룹은 그룹의 그룹을 또 그룹으로 만드는 예
southeast
northeast
southwest
northwest
정리하면
과천센터의
WEB 서버 그룹 , DB 서버 그룹 을 과천그룹 으로 지정하고
분당센터의
WEB 서버 그룹 , DB 서버 그룹 을 분당그룹으로 지정하고
과천그룹과 분당그룹을 수도권역그룹으로 지정
....걔속 확장하면 한국 서버 전체 목록이 만들어지겠지요.....
여기서 테스트를 위해 아래 3개를 노드로 구성한다
192.168.56.10 : ansible tower 설치
192.168.56.11 : node1
192.168.56.12 : node2
1. 관리대상 node에 ssh key 기반 접속 환경 구성
Ansible은 모든 target node 작업을 ssh 기반으로 접근하여 처리한다
이때 ansible tower에서 관리하는 계정이 타 시스템으로 접근하여 작업을 하기 위해서는
ID/PASS 문의 없이 암호화된 키를 전달하여 상호 인증하는 환경을 구성해야 한다.
SSH Key를 이용하면 이러한 구성이 가능하다가
-flow
ansible tower server에서 관리용 계정을 만든다 (예 jboss)
jboss계정에서 ssh key를 생성한다
!! 생성시에는 패스워드 없이 만들도록 한다.
[jboss@rockplace ~]$ ssh-keygen -t rsa -C "yckwon@rockplace.co.kr"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jboss/.ssh/id_rsa): <== 키 생성할 위치 및 파일명
Enter passphrase (empty for no passphrase): <== 키 패스워드 없이 만든다. (만드는 경우 반듯이 잘 보관해야 함 일어버리면 다시만들고 다시 복사하는 작업 필요)
Enter same passphrase again:
Your identification has been saved in /home/jboss/.ssh/id_rsa.
Your public key has been saved in /home/jboss/.ssh/id_rsa.pub.
The key fingerprint is:
bd:64:16:57:84:d2:ef:76:1b:50:35:8b:07:f0:8c:b8 yckwon@rockplace.co.kr
The key's randomart image is:
+--[ RSA 2048]----+
| o.+o.o|
| o *.o.o|
| ..o.=.o |
| ..o .o |
| SE= .. |
| + . o..|
| . . .o|
| . |
| |
+-----------------+
아래 같은 파일이 생성 되어 있다.
[jboss@rockplace ~]$ cd ./.ssh
[jboss@rockplace .ssh]$ pwd
/home/jboss/.ssh
[jboss@rockplace .ssh]$ ls -al
합계 20
drwx------. 2 jboss jboss 80 3월 27 14:02 .
drwx------. 18 jboss jboss 4096 3월 27 14:04 ..
-rw-------. 1 jboss jboss 1675 3월 27 14:02 id_rsa
-rw-r--r--. 1 jboss jboss 404 3월 27 14:02 id_rsa.pub
-rw-r--r--. 1 jboss jboss 175 3월 22 16:25 known_hosts
자기자신에게도 패스워드 없이 로그인해야 할 수 있으므로 공개키 저장소 파일을 만든다
[jboss@rockplace .ssh]$ cp id_rsa.pub authorized_keys (authorized_keys 파일은 ssh가 내부적으로 인식하는 승인된 서버의 암호화 키다 들어있는 파일이다)
다른 서버에도 모두 복사한다
최초 1회 이러한 작업을 모두 수행한다. 이후부터는 jboss계정은 패스워드 질의 없이 접근 된다.
[jboss@rockplace ~] ssh jboss@192.168.56.11 "mkdir ./.ssh;chmod 700 ./.ssh"
[jboss@rockplace ~] ssh jboss@192.168.56.12 "mkdir ./.ssh;chmod 700 ./.ssh
[jboss@rockplace ~] scp authorized_keys jboss@192.168.56.11:~/.ssh/authorized_keys
[jboss@rockplace ~] scp authorized_keys jboss@192.168.56.12:~/.ssh/authorized_keys
.ssh 폴더가 없을 경우 실패할 수 있다. 폴더를 만들되 권한을 700 으로 해야 정상동작한다(ssh서비스 보안사항임)
위의 ssh 명령으로 해도 되고 직접 접속시 아래와 같이 수행하도록 한다.
[jboss@rockplace ~]$ mkdir ./.ssh
[jboss@rockplace ~]$ chmod 700 ./.ssh
[jboss@rockplace ~]$ ls -al | grep ssh
drwx------. 2 jboss jboss 29 3월 27 14:04 .ssh
2. 간단한 ansible ping으로 확인
[jboss@rockplace .ssh]$ ansible 192.168.56.10 -m ping (여기서 ping은 icmp가 아니라 ssh 포트를 체크한다)
[jboss@rockplace .ssh]$ ansible 192.168.56.11 -m ping
[jboss@rockplace .ssh]$ ansible 192.168.56.12 -m ping
정상이면 아래처럼 나온다.
192.168.56.10 | SUCCESS => {
"changed": false,
"ping": "pong"
}
absible ping 수행시 오류발생 케이스
192.168.56.11 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", <== pub key없어서 오류
"unreachable": true
}
192.168.56.10 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Host key verification failed.\r\n", <== pub key를 복사했으나 직접 1회 접속해서 known hosts에 들어가도록 해야함
"unreachable": true
}
ssh는 대상 node에 최초 접근시 호스트키 확인과정을 통해 known hosts 파일에 내용을 기록합니다. (최초1회)
이러한 과정때문에 한번도 접속한 이력이 없는(known_hosts 목록에 없는경우)경우 ansible 수행시 검증실패로 인하여 동작하지 않을 수 있습니다.
한번 수작업으로 ssh 접속을 하면서 등록을 하던가
이런 확인 과정을 비활성화 하길 원한다면 /etc/ansible/ansible.cfg
또는 ~/.ansible.cfg 파일을 수정하여 해결할 수 있습니다.
예 : /etc/ansible/ansible.cfg
[defaults]
...
# uncomment this to disable SSH key host checking
#host_key_checking = False
3. hosts 리스트를 만들자 (인벤토리 Inventory 설명)
2항에서는 하나하나 서버에 테스트하기 위해 host 명을 명시했지만
자동화를 위해 매번이렇게 할 수 없다
ansible에서는 여러대의 서버를 그룹 과 목록으로 관리하기 위하여 /etc/ansible/hosts 파일에 인벤토리를 만들어서 일괄작업이 가능하도록 한다.
기본 파일 또는 작업별로 여러 hosts파일을 만들어서 지정해서 쓸 수 있다
기본 파일 수정 (/etc/ansible/hosts)
[jboss@rockplace .ssh]$ cat /etc/ansible/hosts
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
...
[testserver]
#ansible node1
#192.168.56.11
#ansible node2
#192.168.56.12
192.168.56.[10:12] <== 여러대의 경우 이런식도 가능하다, hostname으로 해도 된다.
inventory 파일 예제
mail.example.com
[webservers]
foo.example.com
bar.example.com
[wasservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com:2456
two.example.com:2456
three.example.com:2456
[wasservers]
www[01:10].was.com ansible_connection=ssh ansible_user=mpdehaan
[pgsqldb]
db-[a:f].pgsqldb.com
[tunneling_DB]
db-[1:3].oracle.com ansible_port=5555 ansible_host=192.0.2.50
3.0 사용하는 host name은 ansible에서 lookup 이 가능하도록 DNS에 있거나 hosts 파일에 정의 되어 있어야 한다.
3.1. [] 는 그룹명으로 ansible에서 지정할 수 있다. 그룹을 지정하면 목록의 범위는 그룹아래 쪽 host가 target이 된다,
3.2. target node는 여러 그룹에 포함 될 수 있다. (하나의 서버에 WEB / WAS가 다 있는경우)
3.3. 대상서버의 ssh 서비스가 비표준(22번이 아닌)번호를 쓰는경우 : 으로 명시한다. (특정 서비스 포트가 아니라 ssh 서비스포트)
3.4. 동일서비스의 다수서버의 이름이 순차적일때 일일이 넣지 않고 패턴으로 넣을 수 있다.
db-[a:f].pgsqldb.com는
db-a.pgsqldb.com
db-b.pgsqldb.com
db-c.pgsqldb.com ... f까지
www[01:10].was.com 는
www01.was.com
www02.was.com ... 10번까지
숫자와 문자 패턴만 지원한다.
~(web|db).*\.example\.com 등으로 정규식 지원가능...하지만 잘 모르면 머리아프다 ...단순하게 하자 단순하게
3.5. 터널링을 하는경우(보안이나....여하간의...이런방법을 기본으로 쓰는건 좋지 않다.) 특정 서버를 거쳐 다른권한으로 다른 서버에 접속하기 위하여
ansible_port= ansible_host= 옵션을 추가한다.
예를 들어
db-1.oracle.com ansible_port=5555 ansible_host=192.0.2.50
은 192.0.2.50 서버의 5555 ssh 포트에 접속하여 터널링을 만들고 db-1.oralce.com으로 접근하여 작업을 수행한다.
!! Ansible 2.0 부터
ansible_ssh_user, ansible_ssh_host, and ansible_ssh_port 는
ansible_user, ansible_host, and ansible_port 로 변경되었다.
별도파일을 쓰는 경우 -i 옵션을 주고 수행할 수 있다.
#ansible -i /ansible/inven/webserver.list all -m ping
3.6. 특정 서버에 접근시 계정을 지정하고 하는경우 (없으면 실행하는 계정으로 접근을 시도한다)
www[01:10].was.com ansible_connection=ssh ansible_user=jboss
3.7. 특정서버에 connection을 ssh가 아닌 다른 형식으로 접근할 수 있다
www[01:10].was.com ansible_connection=ssh ansible_user=jboss
ansible 1.2.x + paramiko (예전방식, openssh보다 빨라서 사용했음)
ansible 1.2.x + openssh (명령어에 -c ssh 를 명시해줬어야했음)
ansible 1.3.x + openssh (이후 부터는 기본 통신이 ssh로 변경되었기 때문에 그냥 쓰면됨, 하위호환성을 위한)
기타 ssh 접근이 아닌 방식
local
docker
smart (스마트하게....기본 값이다. 일반적으로 안넣어도 된다)
3.8 host와 group에 대한 변수처리
호스트에서
[atlanta]
host1 http_port=80 maxRequestsPerChild=808 이렇게 넣으면 뒤에 playbook에서 변수를 가져다 쓸 수 있다. 꼭 이럴 필요는 없으나 필요하면...
host2 http_port=303 maxRequestsPerChild=909
그룹에서
[atlanta:vars] <== 이렇게 주면 위의 atlanta 그룹에서 변수를 사용할 수 있다. 이것도 필요하면..playbook에서 변수처리를 다 할 수 있다.
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
3.9 그룹의 그룹도 가능하다 (children)
[atlanta]
host1
host2
[raleigh]
host2
host3
[southeast:children] <== southeast는 atlanta 그룹과 raleigh 그룹을 병합한 그룹이다.
atlanta
raleigh
[southeast:vars] <== southeast 그룹에 변수를 추가할 수 있다.
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2
[usa:children] <== usa 그룹은 그룹의 그룹을 또 그룹으로 만드는 예
southeast
northeast
southwest
northwest
정리하면
과천센터의
WEB 서버 그룹 , DB 서버 그룹 을 과천그룹 으로 지정하고
분당센터의
WEB 서버 그룹 , DB 서버 그룹 을 분당그룹으로 지정하고
과천그룹과 분당그룹을 수도권역그룹으로 지정
....걔속 확장하면 한국 서버 전체 목록이 만들어지겠지요.....
Ansible Tower 따위를 쓰는 이유
호랭이 담배 물던 시절에는 IDC 라는 것 자체가 없었다
대부분 전산실이라는 이름을 붙여서 연구소에 끼워놓거나
좀 커도 전산실이였다
장비도 DB 몇 대 스위치 몇 개 라우터 Mux 등등 해서 수십대 미만..
그냥 창고형 전산실(?)도 부지기수
이때는 윈도우 건 unix 건 그냥 접속해서 일일이 작업하는 것이 그다지 부담스럽지도 않았고
같은 기능의 서버의 여러대 있지도 않았기에 반복작업 이랄것이 그다지 없었다
(콘솔열고 몇대 접속해서 작업하는게 무슨부담? 꺼먼화면에 뭔가 휙휙~ 지나가면 간지도 나잖아?)
현재는
같은 서비스의 웹서버만 30대
같은 서비스의 WAS만 40대
비슷비슷한 또는 마이크로서비스형태의 수많은 서버
가상화로 인한 엄청나게 많은 장비들의 구성되었고
가끔 1명당 담당서버가 300대를 넘어가는 IT기업도 있다
이런 경우 hosts 파일에 정보 하나 넣으려고
또는 수정된 APP 배포를 위해 수십대의 WEB/WAS를 재구동하기 위해
수십~수백대에 접속한다는건 말이 안되는 현실이다
하지만
이미 이러한 문제는 쉘 스크립트 + SSH 로 해결하고 있었고
돈 많은 곳에서는 Automation Solution을 도입(만)하기도 하였으나
전자는 회사내에 스크립트 장인(?)이 있어야 하고 (가끔 잘못 돌려서 잣 되는 경우도....)
후자는 옛다 쳐먹어라!
할 만큼 돈이 많이 든다 (가끔 솔루션이 맛이 가서 아무것도 못하는 경우도...)
그래서 OSS 쪽에서 만들어진 자동화도구들 중에 최근 많이들 관심가지는 것이 Ansible
(책임감있는 앤서블.. 앤~씨불 아님...ㅋㅋ)
특히나 PaaS(퍼블릭가상화)에 대한 기대치가 높아지면서
PaaS환경내에서 사용자 작업없이 자동화되는 부분에서 높은 필요성이 대두 되었고
PaaS 솔루션인 RedHat OpenSift의 경우 내부적인 설치, 관리, 배포 등에서 사용되고 있다
(사용자가 하는게 아니라 솔루션 내부에 built-in)
그럼 Ansible Tower는 뭔데?
앞서 말한 OSS(Open Source Software)인 Ansible은 말그대로 뼈대만 제공한다.
설치하면 명령어 몇 개가 포함된 패키지와 관련된 파이선이라는 언어가 설치 되는데....
설치야 한다치고 까만 화면에 뭘 해야 할 지 알 수가 없다. ㅜ.ㅜ
그걸 극복하고 에드혹(?)명령어를 오타없이 날리고 플레이북(?)을 만들 능력이 된다해도
실제 기업에 적용하여 사용하려면 문제발생시 통보와 결과에 대한 관리 ,
작업자 마다 수행할 작업이 다르고
혹시모를 실수를 방지 하기 위해 권한 및 그룹 관리를 해야 하는데
이건 OSS Ansible에서는 할 수 없는 것이고 필요하다면
뭇 OSS의 미덕이 그러하듯 다 너님이 개발해서 써야한다
그런데.... Ansible 하나 쓰겠다고 수십명의 개발자(억단위 프로젝트가 된다)를 쓸수도 없고
결국 뚝딱뚝딱 개발해낼 능력자가 없는 대부분의 회사에서는
기업의 크기가 어떠하든 서버의 댓수가 얼마이든
잘 하는 사람이
잘 아는 서비스에
잘 아는 서버를 대상으로
완벽하게 컨트롤 가능한 환경에서 일부 쓰일 뿐이다
그래서
순수 "오픈소스" 가 아닌 "오픈소스 비지니스"(오픈소스로 돈벌기)영역에서는
뼈대 수준인 Ansible에 살을 붙여서
GUI 콘솔, 워크플로우, 인증환경, 그룹 및 사용자관리, 작업결과 관리, 모니터링 등의
실 업무를 위한 기능을 추가하여 기업제품으로 제공하고
그 제품이름이 Ansible Tower가 되시겠다. (레드햇 제공)
그렇다고 사람들이 생각하듯 이거 사면 자동화가 다 되는건가? 하는 생각은 버려야 한다.
이 제품을 쓰기 위해서는 Ansible에 대한 이해가 필요하고
실제 운영자는 Ansible AdHoc과 Playbook을 만드는 수준의 기술이 필요하다
이 제품은 Ansible을 운영할 줄 아는 사용자가
Enterprise에서 실제 확장 적용하여 사용할 수 있게끔 만들어주는 솔루션이다.
HP OPS군같이 GUI에서 클릭클릭 해서 뭔가 하려는 생각은 버려야 한다
(알다시피 이 비싼 제품들도 고난이도 작업은 어짜피 스크립트로 해결한다..)
이것 저것 떠나서
- 우리는 300대 서버에 대해서 과거 10년간 사용하던 shell script로 잘 운영하고 있고
- 이걸 관리하는 사람들도 큰 불편없고
- 이걸 쓰는 사람들도 스크립트에 불만이 없다면
- 또는 jenkins씨에 SSH 플러그인 먹여서 잘 쓰고는 있다면......
그냥 그대로 사시라.... 이거 사서 설치한다고 세상이 변하지 않는다 (혁신은 개나 주자고!)
각설하고 OSS로 개발된 SW를 개선하여 메뉴얼과 기술을 판매하여 수익을 생산하는....
이러한 비지니스형태는 단지 Ansible에 국한 된 것이 아니라 대부분의 오픈소스가 취하는 비지니스형태이다
다만 한국에서는 아직 이런 비지니스의 개념보다 "공짜" 라는 생각만 하는 사람이 많다보니
오픈소스 하는사람을 무슨 봉이 김선달 보듯이 하는 경향이 있지만
나는 이야기 해주고 싶다
다운로드 받아서 쓸꺼면 그냥 잘 쓰시면 되구요... 안말려요
하다가 몰라서 물어 볼꺼믄 돈을 내라니깐??? 나도 먹고 살아야죠? 같이 삽시다 웅?
.이상
Ansible Tower 설치
설치... 그냥 설치임...별거없음
- TEST Env
ansible tower설치 (version 3.1)
CentOS 7 64bit
Virtual Box 2 CPU, 2Gbyte MEM, 50G Vol,
- Document
http://docs.ansible.com/ansible-tower/
- 요구사항
supported Operating Systems:
Red Hat Enterprise Linux 7 64-bit
CentOS 7 64-bit
Ubuntu 14.04 LTS 64-bit
Ubuntu 16.04 LTS 64-bit
(yml 내부를 보면 RedHat-7*:CentOS-7*:Ubuntu-14.04:Ubuntu-16.04:OracleLinux-7*)
2GRAM (4G이상)
only 64bit
20GHDD (/var/)
- Sizing
저장소 용량산정
관리서버 수 * 스케쥴 수행 * ((평균 모듈사이즈 * 모듈수) / 3) =
For example, assuming a schedule of 1 scan per day for a year:
(hosts = 1,000) * (number of scans = 365) * ((average module fact size = 100 kb) * (number of modules = 4) / 3) = 48 GB
메모리 산성
fork 수를 지준으로 한다.
4G에 100개의 fork를 기준으로 함
원하는 fork수 / 기준 fork 100 * 기준 메모리 4G =
400 fork를 지원하기 위해서는
400fork / 100fork * 4G = 16G
가이드에는 없으나 스켄횟수는 모듈별 1일 1회 정도가 맞겠으나 모듈 수는 가변적이므로 최소 2배수 정도는 잡는게 어떨까 싶다....
내부적으로 pgsql db가 사용됨
- HA 구성 지원
단독설치, DB 분리, Tower HA 구성 제공
1. 리파지토리 구성 (connect & disconnected env)
인터넷이 되더라도 리파지토리 추가는 해줘야 함
#root@localhost:~$ yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2. ansible 설치 (Tower 자체가 Ansible로 설치되므로 필요, Tower 2.3버젼부터는 설치과정에서 깔림, 그전에 설치필요)
#sudo yum install ansible
설치되는 패키지
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
ansible noarch 2.2.1.0-1.el7 epel 4.6 M
Installing for dependencies:
PyYAML x86_64 3.10-11.el7 base 153 k
libtomcrypt x86_64 1.17-23.el7 epel 224 k
libtommath x86_64 0.42.0-4.el7 epel 35 k
libyaml x86_64 0.1.4-11.el7_0 base 55 k
python-babel noarch 0.9.6-8.el7 base 1.4 M
python-httplib2 noarch 0.7.7-3.el7 epel 70 k
python-jinja2 noarch 2.7.2-2.el7 base 515 k
python-keyczar noarch 0.71c-2.el7 epel 218 k
python-markupsafe x86_64 0.11-10.el7 base 25 k
python2-crypto x86_64 2.6.1-13.el7 epel 476 k
python2-ecdsa noarch 0.13-4.el7 epel 83 k
python2-paramiko noarch 1.16.1-2.el7 epel 258 k
sshpass x86_64 1.06-1.el7 epel 21 k
Transaction Summary
================================================================================
Install 1 Package (+13 Dependent packages)
3. 설치 환경정의 (inventory 파일 수정)
#vi /home/jboss/ansibleTower/ansible-tower-setup-3.1.0/inventory
[tower]
localhost ansible_connection=local
[database]
[all:vars]
admin_password='jboss!'
pg_host=''
pg_port=''
pg_database='awx'
pg_username='jboss'
pg_password='jboss!'
rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
rabbitmq_password='jboss!'
rabbitmq_cookie=cookiemonster
# Needs to be true for fqdns and ip addresses
rabbitmq_use_long_name=false
4. 설치 파일 수행 (임의의 위치에 설치본을 풀어놓았다고 가정, 설치는 root로 수행
/home/jboss/ansibleTower/ansible-tower-setup-3.1.0/setup.sh
VM에서 수행시간 : 11:08 ~ 27 : 약 20분 소요 (VM 2CPU, 2Gbyte 할당 ENV)
구동되는 관련 프로세스 (파이선기반의 Ansible본체, Pgsql DB, Rabbit MQ)
awx 15523 14715 0 11:27 ? 00:00:05 python /usr/bin/tower-manage runworker --only-channels websocket.*
awx 15524 14715 0 11:27 ? 00:00:00 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15525 14715 0 11:27 ? 00:00:03 python /usr/bin/tower-manage run_fact_cache_receiver
awx 15526 14715 1 11:27 ? 00:01:14 /var/lib/awx/venv/tower/bin/python /var/lib/awx/venv/tower/bin/daphne -b 127.0.0.1 -p 8051 awx.asgi:channel_layer
awx 15527 14715 0 11:27 ? 00:00:03 python /usr/bin/tower-manage run_callback_receiver
awx 15528 14715 0 11:27 ? 00:00:06 python /usr/bin/tower-manage celery beat -l debug --pidfile= -s /var/lib/awx/beat.db
awx 15529 14715 0 11:27 ? 00:00:10 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
awx 15550 15524 0 11:27 ? 00:00:05 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15551 15524 0 11:27 ? 00:00:04 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15552 15524 0 11:27 ? 00:00:03 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15553 15524 0 11:27 ? 00:00:03 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15554 15524 0 11:27 ? 00:00:08 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
postgres 15812 6959 0 11:27 ? 00:00:00 postgres: jboss awx 127.0.0.1(43308) idle
postgres 15836 6959 0 11:27 ? 00:00:00 postgres: jboss awx 127.0.0.1(43322) idle
awx 15846 15527 0 11:27 ? 00:00:00 python /usr/bin/tower-manage run_callback_receiver
awx 15847 15527 0 11:27 ? 00:00:00 python /usr/bin/tower-manage run_callback_receiver
awx 15848 15527 0 11:27 ? 00:00:00 python /usr/bin/tower-manage run_callback_receiver
awx 15849 15527 0 11:27 ? 00:00:00 python /usr/bin/tower-manage run_callback_receiver
awx 15851 15529 0 11:27 ? 00:00:04 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
awx 15852 15529 0 11:27 ? 00:00:04 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
awx 15853 15529 0 11:27 ? 00:00:03 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
awx 15854 15529 0 11:27 ? 00:00:04 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
[root@rockplace ansible-tower-setup-3.1.0]# ps -ef | grep post
root 1370 1 0 10:33 ? 00:00:00 /usr/libexec/postfix/master -w
postfix 1372 1370 0 10:33 ? 00:00:00 qmgr -l -t unix -u
postgres 6959 1 0 11:19 ? 00:00:00 /usr/pgsql-9.4/bin/postgres -D /var/lib/pgsql/9.4/data
postgres 6960 6959 0 11:19 ? 00:00:00 postgres: logger process
postgres 6962 6959 0 11:19 ? 00:00:00 postgres: checkpointer process
postgres 6963 6959 0 11:19 ? 00:00:00 postgres: writer process
postgres 6964 6959 0 11:19 ? 00:00:00 postgres: wal writer process
postgres 6965 6959 0 11:19 ? 00:00:00 postgres: autovacuum launcher process
postgres 6966 6959 0 11:19 ? 00:00:00 postgres: stats collector process
postgres 15812 6959 0 11:27 ? 00:00:00 postgres: jboss awx 127.0.0.1(43308) idle
postgres 15836 6959 0 11:27 ? 00:00:00 postgres: jboss awx 127.0.0.1(43322) idle
rabbitmq 7339 1 0 11:19 ? 00:00:00 /usr/lib64/erlang/erts-8.0.3/bin/epmd -daemon
root 7722 1 0 11:19 ? 00:00:00 /bin/sh /etc/rc.d/init.d/rabbitmq-server start
root 7724 7722 0 11:19 ? 00:00:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/sbin/rabbitm-server
root 7727 7724 0 11:19 ? 00:00:00 /bin/sh /usr/sbin/rabbitmq-server
root 7741 7727 0 11:19 ? 00:00:00 su rabbitmq -s /bin/sh -c /usr/lib/rabbitmq/bin/rabbitmq-server
rabbitmq 7755 7741 0 11:19 ? 00:00:00 /bin/sh -e /usr/lib/rabbitmq/bin/rabbitmq-server
rabbitmq 7937 7755 1 11:19 ? 00:01:03 /usr/lib64/erlang/erts-8.0.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -K true -B i -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin -noshell -noinput -s rabbit boot -sname rabbitmq@localhost -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/rabbitmq@localhost.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbitmq@localhost-sasl.log"} -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbitmq@localhost-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbitmq@localhost" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672
rabbitmq 8031 7937 0 11:19 ? 00:00:00 erl_child_setup 1024
rabbitmq 8065 8031 0 11:19 ? 00:00:00 inet_gethost 4
rabbitmq 8066 8065 0 11:19 ? 00:00:00 inet_gethost 4
5. 접속확인
https://192.168.56.10:80 으로 기본 설치됨
이 정보들은 초기 설치시 inventory 파일에서 정의할 수 있음
기본 계정으로 admin / password
inventory에 지정하지 않고 설치했다면 명령어로 초기화 하여 접속
#tower-manage changepassword admin
[root@rockplace ansible-tower-setup-3.1.0]# tower-manage changepassword admin
Changing password for user 'admin'
Password:
Password (again):
Password changed successfully for user 'admin'
You have new mail in /var/spool/mail/root
.이상
- TEST Env
ansible tower설치 (version 3.1)
CentOS 7 64bit
Virtual Box 2 CPU, 2Gbyte MEM, 50G Vol,
- Document
http://docs.ansible.com/ansible-tower/
- 요구사항
supported Operating Systems:
Red Hat Enterprise Linux 7 64-bit
CentOS 7 64-bit
Ubuntu 14.04 LTS 64-bit
Ubuntu 16.04 LTS 64-bit
(yml 내부를 보면 RedHat-7*:CentOS-7*:Ubuntu-14.04:Ubuntu-16.04:OracleLinux-7*)
2GRAM (4G이상)
only 64bit
20GHDD (/var/)
- Sizing
저장소 용량산정
관리서버 수 * 스케쥴 수행 * ((평균 모듈사이즈 * 모듈수) / 3) =
For example, assuming a schedule of 1 scan per day for a year:
(hosts = 1,000) * (number of scans = 365) * ((average module fact size = 100 kb) * (number of modules = 4) / 3) = 48 GB
메모리 산성
fork 수를 지준으로 한다.
4G에 100개의 fork를 기준으로 함
원하는 fork수 / 기준 fork 100 * 기준 메모리 4G =
400 fork를 지원하기 위해서는
400fork / 100fork * 4G = 16G
가이드에는 없으나 스켄횟수는 모듈별 1일 1회 정도가 맞겠으나 모듈 수는 가변적이므로 최소 2배수 정도는 잡는게 어떨까 싶다....
내부적으로 pgsql db가 사용됨
- HA 구성 지원
단독설치, DB 분리, Tower HA 구성 제공
1. 리파지토리 구성 (connect & disconnected env)
인터넷이 되더라도 리파지토리 추가는 해줘야 함
#root@localhost:~$ yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2. ansible 설치 (Tower 자체가 Ansible로 설치되므로 필요, Tower 2.3버젼부터는 설치과정에서 깔림, 그전에 설치필요)
#sudo yum install ansible
설치되는 패키지
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
ansible noarch 2.2.1.0-1.el7 epel 4.6 M
Installing for dependencies:
PyYAML x86_64 3.10-11.el7 base 153 k
libtomcrypt x86_64 1.17-23.el7 epel 224 k
libtommath x86_64 0.42.0-4.el7 epel 35 k
libyaml x86_64 0.1.4-11.el7_0 base 55 k
python-babel noarch 0.9.6-8.el7 base 1.4 M
python-httplib2 noarch 0.7.7-3.el7 epel 70 k
python-jinja2 noarch 2.7.2-2.el7 base 515 k
python-keyczar noarch 0.71c-2.el7 epel 218 k
python-markupsafe x86_64 0.11-10.el7 base 25 k
python2-crypto x86_64 2.6.1-13.el7 epel 476 k
python2-ecdsa noarch 0.13-4.el7 epel 83 k
python2-paramiko noarch 1.16.1-2.el7 epel 258 k
sshpass x86_64 1.06-1.el7 epel 21 k
Transaction Summary
================================================================================
Install 1 Package (+13 Dependent packages)
3. 설치 환경정의 (inventory 파일 수정)
#vi /home/jboss/ansibleTower/ansible-tower-setup-3.1.0/inventory
[tower]
localhost ansible_connection=local
[database]
[all:vars]
admin_password='jboss!'
pg_host=''
pg_port=''
pg_database='awx'
pg_username='jboss'
pg_password='jboss!'
rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
rabbitmq_password='jboss!'
rabbitmq_cookie=cookiemonster
# Needs to be true for fqdns and ip addresses
rabbitmq_use_long_name=false
4. 설치 파일 수행 (임의의 위치에 설치본을 풀어놓았다고 가정, 설치는 root로 수행
/home/jboss/ansibleTower/ansible-tower-setup-3.1.0/setup.sh
VM에서 수행시간 : 11:08 ~ 27 : 약 20분 소요 (VM 2CPU, 2Gbyte 할당 ENV)
구동되는 관련 프로세스 (파이선기반의 Ansible본체, Pgsql DB, Rabbit MQ)
awx 15523 14715 0 11:27 ? 00:00:05 python /usr/bin/tower-manage runworker --only-channels websocket.*
awx 15524 14715 0 11:27 ? 00:00:00 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15525 14715 0 11:27 ? 00:00:03 python /usr/bin/tower-manage run_fact_cache_receiver
awx 15526 14715 1 11:27 ? 00:01:14 /var/lib/awx/venv/tower/bin/python /var/lib/awx/venv/tower/bin/daphne -b 127.0.0.1 -p 8051 awx.asgi:channel_layer
awx 15527 14715 0 11:27 ? 00:00:03 python /usr/bin/tower-manage run_callback_receiver
awx 15528 14715 0 11:27 ? 00:00:06 python /usr/bin/tower-manage celery beat -l debug --pidfile= -s /var/lib/awx/beat.db
awx 15529 14715 0 11:27 ? 00:00:10 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
awx 15550 15524 0 11:27 ? 00:00:05 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15551 15524 0 11:27 ? 00:00:04 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15552 15524 0 11:27 ? 00:00:03 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15553 15524 0 11:27 ? 00:00:03 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
awx 15554 15524 0 11:27 ? 00:00:08 /var/lib/awx/venv/tower/bin/uwsgi --socket :8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps
postgres 15812 6959 0 11:27 ? 00:00:00 postgres: jboss awx 127.0.0.1(43308) idle
postgres 15836 6959 0 11:27 ? 00:00:00 postgres: jboss awx 127.0.0.1(43322) idle
awx 15846 15527 0 11:27 ? 00:00:00 python /usr/bin/tower-manage run_callback_receiver
awx 15847 15527 0 11:27 ? 00:00:00 python /usr/bin/tower-manage run_callback_receiver
awx 15848 15527 0 11:27 ? 00:00:00 python /usr/bin/tower-manage run_callback_receiver
awx 15849 15527 0 11:27 ? 00:00:00 python /usr/bin/tower-manage run_callback_receiver
awx 15851 15529 0 11:27 ? 00:00:04 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
awx 15852 15529 0 11:27 ? 00:00:04 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
awx 15853 15529 0 11:27 ? 00:00:03 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
awx 15854 15529 0 11:27 ? 00:00:04 python /usr/bin/tower-manage celery worker -l debug --autoscale=50,4 -Ofair -Q projects,jobs,default,scheduler,broadcast_all,localhost -n celery@localhost
[root@rockplace ansible-tower-setup-3.1.0]# ps -ef | grep post
root 1370 1 0 10:33 ? 00:00:00 /usr/libexec/postfix/master -w
postfix 1372 1370 0 10:33 ? 00:00:00 qmgr -l -t unix -u
postgres 6959 1 0 11:19 ? 00:00:00 /usr/pgsql-9.4/bin/postgres -D /var/lib/pgsql/9.4/data
postgres 6960 6959 0 11:19 ? 00:00:00 postgres: logger process
postgres 6962 6959 0 11:19 ? 00:00:00 postgres: checkpointer process
postgres 6963 6959 0 11:19 ? 00:00:00 postgres: writer process
postgres 6964 6959 0 11:19 ? 00:00:00 postgres: wal writer process
postgres 6965 6959 0 11:19 ? 00:00:00 postgres: autovacuum launcher process
postgres 6966 6959 0 11:19 ? 00:00:00 postgres: stats collector process
postgres 15812 6959 0 11:27 ? 00:00:00 postgres: jboss awx 127.0.0.1(43308) idle
postgres 15836 6959 0 11:27 ? 00:00:00 postgres: jboss awx 127.0.0.1(43322) idle
rabbitmq 7339 1 0 11:19 ? 00:00:00 /usr/lib64/erlang/erts-8.0.3/bin/epmd -daemon
root 7722 1 0 11:19 ? 00:00:00 /bin/sh /etc/rc.d/init.d/rabbitmq-server start
root 7724 7722 0 11:19 ? 00:00:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/sbin/rabbitm-server
root 7727 7724 0 11:19 ? 00:00:00 /bin/sh /usr/sbin/rabbitmq-server
root 7741 7727 0 11:19 ? 00:00:00 su rabbitmq -s /bin/sh -c /usr/lib/rabbitmq/bin/rabbitmq-server
rabbitmq 7755 7741 0 11:19 ? 00:00:00 /bin/sh -e /usr/lib/rabbitmq/bin/rabbitmq-server
rabbitmq 7937 7755 1 11:19 ? 00:01:03 /usr/lib64/erlang/erts-8.0.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -K true -B i -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin -noshell -noinput -s rabbit boot -sname rabbitmq@localhost -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/rabbitmq@localhost.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbitmq@localhost-sasl.log"} -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbitmq@localhost-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbitmq@localhost" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672
rabbitmq 8031 7937 0 11:19 ? 00:00:00 erl_child_setup 1024
rabbitmq 8065 8031 0 11:19 ? 00:00:00 inet_gethost 4
rabbitmq 8066 8065 0 11:19 ? 00:00:00 inet_gethost 4
5. 접속확인
https://192.168.56.10:80 으로 기본 설치됨
이 정보들은 초기 설치시 inventory 파일에서 정의할 수 있음
기본 계정으로 admin / password
inventory에 지정하지 않고 설치했다면 명령어로 초기화 하여 접속
#tower-manage changepassword admin
[root@rockplace ansible-tower-setup-3.1.0]# tower-manage changepassword admin
Changing password for user 'admin'
Password:
Password (again):
Password changed successfully for user 'admin'
You have new mail in /var/spool/mail/root
.이상
2017년 3월 8일 수요일
OpenShift Version 3 - Block Arch
Platform as a service (PaaS)가 하두 대세라...
회사서도 하자고 하고 ,,,
Version 2.x에서 좀 보다가 말았는데
1년을 수원에 팔려가서 딴짓 하다보니 공부했던 것도 다 잊어버렸음
Version 3이 나왔는데 내부가 완전 딴거임...
기존에는 자체적으로 구성하거나 뭔가 오픈소스를 누덕누덕 하더니 이번에는
Docker 기반으로 싹 갈아치웠다
덕분에 OpenShift 하면서 Docker와 쿠버네티스와 엔시블까지 한방에 가보는걸로
일단 Open Shift V3의 아키텍쳐 변경사항과 항목에 대한 기초적인 설명 부터 공부....
= 개념 =
0. Master 는
- The Master is an instance of Red Hat Enterprise Linux or Red Hat Atomic Host
(EHEL기반으로 단독서버든 가상화든 OS에 구성되는 인스턴스라는 의미)
- Master primary functions is :
> Orchestrate all activities on nodes
> Know and maintain state within OpenShift environment
0. Node는
- The Node is an instance of Red Hat Enterprise Linux or Red Hat Atomic Host
(MASTER와 동급으로 구성된다, 역할이 POD를 가지고 가는 서버로 실제 서비스를 하는놈이라고 보면 됨)
- Nodes are where end-user applications, Pods, are run
- Nodes are orchestrated by masters
0. POD 란
쉽게 말해 여러개의 docker image로 구동된 Instance를 가질 수 있는 가상의 Container 환경
-.-;; 어렵나???
여하간 Docker의 컨테이너이고 안에 image(APP)야 여러개 구성할 수 있으나 POD = Container로 이해 하믄 되는것 같음
POD 의 내부적인 IP나 할당된 Port는 실제 외부로 서비스 되기 위해서는 물리주소와 Port 로의 메핑이 필요하다 (이 기능은 service 개층에서 추상화 되어 실제 서비스로 제공된다)
- Consists of co-located group of containers with shared resources such as volumes and IP addresses
(컨테이너 그룹에 구성되고 볼륨과 IP를 공유해서 구성됨)
- Smallest compute unit that can be defined, deployed, and managed
(배포의 대상이 되는 가장 작은 단위, 미니언)
- May contain one or more co-located applications that are relatively tightly coupled--run with shared context
(POD에 상호 긴밀하게 구성된 하나 이상의 APP이 배포될 수 다. - 텍스트로 실행됨)
= 역할 = (Master에 포함된 기능과 각 Layer에 대한 역할)
1. Scheduler 의 역할
-Determines where to place pods (클러스터에 POD 생성시 POD의 위치결정 - 여유있는 NODE에 POD 생성시 기준생성)
-Reads pod data and finds node that is good fit (POD 데이터를 읽어서 적절한 NODE-여유있는-를 찾아낸다)
-Is independent, standalone, pluggable solution (독립적이고 단독실행되고 플러깅이 가능하다)
2. Replication Controller 역할
하나로 모자라면 더 생성해서 부하 수용량을 늘리고
만들어진 다음에 안쓰면 줄이는 작업을 주로 담당
-Ensures that the desired number of pods actually exist (설정된 포드의 수를 확인 - 기준에 맞도록 POD의 수를 조정한)
-If pods exit or deleted, replication controller instantiates more (POD가 정지되거나 지워지면 설정한 만큼 생성하는 작업 수행)
-If more pods running than desired, replication controller deletes as many as necessary ( 설정보다 많은 수의 POD가 있으면 줄이는 작업 수행)
3. Routing Layer
Paas 환경은 내부의 APP들이 가지는 IP:Port 정보가 사설 IP라고 보면 된다.
즉 외부 환경과 내부 환경이 분리 된다. 이때 외부에서 내부의 서비스에 접근하기 위해서는
적절한 이름찾기 서비스(DNS)와 실제 IP로 접근하기 위하여 NAT Proxy 기능을 제공해야 한다.
이 부분을 Routing 에서 제공한다.
내부-> 외부 뿐 아니라 내부->내부 접속도 처리한다.
외부(공인IP, FQDN으로 접속) --> 서비스 Layer (여러 POD를 단일 서비스로 추상화) --> Router (적절한 POD로 Proxy 처리)
- Provides for external connectivity into services running on OpenShift (서비스에 외부 연결방법을 제공함)
- Takes care of internal and external requests to/from the applications running on OpenShift (실행되는 APP의 내,외부 요청의 처리, 분기 등)
- Router의 역할 :
- Ingress point for traffic destined for OpenShift services (OC서비스 접속 요청의 수신 지점)
- A mapping of an FQDN and path to the endpoints of a service (URL과 접속경로 메핑)
- The router can run on any node in an OpenShift environment (모든 노드에 라우터 구성이 가능하다.)
4. Service layer
- Provides abstraction for accessing members of a logical set of pods (논리집합-여러개의 포드, 서비스)에 접근하기 위한 추상화 기능제공)
- Provides abstraction of service endpoints and internal load balancing (endponts 즉 POD의 추상화와 내부 분산기능 수행)
5. software defined network(SDN)의 역할
내부 네트워크...
Allows pods to connect to the network and communicate (POD를 네트워크에 연결하고 통신하도록 한다)
6. 라벨
Pods tagged with labels, services use label selectors to identify pods they proxy to (서비스계층에서 레이블정보를 기반으로 전달할 POD를 식별한다)
Labels are simple key-value pairs (단순한 키 페어로 구성된다)
Most resources in OpenShift can be given a label (대부분의 리소스를 레이블링 할 수 있다)
= POD의 deploy 단계 =
-OpenShift API/authentication layer- Approves request, considering user's permissions, resource quotas, and other information
-OpenShift scheduling layer - Designates node host for each pod, considering resources' availability and load and application spread between nodes for application high availability
-OpenShift node - Pulls down image to be used from external or integrated registry and starts container (pod) on node
=Changed OpenShift Logical Architect=
기존 V2 - 현 V3
Broker - MASTER : 관리기능및 주요컴포넌트가 운영되는 서버
Mcollective - ocastration은 kubernetes로 : Master와 Node간의 제어를 담당
Gear - POD : 하나의 서버(VM,물리관계없음)에 구성되는 Container, Docker 로 보면 된다
Cartidge - Image : 서비스하는 소프트웨어의 Docker 이미지, Apache, JBoss WAS, Mysql 등등등...만들어도 되고 받아서 해도 된다.
기타
Ansible : Docker Image의 성성 배포 등의 작업에 자동화를 담당하도록...유사한 배포도구가 많이 있으나 RedHat은 이쪽을 미는듯, 범용 Deploy Tool 이므로 여러가지로 사용가능
.이상
2017년 1월 4일 수요일
네팔 여행 Q&A
1. 혼자가냐?
혼자간다.
관광을 가도 싸움이 나는데 이 힘든데를 누굴 댈꼬가나
거기가면 나같은 인간 천지삐까리다 마음맞는 사람만나서 같이 다니면 된다.
여행은 사람이 반이다.
2. 언제 가냐
2017년 1월 9일 출국 ~ 2월 24일 귀국
3. 회사서 보내줘?
사장이 대인배임
4. 와이프가 보내줘?
와이프가 대인배임
5.가족은 뭐먹고 살어? 월급은 나와?
무급 휴직이다. 사장이 땅파서 장사하냐
두달 때울 돈 모아뒀다.
든든한 마이너스 통장도 있다.
더 쓴건 다녀와서 갚으면 된다.
6.너 돈 많어? 두 달 동안 얼마나 쓰는겨?
네팔은 극빈국 중 하나이다
1루피 10원으로 열배 계산하면 되고
극단적으로 밥한끼에 200~300 루피면 먹는다
(물론 호텔가서 존거 먹어도 된다, 한국하고 비슷하거나 더 비싼것도 있다)
물론 외국인 가격은 따로 있으나 트레킹코스의 숙소의 식대는 국가에서 관리해서 바가지는 없다.
트레킹 기간 동안 1일 4만원으로 계산해서 100만원 정도 잡았다 (이정도면 잘먹고 잘 다니고 남을 듯)
두달 감안해서 월 1천달러 정도 해서 2천달러 예상하고 예비비(선물)는 따로 300달러 정도 생각함
3월 부터 매월 조금씩 달러 구입해서 5천달러 모아서 비행기비용 포함해서 남는다
7. 어디를 가나
네팔에는 크게
안나푸르나 히말라야, 쿰푸히말라야, 랑탕히말라야 지역이 있다.
우리가 아는 에베레스트는 랑탕히말라야 지역에 있다.
나는 안나푸르나 지역을 간다.
8.얼마나 높이 가는거야?? 안얼어죽어?
나는 전문 등산인도 아니고 안나푸르나 1봉 의 높이는 8091m(세계10위)이다
절대 못 올라간다
그리고 이곳은 들어가기 위한 허가만 1천만원 정도의 입산비(?)가 필요하다
트레킹은 수만원의 비용으로 허가를 받는다(퍼밋, 팀스 라는것을 발급받아서 간다)
일반인들은 일반적으로 "히말라야 간다" 하면 각 주요 산의 베이스캠프(본격 등산을 위해 산 아래 자락에 마련한 캠프지역)까지 트레킹 하는것을 말한다
안나푸르나 베이스캠프 : "ABC 간다"
마차푸차레 베이스캠프 : "MBC 에 있어!"
에베레스트 베이스캠프 : "EBC 간다!" 에베레스트 간다! < == 간지난다.
그리고 안나푸르나에 간다는 것은 일반적으로 평지에서 ABC 까지 갔다가 오는것으로
"안나푸르나 생츄어리" 라고 부른다.
안나푸르나 히말에는 안나푸르나 하나의 산이 아니라
안나푸르나 1봉,2봉,3봉....등등 많은 산들이 모여있다
이 산들을 빙~ 둘러서 둘래길 걸어가듯이 트레킹하는 것을
"안나푸르나 서킷" 이라고 부른다. (한국사람들이 라운드 라고 부르는데 서킷이 맞단다)
그래서 고도를 보면
서킷을 걸어가면 1000m에서 시작해서 최고 5416m 되시겠다.
생츄어리라면 ABC가 가장 높은 곳이므로 4136m 된다.
백두산이 2880m 이므로 꽤 높고 3000m 이상으로 올라가면 고산증을 주의해야 하므로 천천히 올라갈 예정임
3000m까지는 가을 산행복으로 입어도 낮에는 덥다고 하고
저녁에는??? 얼어디짐 다 껴입고 자야한답니다.
4000m 이상에서는 겨울 복장이고 이후 쏘롱라 패스 통과시 영하 10도 이하
계산을 좀 해보면
해발 100m 마다 0.64도씩 기온이 떨어진다
포카라가 1000m 이고 1월 최저 평균기온이 7도 이므로
쏘롱라 5416m 를 감안하면
표고차 4000m 이면 4000/100= 40 * 0.65도 = -26도 + 7도(포카라) = -19
영하 19도..... 바람불면.....
머 어떻게 다 된다.
9. 산에서 얼마나 있는거야?
대략 계산했을때 20일~28일 정도
시간이 없으면 차타고 좀 올라가서 시작하면 기간을 많이 줄일 수 있으나
본인은 전혀 트레이닝이 되어 있지 않아서
아래서 부터 천천히 걸어서 올라갈 예정이라 기간이 긴 편임
10. 먹는건? 자는건?
이 트레킹 코스는 이미 수십년에 거쳐 개발 되었고
4000미터 이상의 베이스캠프 위치 정도가 이나라면 마을이 있고
마을마다 "롯지" 라는 숙소들이 있다
이 롯지에서 먹고 자고 한다.
난방은 전혀 안되므로 침낭은 싸들고 가야하고
실외와 실내의 온도차이는 거의 없는편이라고함
11. 하필이면 추운 1월이냐
원래 성수기가 따로 있다
근데 성수기에 나도 먹고 살아야지 회사일 바쁠때다 두달이나 휴직 못한다.
사실 12월이 딱인데 (눈 올 확률이 낮다)
일때문에 1월에 출발함
2월 부터는 눈이 내릴 확율이 높아짐 (한번 오면 미터단위로 온다...못넘어감)
더 따뜻해지면 낙석 및 눈사태 확율이 높아져서 목숨이 간당간당할 것 같아서 안되겠다.
.이상.
PS : 더 궁금한건 술사라
혼자간다.
관광을 가도 싸움이 나는데 이 힘든데를 누굴 댈꼬가나
거기가면 나같은 인간 천지삐까리다 마음맞는 사람만나서 같이 다니면 된다.
여행은 사람이 반이다.
2. 언제 가냐
2017년 1월 9일 출국 ~ 2월 24일 귀국
3. 회사서 보내줘?
사장이 대인배임
4. 와이프가 보내줘?
와이프가 대인배임
5.가족은 뭐먹고 살어? 월급은 나와?
무급 휴직이다. 사장이 땅파서 장사하냐
두달 때울 돈 모아뒀다.
든든한 마이너스 통장도 있다.
더 쓴건 다녀와서 갚으면 된다.
6.너 돈 많어? 두 달 동안 얼마나 쓰는겨?
네팔은 극빈국 중 하나이다
1루피 10원으로 열배 계산하면 되고
극단적으로 밥한끼에 200~300 루피면 먹는다
(물론 호텔가서 존거 먹어도 된다, 한국하고 비슷하거나 더 비싼것도 있다)
물론 외국인 가격은 따로 있으나 트레킹코스의 숙소의 식대는 국가에서 관리해서 바가지는 없다.
트레킹 기간 동안 1일 4만원으로 계산해서 100만원 정도 잡았다 (이정도면 잘먹고 잘 다니고 남을 듯)
두달 감안해서 월 1천달러 정도 해서 2천달러 예상하고 예비비(선물)는 따로 300달러 정도 생각함
3월 부터 매월 조금씩 달러 구입해서 5천달러 모아서 비행기비용 포함해서 남는다
7. 어디를 가나
네팔에는 크게
안나푸르나 히말라야, 쿰푸히말라야, 랑탕히말라야 지역이 있다.
우리가 아는 에베레스트는 랑탕히말라야 지역에 있다.
나는 안나푸르나 지역을 간다.
8.얼마나 높이 가는거야?? 안얼어죽어?
나는 전문 등산인도 아니고 안나푸르나 1봉 의 높이는 8091m(세계10위)이다
절대 못 올라간다
그리고 이곳은 들어가기 위한 허가만 1천만원 정도의 입산비(?)가 필요하다
트레킹은 수만원의 비용으로 허가를 받는다(퍼밋, 팀스 라는것을 발급받아서 간다)
일반인들은 일반적으로 "히말라야 간다" 하면 각 주요 산의 베이스캠프(본격 등산을 위해 산 아래 자락에 마련한 캠프지역)까지 트레킹 하는것을 말한다
안나푸르나 베이스캠프 : "ABC 간다"
마차푸차레 베이스캠프 : "MBC 에 있어!"
에베레스트 베이스캠프 : "EBC 간다!" 에베레스트 간다! < == 간지난다.
그리고 안나푸르나에 간다는 것은 일반적으로 평지에서 ABC 까지 갔다가 오는것으로
"안나푸르나 생츄어리" 라고 부른다.
안나푸르나 히말에는 안나푸르나 하나의 산이 아니라
안나푸르나 1봉,2봉,3봉....등등 많은 산들이 모여있다
이 산들을 빙~ 둘러서 둘래길 걸어가듯이 트레킹하는 것을
"안나푸르나 서킷" 이라고 부른다. (한국사람들이 라운드 라고 부르는데 서킷이 맞단다)
그래서 고도를 보면
서킷을 걸어가면 1000m에서 시작해서 최고 5416m 되시겠다.
생츄어리라면 ABC가 가장 높은 곳이므로 4136m 된다.
백두산이 2880m 이므로 꽤 높고 3000m 이상으로 올라가면 고산증을 주의해야 하므로 천천히 올라갈 예정임
3000m까지는 가을 산행복으로 입어도 낮에는 덥다고 하고
저녁에는??? 얼어디짐 다 껴입고 자야한답니다.
4000m 이상에서는 겨울 복장이고 이후 쏘롱라 패스 통과시 영하 10도 이하
계산을 좀 해보면
해발 100m 마다 0.64도씩 기온이 떨어진다
포카라가 1000m 이고 1월 최저 평균기온이 7도 이므로
쏘롱라 5416m 를 감안하면
표고차 4000m 이면 4000/100= 40 * 0.65도 = -26도 + 7도(포카라) = -19
영하 19도..... 바람불면.....
머 어떻게 다 된다.
9. 산에서 얼마나 있는거야?
대략 계산했을때 20일~28일 정도
시간이 없으면 차타고 좀 올라가서 시작하면 기간을 많이 줄일 수 있으나
본인은 전혀 트레이닝이 되어 있지 않아서
아래서 부터 천천히 걸어서 올라갈 예정이라 기간이 긴 편임
10. 먹는건? 자는건?
이 트레킹 코스는 이미 수십년에 거쳐 개발 되었고
4000미터 이상의 베이스캠프 위치 정도가 이나라면 마을이 있고
마을마다 "롯지" 라는 숙소들이 있다
이 롯지에서 먹고 자고 한다.
난방은 전혀 안되므로 침낭은 싸들고 가야하고
실외와 실내의 온도차이는 거의 없는편이라고함
11. 하필이면 추운 1월이냐
원래 성수기가 따로 있다
근데 성수기에 나도 먹고 살아야지 회사일 바쁠때다 두달이나 휴직 못한다.
사실 12월이 딱인데 (눈 올 확률이 낮다)
일때문에 1월에 출발함
2월 부터는 눈이 내릴 확율이 높아짐 (한번 오면 미터단위로 온다...못넘어감)
더 따뜻해지면 낙석 및 눈사태 확율이 높아져서 목숨이 간당간당할 것 같아서 안되겠다.
Day | 날짜 | 요일 | 시간 | 내용 | 비고 | 산행 |
1 | 2017-01-09 | 월 | 13:25 | 출국-도착18:10,픽업,KTM 숙박 | 11시30분 까지 공항도착 | |
2 | 2017-01-10 | 화 | 마야거르츄.타멜.멍때리기 | 숙박은 옥상에서??? | ||
3 | 2017-01-11 | 수 | 14:00 | 포카라이동.예티항공 | 놀이터 | |
4 | 2017-01-12 | 목 | 포카라 숙박.TIMS, PERMIT 발급 | 놀이터 | ||
5 | 2017-01-13 | 금 | 7:30 | 베시사하르(450루피,11시5H)-샨제(Syange) | 버스,짚(차메까지 3k루피.11시30분발 18시30분도착 7h) | |
6 | 2017-01-14 | 토 | 샨제-딸(Tal) | 1700m | 1 | |
7 | 2017-01-15 | 일 | Tal - Darapani- DanaQue | 2300m | 2 | |
8 | 2017-01-16 | 월 | Danaque- 티망 - chame | 2670m | 3 | |
9 | 2017-01-17 | 화 | chame - Bhratnag - up Pisang | 3300m | 4 | |
10 | 2017-01-18 | 수 | up Pisang - 나왈 - Manang | 3540m | 5 | |
11 | 2017-01-19 | 목 | Manang - 캉사르 - 쉬리카르카 -틸리초BC | 고소적응 4300m,또는 휴식 | 6 | |
12 | 2017-01-20 | 금 | 틸리초BC - 틸리초 - 쉬리카르카 | 틸리초4919m | 7 | |
13 | 2017-01-21 | 토 | 쉬리카르카 - 야크카르카 | 4028m | 8 | |
14 | 2017-01-22 | 일 | 야크카르카 | 휴식, 4018m | 9 | |
15 | 2017-01-23 | 월 | 야크카르카 - 쏘롱패디 | 4450m | 10 | |
16 | 2017-01-24 | 화 | 쏘롱패디 - 하이캠프 | 4800m | 11 | |
17 | 2017-01-25 | 수 | 하이캠프 - 쏘롱라 패스 - 묵티나트 | 5416m - 3800m | 12 | |
18 | 2017-01-26 | 목 | 묵티나트 Muktinath | 휴식 | 13 | |
19 | 2017-01-27 | 금 | 묵티나트 - 까끄베니 Eklebhatti -Jomsom | 14 | ||
20 | 2017-01-28 | 토 | 7:00 | Jomsom - 버스 - Tatopani | 7시버스 6H | 15 |
21 | 2017-01-29 | 일 | Tatopani - 시카 Sikha - 고레파니 Ghorepani | 16 | ||
22 | 2017-01-30 | 월 | Ghorepani - Tadapani | 17 | ||
23 | 2017-01-31 | 화 | Tadapani - 촘롱 Chomrong | 18 | ||
24 | 2017-02-01 | 수 | Chomrong - 히말라야호텔 | 19 | ||
25 | 2017-02-02 | 목 | 히말라야호텔 - MBC | 20 | ||
26 | 2017-02-03 | 금 | MBC - ABC | 자던가 걍오던가 | 21 | |
27 | 2017-02-04 | 토 | ABC - 뱀부 | 22 | ||
28 | 2017-02-05 | 일 | 뱀부 - 오스트레일리안켐프 | 23 | ||
29 | 2017-02-06 | 월 | 오캠 - 카레 - 포카라 | 24 | ||
30 | 2017-02-07 | 화 | 포카라 | |||
31 | 2017-02-08 | 수 | 포라카 | |||
32 | 2017-02-09 | 목 | 포카라 | |||
33 | 2017-02-10 | 금 | 포카라 | |||
34 | 2017-02-11 | 토 | 포카라 - 룸비니 | 5H 이상 | ||
35 | 2017-02-12 | 일 | 룸비니 | |||
36 | 2017-02-13 | 월 | 룸비니 | |||
37 | 2017-02-14 | 화 | 룸비니 - 포카라 | 5H 이상 | ||
38 | 2017-02-15 | 수 | 포카라 | |||
39 | 2017-02-16 | 목 | 포라카 | |||
40 | 2017-02-17 | 금 | 포카라 | |||
41 | 2017-02-18 | 토 | 포카라 | |||
42 | 2017-02-19 | 일 | 포카라 - 카트만두 | 버스 8H이상 | ||
43 | 2017-02-20 | 월 | 카트만두 관광 | 타멜-스와얌부 템플 | ||
44 | 2017-02-21 | 화 | 카트만두 관광 | 파슈파티나트 사원 | ||
45 | 2017-02-22 | 수 | 카트만두 관광 | 박타푸르 | ||
46 | 2017-02-23 | 목 | KTM 선물사기 | |||
47 | 2017-02-24 | 금 | 20:30 | 귀국비행기 | KTM International | |
2017-02-25 | 토 | 5:30 | 도착 | |||
2017-02-26 | 일 | 집 | ||||
2017-02-27 | 월 | 집 | ||||
2017-02-28 | 화 | 집 | ||||
2017-03-01 | 수 | 3.1절 | ||||
2017-03-02 | 목 | 출근 |
.이상.
PS : 더 궁금한건 술사라
피드 구독하기:
글 (Atom)