Minikube를 가지고 놀고 싶은데,

내 PC를 지저분하게 만들기가 싫어서...


최애하는 VirtualBox에 Ubuntu 설치해놓고

그 안에 Minikube를 설치해보고자 한다.



Reference: https://kubernetes.io/ko/docs/tasks/tools/install-minikube/



작업환경

    - Host OS: Windows 10

    - VirtualBox v6.1.12 r139181 (Qt5.6.2)

    - Guest OS: Ubuntu 18.04 Desktop

        . 2 CPU, 8192 Memory




1. 가상화 환경?!


    - "가상화 지원 여부를 확인"하란다. 현재 작업하고 있는 PC가 AMD라서 좀 찝찝한데...

    - VirtualBox의 Guest 환경에서 아래와 같이 "네스티드 VT-x/AMD-V 사용하기(V)"에 체크를 해주었다.




    - 뭔가 나오니까 된 것 같다.


❯ grep -E --color 'vmx|svm' /proc/cpuinfo

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch ssbd vmmcall fsgsbase avx2 clflushopt arat nrip_save flushbyasid decodeassists

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch ssbd vmmcall fsgsbase avx2 clflushopt arat nrip_save flushbyasid decodeassists




2. VirtualBox 설치 ?


    - VirtualBox in VirtualBox ??? 뭔가 이상하지만... 훌륭한 우리 VirtualBox는 이게 된다.


❯ sudo apt install -y virtualbox virtualbox-ext-pack




3. kubectl 설치


    - 제일 먼저 할 것은 현재 최신 버전이 뭔지 확인하는 것이다.


https://storage.googleapis.com/kubernetes-release/release/stable.txt


    - 지금 확인해본 결과는 v1.18.8 이었다.

    - 다운로드 받자. (다운로드 받는 경로나 wget을 사용하는 것은 개인적인 


> cd /srv/install/kubectl


> wget https://storage.googleapis.com/kubernetes-release/release/v1.18.1/bin/linux/amd64/kubectl


    - 설치하자


❯ chmod +x ./kubectl 


❯ sudo cp ./kubectl /usr/local/bin/kubectl


    - 잘 설치되었는지 확인해보자.


❯ kubectl version --client


Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.1", GitCommit:"7879fc12a63337efff607952a323df90cdc7a335", GitTreeState:"clean", BuildDate:"2020-04-08T17:38:50Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}




4. Minikube 설치


    - 다운로드 받아보자


> cd /srv/install/minikube


> wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -O minikube


    - 설치하자


❯ chmod +x ./minikube 


❯ sudo install minikube /usr/local/bin





5. Minikube 실행


    - 실행은 엄청 쉽다


❯ minikube start





6. dashboard


    - minikube는 대시보드도 간단히 제공해준다.


❯ minikube dashboard


🔌  대시보드를 활성화하는 중 ...

🤔  Verifying dashboard health ...

🚀  프록시를 시작하는 중 ...

🤔  Verifying proxy health ...

🎉  Opening http://127.0.0.1:40647/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

[7090:7090:0822/025314.671219:ERROR:viz_main_impl.cc(150)] Exiting GPU process due to errors during initialization


    - 알아서 Chrome이 뜬다. (아! 개인적인 취향으로 VirtualBox에 Ubuntu 설치하자마자 Chrome을 미리 설치해놨다)





7. docker 설치


    - minikube를 가지고 놀기 위해서는 docker가 필요하다.


❯ sudo apt install -y docker.io


    - 현재 사용자 계정으로 docker를 실행할 수 있도록 하자


❯ sudo usermod -aG docker $USER


❯ newgrp docker


    - 현재 계정을 docker 그룹에 넣어도 바로 적용되지 않는다. 재부팅하기 귀찮아서 newgrp으로 지금 docker 그룹에 속한 것처럼 해버렸다.


    - 잘 설치되었는지 실행해보자. Permission 에러가 안나오면 된다.


❯ docker ps -a


CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES



가지고 노는 것은 다음 기회에~

반응형

 

어떤 도구를 설치해보려고 했는데,

필요 조건이 MongoDB가 이미 설치되어 있어야 한단다.

 

