Kubespary 로 Kubernetes 설치하기 – 네이버클라우드 에서
Kubernetes를 설치하는게 번거롭기는 하다.
몇몇 클라우드 벤더들은 이미 잘짜여진 스크립트가 있어서 돌리면 끝나지만 쌩으로 설치하기 너무 귀찮기에 조금 편하게 설치하기 위해 Kubespray를 이용해보기로 했다.
Kubespary 설치방법은 쿠버네티스 공식 페이지의 내용을 참고 하여 진행 하였다.
https://kubernetes.io/ko/docs/setup/production-environment/tools/kubespray/
Kubespary 설치를 진행한 환경은 네이버 클라우드이고
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