PaaS/Kubernetes

Kubespray로 Kubernetes 설치하기 (CentOS7)

armyost 2022. 12. 14. 22:39
728x90

예시 호스트명 및 IP

k8s-m : 192.168.122.15

k8s-s : 192.168.122.16

 

설치 OS

CentOS 7버전

 

사전 요구사항 확인

kubespray 는 버전별로 사전 requirements가 조금씩은 다르다.

공식 Github 혹은 웹사이트에서 확인을 해야한다.

 

https://github.com/kubernetes-sigs/kubespray#requirements

 

GitHub - kubernetes-sigs/kubespray: Deploy a Production Ready Kubernetes Cluster

Deploy a Production Ready Kubernetes Cluster. Contribute to kubernetes-sigs/kubespray development by creating an account on GitHub.

github.com

 

기본 서버 준비작업

  • SELINUX OFF
#vi /etc/selinux/config

#selinux disabled 시키기

 

  • 방화벽 내리기
#systemctl disable firewalld
#systemctl stop firewalld

 

  • libselinux 올리기
# sudo yum install libselinux-python3

 

  • 설치 유저의 Sudoers 등록

설치할 유저를 sudo권한을 등록한다. 사실.. root로 그냥 설치하길 권장한다. 권한 때문에 너무 짜증남.

 

/etc/sudoers에 kubeadm 을 등록하고 NOPASS로 설정한다.

그리고 wheel도 NOPASS를 활성화 시킨다.

#vi /etc/sudoers


--------------------
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
kubeadm ALL=(ALL) NOPASSWD: ALL
# 계정을 등록합니다.

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
#%wheel ALL=(ALL)       ALL
# 여기를 주석처리 하고

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL
# 여기를 주석해제 합니다.

-----------------------

 

  • 시스템 작업
# swapoff -a
# sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
# cat /proc/sys/net/ipv4/ip_forward

 

  • Cluster 구성요소 상호간 SSH 열어두기
# ssh-keygen
# ssh-copy-id -i ~/.ssh/id_rsa.pub [Remote Server Hostname OR IP]

해당 내용의 자세한 내용은 

https://armyost.tistory.com/327

 

Linux 서버간 비밀번호 없이 ssh 허용하기

Local Host : 비밀번호 없이 ssh를 접속하는 행위의 주체 Remote Host : 접속 대상 서버 $ ssh-keygen $ ssh-copy-id -i ~/.ssh/id_rsa.pub [Remote Server Hostname OR IP] 예) ssh-copy-id -i ~/.ssh/id_rsa.pub k8s-m ※ .ssh폴더 이하의 chm

armyost.tistory.com

 

  • yum 레포지토리 권한 변경

설치끝날때까지만 열어두자 끝나고 755로 복구

# chmod 777 /etc/yum/pluginconf.d

 

여기까지 (?)의 기본 환경요소는 노드 모두 같아야 한다.

 

그리고 ansible playbook을 돌리는 아래 내용은 playbook을 실행할 노드(클러스터 중 1개 노드)에서 만 세팅하면 된다.

 

1. python3와 pip를 설치한다.

https://armyost.tistory.com/328

 

Linux Python 버전 조정하기

현재 서버에 설치된 python 버전확인하기 # ls /usr/bin | grep python python3 python3.6 Python 3 설치 # yum install python3 하지먄 OS에서 지원하는 버전이 한계가 있다. 이때는 다른 방법을 써야함. 설치된 Python 기

armyost.tistory.com

 

2. pip install을 통해 ansible 및 기타 구성요소를 설치 한다.

이때 kubernetes 홈페이지의 minimum requirement를 참고해야한다.
무작정 requirement 를 설치할게 아니라 ansible, jinja2 버전을 맞추어야하기 때문이다. 이부분이 가장 까다롭다.
ansible, jinja2 버전이 python 버전에 dependency가 있으므로 python 버전이 중요하다.

$ pip3 install -r requirements.txt

 

3. git으로 다운로드 받은 kubespray의 sample을 이용하여 커스텀된 템플릿을 만든다.

$ git clone https://github.com/kubernetes-sigs/kubespray.git
$ cd kubespray # 원활한 작업을 위해 디렉토리 이동

$ cp -rfp inventory/sample inventory/mycluster
$ declare -a IPS=(192.168.122.15 192.168.122.16)

4. Config 파일을 정의한다.

$ CONFIG_FILE=inventory/mycluster/hosts.yaml python contrib/inventory_builder/inventory.py ${IPS[@]}

 

5. kubernetes 클러스터 노드의 역할과 대시보드 등 구성요소를 정의할 수 있는 설정파일을 만든다.

$ vi inventory/mycluster/hosts.yaml
------------------------------------
hosts:
    k8s-m:
      ansible_host: 192.168.122.15
      ip: 192.168.122.15
      access_ip: 192.168.122.15
    k8s-s:
      ansible_host: 192.168.122.16
      ip: 192.168.122.16
      access_ip: 192.168.122.16
  children:
    kube_control_plane:
      hosts:
       k8s-m:
    kube_node:
      hosts:
        k8s-s:
    etcd:
      hosts:
        k8s-m:
    k8s_cluster:
      children:
        kube_control_plane:
        kube_node:
    calico_rr:
      hosts: {}
$ vi inventory/mycluster/group_vars/k8s-cluster/addons.yml
---------------------------------------------------
...
dashboard_enabled: true
...
metrics_server_enabled: true
...
ingress_nginx_enabled: true
...
----------------------------

 

6. 기타 추가 구성요소를 설치한다. 사실 아래 내용은 ansible로 playbook을 돌리다보면 하게 되는 것들이다.

$ yum install python-netaddr
$ pip3 install markupsafe==2.0.1

 

7. 이제 ansible로 kubespray 설치 playbook을 돌리자

$ ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml


8. 설치가 완료되고 나서 kubeconfig하기

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

 

참고

※ containerd로 런타임 사용할때 : 6, 7번 Step 사이에서 진행한다. 

$ vi inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
----------------------------------
container_manager: containerd
$ vi inventory/mycluster/group_vars/etcd.yml
----------------------------------
etcd_deployment_type: host

 

※ kubernetes 버전변경 시

$ vi inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
----------------------------------
kube_version: v1.25.5


※ 배포한 kubernetes 환경을 초기화 할때

$ ansible-playbook -i inventory/mycluster/hosts.yaml reset.yml --become --become-user=root


# docker같은 런타임은 yum으로 지우면됨
#아쉽게도배포한 파일들은 삭제되지 않음으로 주의