그래서 부랴부랴 MongoDB 설치를 해보고자 한다.

 

 

# Environment

 

  - 기본 환경은 아래와 같다.

 

$ lsb_release -a

No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 18.04.4 LTS

Release:        18.04

Codename:       bionic

 

$ uname -a

Linux chani1804 4.15.0-88-generic #88-Ubuntu SMP Tue Feb 11 20:11:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

 

 

 

# install

 

  - 그냥 바로 apt-get으로 설치하면 된다.

 

$ sudo apt-get install mongodb

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following additional packages will be installed:

  libboost-filesystem1.65.1 libboost-iostreams1.65.1 libboost-program-options1.65.1 libboost-system1.65.1 libgoogle-perftools4 libpcrecpp0v5 libsnappy1v5 libstemmer0d

  libtcmalloc-minimal4 libyaml-cpp0.5v5 mongo-tools mongodb-clients mongodb-server mongodb-server-core

The following NEW packages will be installed:

  libboost-filesystem1.65.1 libboost-iostreams1.65.1 libboost-program-options1.65.1 libboost-system1.65.1 libgoogle-perftools4 libpcrecpp0v5 libsnappy1v5 libstemmer0d

  libtcmalloc-minimal4 libyaml-cpp0.5v5 mongo-tools mongodb mongodb-clients mongodb-server mongodb-server-core

0 upgraded, 15 newly installed, 0 to remove and 0 not upgraded.

Need to get 53.5 MB of archives.

After this operation, 217 MB of additional disk space will be used.

Do you want to continue? [Y/n]

 

 

 

# check status

 

  - 설치를 완료하게 되면 바로 서비스로 실행이 된다.

  - 서비스 상태를 확인해보자.

 

$ systemctl status mongodb.service

● mongodb.service - An object/document-oriented database

   Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)

   Active: active (running) since Tue 2020-03-10 22:58:24 KST; 4min 31s ago

     Docs: man:mongod(1)

 Main PID: 3334 (mongod)

    Tasks: 23 (limit: 2318)

   CGroup: /system.slice/mongodb.service

           └─3334 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf

 

 3월 10 22:58:24 chani1804 systemd[1]: Started An object/document-oriented database.

 

 

  - 버전과 접근 정보를 확인해보자.

 

$ mongo --eval 'db.runCommand({ connectionStatus: 1 })'

MongoDB shell version v3.6.3

connecting to: mongodb://127.0.0.1:27017

MongoDB server version: 3.6.3

{

        "authInfo" : {

                "authenticatedUsers" : [ ],

                "authenticatedUserRoles" : [ ]

        },

        "ok" : 1

}

 

 

 

# 자동 실행

 

  - 재부팅할 때 자동으로 실행되도록 설정해보자.

 

$ sudo systemctl enable mongodb.service

Synchronizing state of mongodb.service with SysV service script with /lib/systemd/systemd-sysv-install.

Executing: /lib/systemd/systemd-sysv-install enable mongodb

 

 

 

# 간단한 사용

 

  - 동작을 하는 것인지 확인만 해보자.

 

$ mongo

MongoDB shell version v3.6.3

connecting to: mongodb://127.0.0.1:27017

MongoDB server version: 3.6.3

Welcome to the MongoDB shell.

For interactive help, type "help".

For more comprehensive documentation, see

        http://docs.mongodb.org/

Questions? Try the support group

        http://groups.google.com/group/mongodb-user

Server has startup warnings:

2020-03-15T04:12:20.040+0900 I STORAGE  [initandlisten]

2020-03-15T04:12:20.040+0900 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine

2020-03-15T04:12:20.040+0900 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem

2020-03-15T04:12:26.952+0900 I CONTROL  [initandlisten]

2020-03-15T04:12:26.952+0900 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.

2020-03-15T04:12:26.952+0900 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.

2020-03-15T04:12:26.952+0900 I CONTROL  [initandlisten]

 

> show dbs

admin   0.000GB

config  0.000GB

local   0.000GB

 

> use tutorial

switched to db tutorial

 

> show dbs

admin   0.000GB

config  0.000GB

local   0.000GB

 

> db.book.insert({"name": "Tutorial", "author": "whatwant"});

