Kubespary 로 Kubernetes 설치하기 – 네이버클라우드 에서

Kubernetes를 설치하는게 번거롭기는 하다.
몇몇 클라우드 벤더들은 이미 잘짜여진 스크립트가 있어서 돌리면 끝나지만 쌩으로 설치하기 너무 귀찮기에 조금 편하게 설치하기 위해 Kubespray를 이용해보기로 했다.

Kubespary 설치방법은 쿠버네티스 공식 페이지의 내용을 참고 하여 진행 하였다.

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubespray/

Kubespary 설치를 진행한 환경은 네이버 클라우드이고

[STAND] 2vCPU, 8GB Mem [g2], Master 1 EA, Worker 2EA

1. python 설치

  – 설치되어 있는 python을 확인하고 pip 설치

$ ls /usr/bin | grep python
python3
python3.6.9

$ apt install python3-pip

2. ansible 설치

  – kubespray는 `ansible`을 기본으로 사용한다.

$ sudo apt install ansible python3-argcomplete

$  ansible --version
ansible 2.5.1
  config file = /root/kubespray/ansible.cfg
  configured module search path = [u'/root/kubespray/library']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Feb 27 2021, 15:10:58) [GCC 7.5.0]

3. SSH 키 복사하기  – `ansible`을 기본으로 사용하기에, 3대의 VM에 ssh 접속을 바로 할 수 있도록 SSH 키를 모두 복사해야 한다.

  – `master`로 사용할 VM에서 `ssh-keygen`으로 key를 생성한 뒤, copy하면 된다.

$ ssh-keygen

$ ssh-copy-id 10.0.10.11
(Master Node와 Worker Node에 모두 키를 복사)

4. swap 메모리 비활성화

  – kubernetes를 설치하기 위해선 swap 메모리를 모두 비활성화 한다.

$ sudo swapoff -a

5. ip forward 설정

  – K8s는 가상 네트워크 환경을 사용해야 하기에 ip_forward를 활성화 해야 한다.
  – master/worker node 모두 적용

$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

$ cat /proc/sys/net/ipv4/ip_forward
1

6. hosts 등록

$ sudo nano /etc/hosts
10.0.10.11  master1
10.0.100.11 worker1
10.0.200.11 worker2

7. kubespray 실행

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

$ cd kubespray

$ git checkout release-2.17

$ sudo pip install -r requirements.txt

$ cp -rfp inventory/sample inventory/mycluster

$ declare -a IPS=(10.0.10.11 10.0.100.11 10.0.200.11)

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

  – sample을 기본으로 나만의 inventory를 만들자 IPS에 설치할 VM들의 IP를 적어주고
– `CONFIG_FILE`을 실행하면 `declare`로 알려준 VM 정보들을 이용하여 config file을 만들어준다.

  – master node, worker node 설정을 확인하게 쉽게 hostname도 맞춰서 적어주는 것이 좋다.

$ nano inventory/mycluster/hosts.yaml

all:
  hosts:
    master1:
      ansible_host: 10.0.10.11
      ip: 10.0.10.11
      access_ip: 10.0.10.11
    worker1:
      ansible_host: 10.0.100.11
      ip: 10.0.100.11
      access_ip: 10.0.100.11
    worker2:
      ansible_host: 10.0.200.11
      ip: 10.0.200.11
      access_ip: 10.0.200.11
  children:
    kube_control_plane:
      hosts:
        master1:
    kube_node:
      hosts:
        worker1:
        worker2:
    etcd:
      hosts:
        master1:
    k8s_cluster:
      children:
        kube_control_plane:
        kube_node:
    calico_rr:
      hosts: {}

  – addon도 필요한 것들을 true로 만들어주자.

$ nano ./inventory/mycluster/group_vars/k8s_cluster/addons.yml


[아래에 해당하는 항목들을 수정해준다]

dashboard_enabled: true
metrics_server_enabled: true
ingress_nginx_enabled: true

8. Static IP 설정

  – DHCP 설정으로 되어있으면 Node의 `/etc/resolv.conf`에 내용들을 참고 해야만 Pod의 Container 안에 있는 `/etc/resolv.conf`에도 그 내용이 반영되어서 

– 원하는 URL(FQDN) 을 사용하기 어려울수 있다. 그래서 Static으로 설정을 해준다.

❯ cd /etc/netplan/

❯ sudo nano ./00-installer-config.yaml

network:
  ethernets:
    enp0s3:
      dhcp4: no
      dhcp6: no
      addresses: [10.0.10.11/24]
      gateway4: 10.0.10.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]
  version: 2

9. Kubernetes 설치 구성

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

10. 사용자 계정 설정

  – root 계정이 아닌 사용자 계정에서 `kubectl` 명령어를 사용하기 위해서는 다음과 같이…

$ mkdir -p $HOME/.kube

$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

11. zsh 자동 완성 셋팅

> echo "source <(kubectl completion zsh)" >> ~/.zshrc
> source ~/.zshrc

12. kubernetes 구성 확인

root@master1:~/kubespray# kubectl get nodes -o wide
NAME      STATUS   ROLES                  AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
master1   Ready    control-plane,master   10m   v1.21.6   10.0.10.11    <none>        Ubuntu 18.04.6 LTS   4.15.0-136-generic   docker://20.10.8
worker1   Ready    <none>                 10m   v1.21.6   10.0.100.11   <none>        Ubuntu 18.04.6 LTS   4.15.0-136-generic   docker://20.10.8
worker2   Ready    <none>                 10m   v1.21.6   10.0.200.11   <none>        Ubuntu 18.04.6 LTS   4.15.0-136-generic   docker://20.10.8

Leave a Reply

Your email address will not be published. Required fields are marked *

error: Content is protected !!