Provisioning - 3. Ansible을 이용해 kubernetes cluster 생성하기

Provisioning - 3. Ansible을 이용해 kubernetes cluster 생성하기

2020-02-28

Index

목표

Ansible을 이용해서 k8s cluster을 생성해보겠습니다.

cluster를 생성하는 방법은 Container Orchestration - 4. kubernetes Install에 작성 한 것과 같이 master 1대와 node 2대를 셋팅해 보겠습니다.

기존에 공유드린 것과 같이 master / node 클러스터 구성시 방화벽작업 을 하고 docker를 설치 하고 k8s 관련 install 작업을 했습니다. 이러한 작업을 ansible playbook 을 이용해 한번에 처리해보도록 하겠습니다.

1. 구성

host name 역할 ansible-manager Ansible 제어 노드 및 작업자용 노드 ansible-master k8s Master ansible-node1 k8s Node ansible-node2 k9s Node

2. Ansible 설치

2.1 ansible-manager 에 Ansible 설치

ansible-manager 에 Ansible을 설치하겠습니다. Ansible 이 다른 IaC보다 편한점이 Pull 방식이 아닌 Push 방식으로 대상 서버에는 별도의 셋팅이 필요하지 않습니다.

yum install -y eple-release yum install -y ansible

2.2 Password 없이 접속이 가능하도록 작업

ROOT 로그인을 허용하도록 설정을 수정합니다. ansible-master , ansible-node1 , ansible-node2 에서 작업

vi /etc/ssh/sshd_config

PermitRootLogin yes PasswordAuthentication yes

systemctl restart sshd

ansible-manager 에서 SSH키 생성을 합니다. password 는 별도로 작성하지 않습니다.

ssh-keygen

생성한 key를 ansible-master, ansible-node1, ansible-node2 에 복사해줍니다.

ssh-copy-id [serverIP]

ssh 접속이 되는지 확인합니다

ssh [server_host_name]

2.1 Inventory를 작성하여 Ping Test

다음과 같이 host파일을 생성합니다.

master ansible_host=10.128.0.40 ansible_user=root [nodes] node1 ansible_host=10.128.0.42 ansible_user=root node2 ansible_host=10.128.0.43 ansible_user=root

ping 명령어를 통해 연결상태를 확인합니다.

ansible -m ping all -i hosts

3. Ansible을 이용해 k8s 클러스터 구성해보기

3.1 setup.yml 작성

master nodes 에 공통으로 설정할 내용과 k8s 설치용 playbook 파일을 작성합니다.

https://raw.githubusercontent.com/thinkub/ansible-k8s-cluster/master/setup.yml

3.2 playbook 실행 shell script 작성

작성한 playbook 용 yaml 파일을 실행할 shell script 를 작성합니다.

https://raw.githubusercontent.com/thinkub/ansible-k8s-cluster/master/build-cluster.sh

3.3 실행

./build-cluster.sh

3.4 결과

TASK [add Kubernetes YUM repository] *************************************************************************** changed: [master] changed: [node1] changed: [node2] TASK [install kubelet] ****************************************************************************************** changed: [master] changed: [node1] changed: [node2] TASK [install kubeadm] ****************************************************************************************** changed: [master] changed: [node1] changed: [node2] TASK [start kubelet] ******************************************************************************************** changed: [master] changed: [node1] changed: [node2] TASK [install kubectl] ****************************************************************************************** ok: [master] ok: [node1] ok: [node2] PLAY [master] *************************************************************************************************** TASK [Gathering Facts] ****************************************************************************************** ok: [master] TASK [initialize the cluster] *********************************************************************************** changed: [master] TASK [create .kube directory] *********************************************************************************** changed: [master] TASK [copy admin.conf to user kube config] ******************************************************************** changed: [master] TASK [install Pod network] ************************************************************************************** changed: [master] PLAY [master] *************************************************************************************************** TASK [get join command] ***************************************************************************************** changed: [master] TASK [set join command] ***************************************************************************************** ok: [master] PLAY [nodes] **************************************************************************************************** TASK [Gathering Facts] ****************************************************************************************** ok: [node1] ok: [node2] TASK [join cluster] ********************************************************************************************* changed: [node1] changed: [node2] PLAY RECAP ****************************************************************************************************** master : ok=21 changed=16 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0 node1 : ok=16 changed=12 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0 node2 : ok=16 changed=12 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

master 에서 cluster 확인하기

참고

from http://thinkub.tistory.com/29 by ccl(A) rewrite - 2021-08-08 23:00:45