WriteResult({ "nInserted" : 1 })

 

> show dbs

admin     0.000GB

config    0.000GB

local     0.000GB

tutorial  0.000GB

 

> ^C

bye

 

 

반응형


docker-compose를 사용할 일이 있어서

docker 설치 후에 바로 docker-compose를 실행하려고 했더니 안되는 것이다.


알고보니 docker-compose는 별도로 설치를 해야한단다.


기본 레퍼런스는 아래 링크이다.

    - https://docs.docker.com/compose/install/


1. dependency packages


$ sudo apt-get install python-pip python-dev libffi-dev libssl-dev gcc libc6-dev make



2. download and setting


$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

$ docker-compose --version


최신 버전은 직접 확인해보고 진행해보시길...


반응형


오랜만에 ubuntu에서 docker를 설치하려고 했는데...

Ubuntu 14.04 환경에서 설치가 안되었다. 이런... (https://www.whatwant.com/863)

뭐 이젠 14.04를 놓아줄 때도 된 것 같아서 ... 이를 극복하기 보다는 16.04 환경에서 진행해보기로 했다.

추가로 18.04에서도 해봤다.



공식 홈페이지 가이드를 따라서 진행했다.

- https://docs.docker.com/engine/installation/linux/ubuntu/



※ 이 블로그를 계속 봐오신 분들은 아시겠지만... 아래 내용은 직접 실행해보면서 작성한 것입니다.

※ VirtualBox를 이용하여 해당 OS를 설치하고 update까지만 마친 상태에서 진행하였습니다.




1. Ubuntu version

    - Ubuntu 14.04는 이제 지원하지 않는 것으로 보인다.

    - 특히, 64bit 만 지원한다! 32bit 안된다!



2. Binary 확인

    - 웹으로 다운로드 받을 버전을 확인하자.




3-1. Download 받기 (16.04)


$ wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/containerd.io_1.2.6-3_amd64.deb

$ wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce-cli_18.09.7~3-0~ubuntu-xenial_amd64.deb

$ wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_18.09.7~3-0~ubuntu-xenial_amd64.deb


3-2. Download 받기 (18.04)


$ wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/containerd.io_1.2.6-3_amd64.deb

$ wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce-cli_18.09.7~3-0~ubuntu-bionic_amd64.deb

$ wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce_18.09.7~3-0~ubuntu-bionic_amd64.deb



4-1. Docker 설치하기 (16.04)


$ sudo dpkg --install ./containerd.io_1.2.6-3_amd64.deb

$ sudo dpkg --install ./docker-ce-cli_18.09.7~3-0~ubuntu-xenial_amd64.deb

$ sudo dpkg --install ./docker-ce_18.09.7~3-0~ubuntu-xenial_amd64.deb


4-2. Docker 설치하기 (18.04)


$ sudo dpkg --install ./containerd.io_1.2.6-3_amd64.deb

$ sudo dpkg --install ./docker-ce-cli_18.09.7~3-0~ubuntu-bionic_amd64.deb

$ sudo dpkg --install ./docker-ce_18.09.7~3-0~ubuntu-bionic_amd64.deb




5. Hello World


$ sudo docker run hello-world

Unable to find image 'hello-world:latest' locally

latest: Pulling from library/hello-world

1b930d010525: Pull complete 

Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8

Status: Downloaded newer image for hello-world:latest


Hello from Docker!

This message shows that your installation appears to be working correctly.


To generate this message, Docker took the following steps:

 1. The Docker client contacted the Docker daemon.

 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.

    (amd64)

 3. The Docker daemon created a new container from that image which runs the

    executable that produces the output you are currently reading.

 4. The Docker daemon streamed that output to the Docker client, which sent it

    to your terminal.


To try something more ambitious, you can run an Ubuntu container with:

 $ docker run -it ubuntu bash


Share images, automate workflows, and more with a free Docker ID:

 https://hub.docker.com/


For more examples and ideas, visit:

 https://docs.docker.com/get-started/



끝~



반응형



회사에서 업무로 Splunk를 도입해서 사용하는 것을 보면서...

Linux 및 OpenSource 매니아로써... 왠지 ELK 조합에 대해서 공부를 해봐야겠다라는 생각이 불끈~!!



다들 알겠지만... 추구하는 방향은 다음과 같다.


   - 오픈소스 구성

   - Ubuntu 환경

   - 패키지 설치보다는 다운로드 방식으로



이번 포스팅에서는 일단 한 번 실행해보는 것으로 만족하겠다.

다음번 포스팅을 하게 되면 그 때 조금 더 실용적인(?) 방향으로 공부해보겠다.




1. [ ElasticSearch ] 다운로드


    - 현재 가장 최신 버전은 6.5.0 이다.

    - 이름에서 보는바와 같이 메인이 되는 놈이다.


$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.tar.gz


$ tar zxvf ./elasticsearch-6.5.0.tar.gz





2. [ LogStash ] 다운로드


    - 일단 다운로드는 받아보는데... 이번에는 아직 안써먹을거다.

    - 로그들을 받아서 분석하는 놈 같은데... 이번엔 생략


$ wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.0.tar.gz


$ tar zxvf ./logstash-6.5.0.tar.gz






3. [ Kibana ] 다운로드


    - 결과물을  보여주는 웹 페이지를 제공해주는 놈이다.


$ wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.0-linux-x86_64.tar.gz


$ tar zxvf ./kibana-6.5.0-linux-x86_64.tar.gz






4. [ ElasticSearch ] 실행환경 설정 - ulimit


    - 프로세스가 사용할 수 있는 자원의 한도 값을 정해주는 ulimit 설정을 해야 한다고 한다.

    - 그런데, ubuntu 설치하고 별도로 설정하지 않았는데, 기본 설정값으로 충분하네?!


$ ulimit -Hn

1048576


    - 보통 4096 정도의 기본값이라고 하던데.... 이미 충분하네!? 그러면 스킵~





5. [ ElasticSearch ] 실행환경 설정 - mmapfs


    - ElasticSearch에서 index 저장 공간으로 mmapfs 을 사용한다고 한다 (기본값)

    - 그런데 기본적으로 주어진 값이 작은 경우 문제가 있을 수 있으니...



$ sudo sysctl -a | grep vm.max_map_count


sysctl: reading key "net.ipv6.conf.all.stable_secret"

sysctl: reading key "net.ipv6.conf.default.stable_secret"

sysctl: reading key "net.ipv6.conf.enp0s3.stable_secret"

sysctl: reading key "net.ipv6.conf.enp0s8.stable_secret"

sysctl: reading key "net.ipv6.conf.lo.stable_secret"

vm.max_map_count = 65530


    - 65530 값은 작다 !! "262144" 로 올려줘야 함


$ sudo nano /etc/sysctl.conf


...

vm.max_map_count=262144


$ sudo reboot


    - 재부팅을 해야 적용이 된다.








6. [ ElasticSearch ] 설정파일 셋팅 - host


    - 접근할 때 사용할 주소를 설정하자


$ cd elasticsearch-6.5.0


$ nano ./config/elasticsearch.yml


...

network.host: 192.168.56.103

...


    - 필자의 경우에는 내부 IP 값을 설정했지만, DNS가 있으면 DNS를 사용하면 된다.


    - localhost 를 사용하지는 말자. 나중에 뭔가 꼬인다.






7. [ ElasticSearch ] 설정파일 셋팅 - JVM Heap


    - 서버의 메모리가 충분히 크다고 하면 별도 설정하지 않아도 된다고 한다.


    - 필자의 경우는 VirtualBox로 사용하는 아이라서 메모리가 충분하지 않다보니...


$ cd elasticsearch-6.5.0


$ nano ./config/jvm.options


...

#-Xms1g

#-Xmx1g

-Xms128m

-Xmx128m

...


    - 2개 값은 동일하게 설정하는 것이 좋단다. 음... 너무 작게 하는 것이 않은가 싶기는 하지만...






8. [ LogStash ] 설정파일 셋팅 - JVM Heap


    - 하는김에 LogStash 의 설정도 이어서 해버리자.


$ cd logstash-6.5.0


$ nano ./config/jvm.options


...

#-Xms1g

#-Xmx1g

-Xms128m

-Xmx128m

...








9. [ Kibana ] 설정파일 셋팅 - host


    - 주소값을 맞춰서 넣자.

$ cd kibana-6.5.0-linux-x86_64/

$ nano ./config/kibana.yml

server.host: "192.168.56.103"
elasticsearch.url: "http://192.168.56.103:9200"

    - server.host는 Kibana의 주소값을 넣는 것이고,
    - elasticsearch.url 값은 말 그대로 elasticsearch의 주소값을 넣어야 한다.
    - 실제로 elasticsearch에서 설정한 값 그대로 넣어야 한다. 주소가 같다고 localhost 등을 넣으면 접속이 안된다.






10. [ ElasticSearch ] 실행


    - 일단은 그냥 무조건 실행해 보자

$ cd elasticsearch-6.5.0

$ ./bin/elasticsearch

    - 데몬으로 실행하고 싶으면 "-d" 옵션을 붙이면 된다 ("-f" 옵션이 디폴트로 적용이 되어 있다)

    - 실행 결과는 http://192.168.56.103:9200 주소로 붙어보면 아래와 같이 나온다.


    - 주소가 같다고 하여 http://localhost:9200 으로 접속하면 제대로 나오지 않는다.






11. [ Kibana ] 실행


    - 단독으로 실행되지 않는다. ElasticSearch가 실행된 상태에서 실행해야 한다.


$ cd kibana-6.5.0-linux-x86_64/


$ ./bin/kibana


    - http://192.168.56.103:5601/ 주소로 접속해보면 아래와 같이 잘 나온다.



    - 뭔가 나오긴 하지만... 집어넣은 데이터가 없으니 볼게 없다.

    - 그나마 Monitoring 기능을 On 시키면 아래와 같은 화면을 볼 수 있다.



    - 이걸론 뭔가 썰렁하니 서버 정보를 밀어 넣어서 화면으로 볼 수 있게 해보자.







12. [ MetricBeat ] 다운로드


    - 일종의 플로그인처럼, 편하게 사용할 수 있도록 제공해주는 아이들을 Beat라고 부른다.

    - 그 중에서 서버 정보 등을 지표처럼 관리할 수 있게 해주는 것이 MetricBeat 이다.


$ wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-6.5.0-linux-x86_64.tar.gz


$ tar zxvf ./metricbeat-6.5.0-linux-x86_64.tar.gz







13. [ MetricBeat ] 환경설정 - host


    - 지금은 같은 서버에 설치를 하고 있지만, 본래 MetricBeat는 모니터링을 할 아이에게 설치를 하는 것이다.

    - Kibana와 ElasticSearch 등의 정보를 알려주자.

$ cd ./metricbeat-6.5.0-linux-x86_64


$ nano ./metricbeat.yml


...


#============================== Kibana =================================


setup.kibana:


  host: "192.168.56.103:5601"



#============================== Outputs =================================


#-------------------------- Elasticsearch output ------------------------------


output.elasticsearch:


  hosts: ["192.168.56.103:9200"]


    - 앞에서 설정한 값들을 참조하여 제대로 알려주면 된다.






14. [ MetricBeat ] 초기 셋업 그리고 실행


    - Kibana에 Dashboard 등을 제대로 반영할 수 있도록 셋업 작업을 해줘야 한다.


$ ./metricbeat setup -c metricbeat.yml


    - 셋업이 완료되면 이제 실행하자.


$ ./metricbeat -e


    - Kibana 에 접속해서 Management 항목을 들어가보면 아래와 같이 Create Index Pattern을 해야한다고 나온다.

    - 하단에 있는 "metricbeat.*"을 눌러버리자.



    - 이제 Dashboard를 보면 뭔가 주르륵 나온다.



    - 지금 뭔가 돌리고 있는 서버가 아니라서.... System Overview 항목을 선택해보자.



    - 뭔가 그럴듯해졌다.




아직은 내가 마음먹은대로 사용하기에는 아는게 부족한 상태다.

임의의 데이터도 집어넣고 임의로 데이터를 뽑아내고 그래야할텐데...



일단 뭔가 나오도록은 했으니... 하나씩 계속 내걸로 만들어야겠다.







아래 사이트를 통해서 많은 도움을 받았다.

    - https://github.com/higee/elastic/wiki/Elastic-Stack-%EC%84%A4%EC%B9%98-%EB%B0%8F-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95.



반응형


앞에서 playbook을 사용하는 것을 살짝 맛봤는데,

이번에는 조금 더 진보된 playbook을 작성해서 사용해보자.





1. 새로운 playbook 작성


    - "apt-get upgrade"를 실행시키기 위한 playbook이다.


$ nano ./apt-upgrade.yml


- hosts: all

  tasks:

    - name: Update and upgrade apt packages

      become: true

      apt:

        upgrade: yes

        update_cache: yes

        cache_valid_time: 86400 #One day




2. 설명....


    - hosts: all → hosts 파일에 등록된 모든 아이들에게 실행하라는 의미

    - tasks → 해야할 일을 적겠다라는 의미

    - name → 해야할 일을 설명? 하기 위해서 적어주는 내용

    - become: true → sudo 권한으로 일을 하겠다라는 의미

    - apt: → apt와 관련된 모듈을 사용하겠다라는 의미

    - upgrade: yes → "apt-get upgrade" 명령과 같은 의미

    - update_cache ... cache_valid_time → "apt-get update"를 실행하는데, 하루 이내라면 생략~




3. apt 모듈과 관련되어서 더 알고 싶다면 아래 링크 참조


    - http://docs.ansible.com/ansible/apt_module.html




4. 그러면 일단 실행 !!!


$ ansible-playbook ./apt-upgrade.yml 


PLAY [all] *************************************************************************************


TASK [Gathering Facts] ***********************************************************************

ok: [192.168.100.105]


TASK [Update and upgrade apt packages] **************************************************

fatal: [192.168.100.105]: FAILED! => {"changed": false, "failed": true, "msg": "Could not find aptitude. Please ensure it is installed."}

to retry, use: --limit @/srv/workspace/ansible/apt-upgrade.retry


PLAY RECAP **********************************************************************************

192.168.100.105            : ok=1    changed=0    unreachable=0    failed=1


    - 어?! 에러가 발생했다. "Could not find aptitude. Please ensure it is installed."





5. aptitude가 필요한 노예 !!!


    - 주인의 말을 제대로 알아듣기 위해서는 노예(slave)에게 aptitude 패키지를 설치해줘야 한다.


$ sudo apt-get install


    - 아니면 이마저도 ansible을 통해 설치해볼 수도 있다.



$ nano ./install-aptitude.yml


- hosts: all

  tasks:

    - name: install aptitude

      raw: sudo apt-get -y install aptitude


$ ansible-playbook ./install-aptitude.yml 


PLAY [all] *************************************************************************************


TASK [Gathering Facts] ***********************************************************************

ok: [192.168.100.105]


TASK [install aptitude] ************************************************************************

changed: [192.168.100.105]


PLAY RECAP **********************************************************************************

192.168.100.105            : ok=2    changed=1    unreachable=0    failed=0   





6. 이제 다시 실행해보자.


$ ansible-playbook ./apt-upgrade.yml 


PLAY [all] *************************************************************************************


TASK [Gathering Facts] ***********************************************************************

ok: [192.168.100.105]


TASK [Update and upgrade apt packages] **************************************************

ok: [192.168.100.105]


PLAY RECAP **********************************************************************************

192.168.100.105            : ok=2    changed=0    unreachable=0    failed=0  




이제서야 ansible 에 대해서 조금 감이 온다!

여러분도???? ^^



이제 실무에 사용하기 위해서 필요한 것들이 뭔가 더 없을지 알아봐야겠다.



반응형


Server 관리를 위해 이것저것 보다가 발견한 Ansible,

그런데, Docker 관련하여 시스템 환경 셋팅을 할 일이 있어서 알아보다가 다시 만난 Ansible


생각보다 나온지는 꽤 된 놈이다. 무려.... 2012년...


아는 사람들은 꽤 오래전부터 사용해왔던듯.




Ubuntu에서 패키지로도 제공은 해주지만,

개인적인 취향으로 (그리고 폐쇄된 망을 사용해야하는 경우를 위해)

직접 Source를 내려받아서 package를 만들어서 설치하는 방법으로 알아보겠다.




1. 필요한 패키지들을 좀 설치해야 한다.


$ sudo apt-get install python-setuptools python-dev libffi-dev libssl-dev python-yaml python-paramiko python-jinja2 cdbs debhelper dpkg-dev reprepro asciidoc devscripts pbuilder sshpass




2. 소스코드는 GitHub로부터 다운로드를 받아야 한다. (당연히 git이 미리 설치되어 있어야 한다)


$ git clone git://github.com/ansible/ansible.git --recursive





3. dep 패키지를 만들어보자.



$ cd ./ansible


$ make deb-src


$ cd ./deb-build/unstable/ansible-2.4.0/


$ dpkg-buildpackage -us -uc -rfakeroot





4. 만들어 놓은 것을 이제 설치해보자.


$ cd ..


$ ls -al

합계 8072

drwxrwxr-x  3 u14 u14    4096  7월 16 20:15 ./

drwxrwxr-x  3 u14 u14    4096  7월 16 19:52 ../

drwxrwxr-x 11 u14 u14    4096  7월 16 20:14 ansible-2.4.0/

-rw-r--r--  1 u14 u14     792  7월 16 20:14 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable.dsc

-rw-rw-r--  1 u14 u14 5845022  7월 16 20:14 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable.tar.gz

-rw-r--r--  1 u14 u14 2387746  7월 16 20:15 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_all.deb

-rw-rw-r--  1 u14 u14    1620  7월 16 20:15 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_amd64.changes

-rw-r--r--  1 u14 u14    2375  7월 16 19:52 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_source.build

-rw-r--r--  1 u14 u14    1240  7월 16 19:52 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_source.changes


$ sudo dpkg --install ./ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_all.deb




5. 버전 확인하기


$ ansible --version

ansible 2.4.0

  config file = /etc/ansible/ansible.cfg

  configured module search path = [u'/home/u14/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']

  ansible python module location = /usr/lib/python2.7/dist-packages/ansible

  executable location = /usr/bin/ansible

  python version = 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4]



