Kubernetes

[Kubernetes] Kubespray 로 K8S Cluster 구성하기

IT-PAPA 2023. 12. 12. 06:06
반응형

Kubespray는 Kubernetes 클러스터를 배포하고 관리하기 위한 오픈 소스 도구입니다. 이는 Ansible을 기반으로 하며, 여러 대의 머신에 걸쳐 Kubernetes를 설치하고 구성하는 프로세스를 자동화하는 데 사용됩니다. Kubespray를 사용하면 간편하게 다양한 환경에서 Kubernetes 클러스터를 설정할 수 있습니다.

다음은 Kubespray의 주요 특징 및 사용 방법에 대한 간단한 설명입니다:

  1. Ansible 기반: Kubespray는 Ansible 플레이북을 사용하여 Kubernetes를 설치하고 구성합니다. Ansible은 간단하면서도 강력한 오픈 소스 자동화 도구로, YAML을 사용하여 간단한 구성 파일을 작성하여 인프라스트럭처를 정의할 수 있습니다.
  2. 다양한 인프라스트럭처 지원: Kubespray는 여러 가지 인프라스트럭처 환경에서 동작할 수 있습니다. 가상 머신, 온프레미스 하드웨어, 클라우드 제공 업체(예: AWS, GCP, Azure) 등 다양한 플랫폼을 지원합니다.
  3. 다양한 Kubernetes 버전 지원: Kubespray는 여러 버전의 Kubernetes를 지원합니다. 새로운 Kubernetes 릴리스가 나올 때마다 Kubespray는 해당 버전에 대한 지원을 업데이트할 수 있습니다.
  4. 유연한 구성 옵션: Kubespray는 다양한 구성 옵션을 제공하여 사용자가 클러스터를 정밀하게 조정할 수 있습니다. 네트워크 구성, Pod 네트워킹, 인증 및 권한 부여 등에 대한 많은 설정이 가능합니다.
  5. 커스터마이징 가능: Ansible 플레이북을 통해 Kubespray를 실행하기 전에 사용자는 구성 파일을 편집하여 클러스터 설정을 자유롭게 조정할 수 있습니다.

Kubespray를 사용하려면 다음 단계를 따릅니다:

  1. 의존성 설치: Kubespray를 사용하려면 Ansible 및 관련 의존성을 설치해야 합니다.
  2. 인벤토리 파일 작성: 클러스터를 구성할 머신들의 목록과 그에 대한 구성을 담은 Ansible 인벤토리 파일을 작성합니다.
  3. 구성 파일 수정: 클러스터의 특정 구성을 변경하려면 Kubespray의 구성 파일을 수정합니다.
  4. Kubespray 실행: Ansible을 사용하여 Kubespray를 실행하여 클러스터를 배포합니다.
  5. 검증 및 관리: 클러스터가 정상적으로 배포되면 Kubernetes 명령어 및 대시보드를 사용하여 클러스터를 관리하고 검증합니다.

1. VM 구성 Master 1대, NodeWorker 3대

m-k8s : ubuntu 22.04 / 16GB / 192.168.0.90
n1-k8s : ubuntu 22.04 / 16GB / 192.168.0.91
n2-k8s : ubuntu 22.04 / 16GB / 192.168.0.92
n3-k8s : ubuntu 22.04 / 16GB / 192.168.0.93

 

2. Netplan 으로 각각의 Master, Node VM IP 설정

$ vim /etc/netplan/00-installer-config.yaml

=======================================================
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:  # 여기서 ens33은 실제 사용 중인 인터페이스 이름입니다. 본인 시스템에 맞게 변경하세요.
      addresses: # 변경 후 IP 주소:
        - 192.168.0.90/24
      routes:
        - to: 0.0.0.0/0  # 모든 트래픽에 대한 기본 경로
          via: 192.168.0.1  # 게이트웨이 IP 주소
      nameservers:
        addresses: [192.168.0.1, 8.8.8.8, 8.8.4.4]
=======================================================

$ sudo netplan apply
$ ip address show

 

3. ssh key 등록 

# 아래 명령어는 Master 에서 실행
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub

# 아래 명령어는 모두 Master, WorkerNode 에 적용
$ vi ~/.ssh/authorized_keys
$ chmod 664 ~/.ssh/authorized_keys

 

4. Kubespray Git clone

git clone https://github.com/kubernetes-sigs/kubespray.git

 

5. Python 설치

sudo apt install -y python3-pip

 

6. Kubespray 에 필수 패키지 설치 with Python

cd kubespray/
sudo pip3 install -r requirements.txt

===============================
ansible==8.5.0
cryptography==41.0.4
jinja2==3.1.2
jmespath==1.0.1
MarkupSafe==2.1.3
netaddr==0.9.0
pbr==5.11.1
ruamel.yaml==0.17.35
ruamel.yaml.clib==0.2.8
===============================

 

7. master, node Inventory 설정

$ cp -r inventory/sample inventory/mycluster
$ vi inventory/mycluster/inventory.ini

==============================================================================
# ## Configure 'ip' variable to bind kubernetes services on a
# ## different ip than the default iface
# ## We should set etcd_member_name for etcd cluster. The node that is not a etcd member do not need to set the value, or can set the empty string value.
[all]
m-k8s ansible_host=192.168.0.90  ip=192.168.0.90 etcd_member_name=etcd1
n1-k8s ansible_host=192.168.0.91  ip=192.168.0.91
n2-k8s ansible_host=192.168.0.92  ip=192.168.0.92
n3-k8s ansible_host=192.168.0.93  ip=192.168.0.93

# ## configure a bastion host if your nodes are not directly reachable
# [bastion]
# bastion ansible_host=x.x.x.x ansible_user=some_user

[kube_control_plane]
m-k8s

[etcd]
m-k8s

[kube_node]
n1-k8s
n2-k8s
n3-k8s

[calico_rr]

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
==============================================================================

 

8. kubespray 로 kubernetes cluster(master,node) 설치 전 셋팅 및 설치

ansible all -i inventory/mycluster/inventory.ini -m ping
ansible all -i inventory/mycluster/inventory.ini -m apt -a 'update_cache=yes' --become
ansible all -i inventory/mycluster/inventory.ini -a 'sudo timedatectl set-timezone Asia/Seoul' --become
ansible all -i inventory/mycluster/inventory.ini -a 'date'
ansible all -i inventory/mycluster/inventory.ini -a 'timedatectl'
ansible-playbook -i inventory/mycluster/inventory.ini -become --become-user=root cluster.yml

 

9. Kubernetes 설치 확인

kubectl get nodes

root@m-k8s:~# kubectl get node
NAME     STATUS   ROLES           AGE     VERSION
m-k8s    Ready    control-plane   1d10h   v1.28.4
n1-k8s   Ready    <none>          1d10h   v1.28.4
n2-k8s   Ready    <none>          1d10h   v1.28.4
n3-k8s   Ready    <none>          1d10h   v1.28.4

 

10. kubectl 자동 완성

# bash-completion 패키지를 먼저 설치한 후, bash의 자동 완성을 현재 셸에 설정한다
# 자동 완성을 bash 셸에 영구적으로 추가한다

source <(kubectl completion bash) 
echo "source <(kubectl completion bash)" >> ~/.bashrc

alias k=kubectl
complete -F __start_kubectl k

 

관련 사이트

kubernetes-sigs/kubespray: Deploy a Production Ready Kubernetes Cluster (github.com)

 

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

Readme (kubespray.io)

 

Kubespray - Deploy a Production Ready Kubernetes Cluster

 

kubespray.io

 

728x90
반응형
LIST