kubernetes를 사용해보기위해 작업 진행중 외부에서 접속하는 vip가 필요.
vm을 활용하여 사용하기에 3대의 가상머신만 생성을 해서 haproxy/keepalived를 사용했어야 했다. 그런데 하나의 머신에서 모든 설정을 관리하기위한 방법으로 ansible을 사용하기로 하였음.
유지보수가 쉬워서.
# Ansible 설치(여러대중 하나만 설치하면됨)
sudo apt update && sudo apt install -y ansible
# 인벤토리 파일 생성 (관리할 노드 목록)
sudo vi /etc/ansible/hosts
# 나의경우 위의 방법으로 수행했을때 파일을 쓸 수 없다고 하여.
# sudo touch /etc/ansible/hosts 를 통해서 파일을 생성하였다.
# 당연히 ansible폴더가 있어야한다.
[masters]
node1 ansible_host=<node1 IP> k_priority=80
node2 ansible_host=<node2 IP> k_priority=100
node3 ansible_host=<node3 IP> k_priority=90
[masters:vars]
ansible_user=<계정이름>
frontend k8s-api
bind 10.0.2.10:6444 # loadbalancer server를 따로 두고있지 않으니 포트를 6444로 변경
default_backend k8s-masters
backend k8s-masters
balance roundrobin
server node1 10.0.2.5:6443 check
server node2 10.0.2.6:6443 check
server node3 10.0.2.4:6443 check
vrrp_instance VI_1 {
state "BACKUP"
interface enp0s3 # 실제 네트워크 인터페이스명으로 수정하세요
virtual_router_id 51
priority {{ k_priority }}
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.0.2.10 # 사용할 가상 IP
}
}
- hosts: masters
become: yes
tasks:
- name: HAProxy 및 Keepalived 설치
apt:
name: [haproxy, keepalived]
state: present
update_cache: yes
- name: HAProxy 설정 파일 배포
template:
src: ./haproxy.cfg.j2
dest: /etc/haproxy/haproxy.cfg
notify: restart haproxy
- name: Keepalived 설정 파일 배포
template:
src: ./keepalived.conf.j2
dest: /etc/keepalived/keepalived.conf
notify: restart keepalived
- name: Keepalived # 서비스를 재시작하고 부팅 시 자동 시작 설정
systemd:
name: keepalived
state: restarted # 서비스를 다시 시작함
enabled: yes # 부팅 시 자동으로 켜지게 함 (이게 안 되어 있었을 겁니다)
daemon_reload: yes # systemd 설정을 새로고침함
- name: HAProxy #서비스를 재시작하고 부팅 시 자동 시작 설정
systemd:
name: haproxy
state: restarted
enabled: yes
daemon_reload: yes
handlers:
- name: restart haproxy
service: name=haproxy state=restarted
- name: restart keepalived
service: name=keepalived state=restarted
# ansible 계정 생성(모든 노드 설정)
sudo useradd -m -s /bin/bash <계정이름>
# ansible 계정 비밀번호 설정 (초기 1회) (모든 노드 설정)
# 실행시 비밀번호 치는 구간이 나옴..
sudo passwd ansible
# sudo 권한 부여 (비밀번호 없이 sudo 가능하게 설정) (모든 노드 설정)
echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible
# ssh 인증 설정
# 1. ansible 계정으로 전환 (이미 전환했다면 패스)
sudo su - ansible
# 2. SSH 키 생성 (이미 만들었다면 패스)
# 중요!!!
# *****엔터만 계속 입력*******
ssh-keygen -t rsa
# 3. 각 노드에 내 열쇠(Public Key)를 전달 (비밀번호를 물어보면 아까 ansible 계정 passwd로 정한걸 입력하세요)
ssh-copy-id ansible@10.0.2.4
ssh-copy-id ansible@10.0.2.5
ssh-copy-id ansible@10.0.2.6
# ansible 계정 상태에서 실행
export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook -i /etc/ansible/hosts ha-setup.yml
# 상태확인
ansible masters -m shell -a "systemctl is-active haproxy"
ansible masters -m shell -a "systemctl is-active keepalived"
# 특정노드만 실행
# ansible 계정에서 실행
ansible-playbook -i /etc/ansible/hosts ha-setup.yml --limit node1
# 중지
# 모든 마스터 노드의 keepalived와 haproxy 중지
ansible masters -m systemd -a "name=keepalived state=stopped" --become
ansible masters -m systemd -a "name=haproxy state=stopped" --become
sudo sysctl -w net.ipv4.ip_nonlocal_bind=1
- hosts: masters
become: yes
tasks:
- name: 비로컬 IP 바인딩 허용 (운영 필수 설정)
sysctl:
name: net.ipv4.ip_nonlocal_bind
value: '1'
state: present
reload: yes
- name: HAProxy 및 Keepalived 설치
apt:
name: [haproxy, keepalived]
state: present
update_cache: yes
- name: HAProxy 설정 파일 배포
template:
src: ./haproxy.cfg.j2
dest: /etc/haproxy/haproxy.cfg
notify: restart haproxy
- name: Keepalived 설정 파일 배포
template:
src: ./keepalived.conf.j2
dest: /etc/keepalived/keepalived.conf
notify: restart keepalived
- name: Keepalived # 서비스를 재시작하고 부팅 시 자동 시작 설정
systemd:
name: keepalived
state: restarted # 서비스를 다시 시작함
enabled: yes # 부팅 시 자동으로 켜지게 함 (이게 안 되어 있었을 겁니다)
daemon_reload: yes # systemd 설정을 새로고침함
- name: HAProxy #서비스를 재시작하고 부팅 시 자동 시작 설정
systemd:
name: haproxy
state: restarted
enabled: yes
daemon_reload: yes
handlers:
- name: restart haproxy
service: name=haproxy state=restarted
- name: restart keepalived
service: name=keepalived state=restarted