엄청 쉽다~!!!



반응형


DevOps 트렌드에 발맞추기 위해서 이런 저런 도구들을 찾아보면,

최근 가장 유명한 것은 Chef 아니면 Puppet 이라는 이름이 검색되곤 한다.


하지만, Ansible도 나름 유명한 도구라는...

그래서 계속 더 공부해보기로 했다.



1. hosts 파일

    - 앞에서는 임의의 위치에 hosts 파일을 만들어서 "-i" 옵션을 통해 직접 파일을 지정해주었다.

    - 하지만, 기본 경로에 해당 파일을 위치시키면 아주 편하게 사용할 수 있다.


$ sudo mkdir /etc/ansible

$ sudo nano /etc/ansible/hosts


[staging]

192.168.100.105



2. playbook 작성

    - 어떤 서버에게 어떤 일을 시킬 것인지를 적어놓는 파일을 playbook 이라고 한다.

    - ping을 하는 것을 하나 만들어보자.


$ nano ./ping-test.yml


- hosts: all

  tasks:

    - name: ping

      action: ping



3. playbook 실행

    - 앞에서 작성한 hosts 파일과 playbook을 이용하여 일을 시켜보자.


$ ansible-playbook ./ping-test.yml


PLAY [all] ***********************************************************************************************************


TASK [Gathering Facts] ********************************************************************************************

ok: [192.168.100.105]


TASK [ping] ********************************************************************************************************

ok: [192.168.100.105]


PLAY RECAP *********************************************************************************************************************

192.168.100.105            : ok=2    changed=0    unreachable=0    failed=0



혹시 노예(Slave)가 말을 잘 듣지 않는 경우라면... 주인의 키를 노예에게 알려주지 않은 것이 아닌지 확인해보자.

    - http://www.whatwant.com/395




Ansible 관련 문서나 가이드들이 꽤 많이 검색이 되지만,

나처럼 멍청한 사람을 위한 친절하고 쉬운 가이드가 없어서 고생하고 있다.


일단, 위의 가장 단순한 형태의 Sample로 playbook을 이용하는 방법을 맛보자!


다음 기회에 한 발 더 걸음을 내딪어보자.


반응형

+ Recent posts