[Ansible] 여러 노드를 일괄 shutdown
5243 단어 Ansible
소개
Kubernetes의 검증을 하고 있습니다만, PC상의 VM환경이므로 매일 끝난 후에 클러스터 노드를 shutdown하고 있습니다. Master 노드 1대, worker 노드 2대의 합계 3대입니다만, 각 서버에 로그인해, shutdown 하는 것이 수수하게 귀찮았습니다.
그래서 이번에는 Ansible을 사용하여 여러 노드를 일괄 shutdown 할 수 있도록하고 싶습니다.
일부러 Ansible 사용하지 않아도 좋다고 생각합니다만, 모처럼이므로 사용해 볼까라고.
Ansible 설치
Gateway 서버에 Ansible을 설치합니다.
# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
# yum install ansible
読み込んだプラグイン:fastestmirror, langpacks
Determining fastest mirrors
・・・
インストール:
ansible.noarch 0:2.9.9-1.el7
・・・
依存性関連をインストールしました:
python-babel.noarch 0:0.9.6-8.el7 python-cffi.x86_64 0:1.6.0-5.el7 python-enum34.noarch 0:1.0.4-1.el7 python-httplib2.noarch 0:0.9.2-1.el7
python-idna.noarch 0:2.4-1.el7 python-jinja2.noarch 0:2.7.2-4.el7 python-markupsafe.x86_64 0:0.11-10.el7 python-paramiko.noarch 0:2.1.1-9.el7
python-pycparser.noarch 0:2.14-1.el7 python2-cryptography.x86_64 0:1.7.2-2.el7 python2-jmespath.noarch 0:0.9.4-2.el7 python2-pyasn1.noarch 0:0.1.9-7.el7
sshpass.x86_64 0:1.06-2.el7
完了しました!
# ansible --version
ansible 2.9.9
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/kosuke/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Apr 2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
초기 설정
조작하는 대상 노드를/etc/ansible/hosts 파일에 기재합니다.
/etc/ansible/hosts・・・
# Here's another example of host ranges, this time there are no
# leading 0s:
## db-[99:101]-node.example.com
[k8s] #任意のグループ名
k8s-master #グループに属する対象サーバのホスト名、IPアドレス
k8s-worker01
k8s-worker02
각 서버에는 Gateway 서버의 공개 키를 전달하여 ssh 비밀번호없이 로그인 할 수 있습니다.
비밀번호 설정
shutdown 명령을 실행할 때 각 서버의 루트 암호가 필요합니다.
Ansible에서 비밀번호를 설정하는 방법에는 여러 가지가 있지만 이번에는 일반 텍스트로 작성한 비밀번호를 암호화하여 playbook 런타임에 지정하도록 합니다.
비밀번호 파일 생성 및 암호화
먼저 일반 텍스트로 파일을 만들고 ansible-vault 명령으로 암호화합니다.
$ vi passwd.yaml
$ ansible-vault encrypt passwd.yaml
New Vault password:
Confirm New Vault password:
Encryption successful
$ cat passwd.yaml
$ANSIBLE_VAULT;1.1;AES256
61653537356139333833333230306466396533646537623366643338643366623761666436343634
3434393962303631643231653663356232613533643233300a363835316336653065326430353534
・・・
ansible.cfg에 다음 부분을 추가합니다.
/etc/ansible/ansible.cfg[defaults]
ask_vault_pass = True #追記
playbook 만들기
다음 playbook을 만들었습니다.
shutdown은 +1을 지정하여 1분 후에 shutdown하도록 합니다. now라고 shutdown은 합니다만, 「FAILED」라고 표시됩니다. 타이밍 문제일지도 모르지만 +1을 지정하여 회피하고 있습니다.
shutdown.yaml- hosts: k8s
tasks:
- name: shutdown
command: /usr/sbin/shutdown -h +1
become: yes
실행
playbook을 실행합니다. 이 때 암호 파일을 지정합니다.
$ ansible-playbook shutdown.yaml --extra-vars="@passwd.yaml"
Vault password:
PLAY [k8s] ***********************************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************************
ok: [k8s-worker01]
ok: [k8s-master]
ok: [k8s-worker02]
TASK [shutdown] ******************************************************************************************************************************************************************************
changed: [k8s-worker02]
changed: [k8s-worker01]
changed: [k8s-master]
PLAY RECAP ***********************************************************************************************************************************************************************************
k8s-master : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
k8s-worker01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
k8s-worker02 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
성공했습니다!
요약
Ansible을 제대로 사용하는 것은 처음이었지만 생각보다 쉽게 할 수있었습니다. 수수하게 귀찮았던 shutdown을 쉽게 할 수 있게 되어 좋았습니다.
Kubernetes와 조합해도 여러가지 할 수 있을 것 같네요. 이쪽도 가는 것은 해보고 싶습니다.
Reference
이 문제에 관하여([Ansible] 여러 노드를 일괄 shutdown), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/eca148ba31cb25cd1bdc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Gateway 서버에 Ansible을 설치합니다.
# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
# yum install ansible
読み込んだプラグイン:fastestmirror, langpacks
Determining fastest mirrors
・・・
インストール:
ansible.noarch 0:2.9.9-1.el7
・・・
依存性関連をインストールしました:
python-babel.noarch 0:0.9.6-8.el7 python-cffi.x86_64 0:1.6.0-5.el7 python-enum34.noarch 0:1.0.4-1.el7 python-httplib2.noarch 0:0.9.2-1.el7
python-idna.noarch 0:2.4-1.el7 python-jinja2.noarch 0:2.7.2-4.el7 python-markupsafe.x86_64 0:0.11-10.el7 python-paramiko.noarch 0:2.1.1-9.el7
python-pycparser.noarch 0:2.14-1.el7 python2-cryptography.x86_64 0:1.7.2-2.el7 python2-jmespath.noarch 0:0.9.4-2.el7 python2-pyasn1.noarch 0:0.1.9-7.el7
sshpass.x86_64 0:1.06-2.el7
完了しました!
# ansible --version
ansible 2.9.9
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/kosuke/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Apr 2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
초기 설정
조작하는 대상 노드를/etc/ansible/hosts 파일에 기재합니다.
/etc/ansible/hosts
・・・
# Here's another example of host ranges, this time there are no
# leading 0s:
## db-[99:101]-node.example.com
[k8s] #任意のグループ名
k8s-master #グループに属する対象サーバのホスト名、IPアドレス
k8s-worker01
k8s-worker02
각 서버에는 Gateway 서버의 공개 키를 전달하여 ssh 비밀번호없이 로그인 할 수 있습니다.
비밀번호 설정
shutdown 명령을 실행할 때 각 서버의 루트 암호가 필요합니다.
Ansible에서 비밀번호를 설정하는 방법에는 여러 가지가 있지만 이번에는 일반 텍스트로 작성한 비밀번호를 암호화하여 playbook 런타임에 지정하도록 합니다.
비밀번호 파일 생성 및 암호화
먼저 일반 텍스트로 파일을 만들고 ansible-vault 명령으로 암호화합니다.
$ vi passwd.yaml
$ ansible-vault encrypt passwd.yaml
New Vault password:
Confirm New Vault password:
Encryption successful
$ cat passwd.yaml
$ANSIBLE_VAULT;1.1;AES256
61653537356139333833333230306466396533646537623366643338643366623761666436343634
3434393962303631643231653663356232613533643233300a363835316336653065326430353534
・・・
ansible.cfg에 다음 부분을 추가합니다.
/etc/ansible/ansible.cfg[defaults]
ask_vault_pass = True #追記
playbook 만들기
다음 playbook을 만들었습니다.
shutdown은 +1을 지정하여 1분 후에 shutdown하도록 합니다. now라고 shutdown은 합니다만, 「FAILED」라고 표시됩니다. 타이밍 문제일지도 모르지만 +1을 지정하여 회피하고 있습니다.
shutdown.yaml- hosts: k8s
tasks:
- name: shutdown
command: /usr/sbin/shutdown -h +1
become: yes
실행
playbook을 실행합니다. 이 때 암호 파일을 지정합니다.
$ ansible-playbook shutdown.yaml --extra-vars="@passwd.yaml"
Vault password:
PLAY [k8s] ***********************************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************************
ok: [k8s-worker01]
ok: [k8s-master]
ok: [k8s-worker02]
TASK [shutdown] ******************************************************************************************************************************************************************************
changed: [k8s-worker02]
changed: [k8s-worker01]
changed: [k8s-master]
PLAY RECAP ***********************************************************************************************************************************************************************************
k8s-master : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
k8s-worker01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
k8s-worker02 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
성공했습니다!
요약
Ansible을 제대로 사용하는 것은 처음이었지만 생각보다 쉽게 할 수있었습니다. 수수하게 귀찮았던 shutdown을 쉽게 할 수 있게 되어 좋았습니다.
Kubernetes와 조합해도 여러가지 할 수 있을 것 같네요. 이쪽도 가는 것은 해보고 싶습니다.
Reference
이 문제에 관하여([Ansible] 여러 노드를 일괄 shutdown), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/eca148ba31cb25cd1bdc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ vi passwd.yaml
$ ansible-vault encrypt passwd.yaml
New Vault password:
Confirm New Vault password:
Encryption successful
$ cat passwd.yaml
$ANSIBLE_VAULT;1.1;AES256
61653537356139333833333230306466396533646537623366643338643366623761666436343634
3434393962303631643231653663356232613533643233300a363835316336653065326430353534
・・・
[defaults]
ask_vault_pass = True #追記
다음 playbook을 만들었습니다.
shutdown은 +1을 지정하여 1분 후에 shutdown하도록 합니다. now라고 shutdown은 합니다만, 「FAILED」라고 표시됩니다. 타이밍 문제일지도 모르지만 +1을 지정하여 회피하고 있습니다.
shutdown.yaml
- hosts: k8s
tasks:
- name: shutdown
command: /usr/sbin/shutdown -h +1
become: yes
실행
playbook을 실행합니다. 이 때 암호 파일을 지정합니다.
$ ansible-playbook shutdown.yaml --extra-vars="@passwd.yaml"
Vault password:
PLAY [k8s] ***********************************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************************
ok: [k8s-worker01]
ok: [k8s-master]
ok: [k8s-worker02]
TASK [shutdown] ******************************************************************************************************************************************************************************
changed: [k8s-worker02]
changed: [k8s-worker01]
changed: [k8s-master]
PLAY RECAP ***********************************************************************************************************************************************************************************
k8s-master : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
k8s-worker01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
k8s-worker02 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
성공했습니다!
요약
Ansible을 제대로 사용하는 것은 처음이었지만 생각보다 쉽게 할 수있었습니다. 수수하게 귀찮았던 shutdown을 쉽게 할 수 있게 되어 좋았습니다.
Kubernetes와 조합해도 여러가지 할 수 있을 것 같네요. 이쪽도 가는 것은 해보고 싶습니다.
Reference
이 문제에 관하여([Ansible] 여러 노드를 일괄 shutdown), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/eca148ba31cb25cd1bdc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Ansible] 여러 노드를 일괄 shutdown), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dingtianhongjie/items/eca148ba31cb25cd1bdc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)