로컬 환경에서 쿠버네티스 실행하기

황서희·2023년 4월 24일
0
post-thumbnail

프로젝트를 위하여 EKS를 이용하기 전, 쿠버네티스 실습은 대부분 로컬 환경에서 진행되었다.
Vagrant와 Ansible, VirtualBox를 사용하였고, 실행하기까지의 과정을 정리해서 올려 본다.

1. Vagrant를 이용한 가상머신 배포

먼저, Vagrant를 이용하여 가상머신을 생성한다.

Vagrant.configure("2") do |config|
  config.vm.define "control-plane" do |config|
    config.vm.box = "ubuntu/focal64"
      config.vm.provider "virtualbox" do |vb|
        vb.name = "control-plane"
        vb.memory = "2048"
        vb.cpus = 2
      end
      config.vm.hostname = "control-plane"
      config.vm.network "private_network", ip: "192.168.56.11"
  end

  config.vm.define "worker1" do |config|
    config.vm.box = "ubuntu/focal64"
      config.vm.provider "virtualbox" do |vb|
        vb.name = "worker1"
        vb.memory = "1536"
        vb.cpus = 1
      end
      config.vm.hostname = "worker1"
      config.vm.network "private_network", ip: "192.168.56.21"
  end

  config.hostmanager.enabled = true
  config.hostmanager.manage_guest = true
  
  config.vm.provision "shell", inline: <<-SHELL
    sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
    sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
    sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
    systemctl restart ssh
  SHELL

end

컴퓨터의 사양 문제로 worker node를 한 개만 생성하였으므로, worker node의 갯수를 추가하고 싶으면 worker1 아래에 추가하면 된다. 작성한 Vagrantfile을

vagrant up

명령어를 통해 배포하면, VirtualBox에 Master와 Worker Node가 배포되어 있는 것을 확인할 수 있다.

2. control-plane 설정과 kubespray 설치

control-plane에 ssh를 통해 접속하여, key 기반의 인증을 control-plane과 모든 worker node에 설정해줘야 한다.

그 전에, /etc/hosts에서 각각의 ip를 등록해 주자.

vi /etc/hosts

127.0.0.1 localhost
127.0.1.1 worker2
192.168.56.11 control-plane
192.168.56.21 worker1
ssh-keygen
ssh-copy-id worker1 #worker node는 worker node에서 실행해야 한다.

이후 git과 python을 설치해 준다.

sudo apt-get update
sudo apt install python3 python3-pip
sudo apt install git

kubespray를 git clone으로 설치하고, pip로 패키지를 설치한다.

git clone --single-branch --branch=release-2.19 https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
sudo pip3 install -r requirements.txt

3. Ansible 설정

먼저, mycluster 폴더를 수정해서 사용한다.

cp -rfp inventory/sample/ inventory/mycluster
vi inventory/mycluster/inventory.ini
[all]
worker1 ansible_host=192.168.56.21  ip=192.168.56.21 ansible_sudo_pass='vagrant'
control-plane ansible_host=192.168.56.11  ip=192.168.56.11

[all:vars]
ansible_python_interpreter=/usr/bin/python3

[kube_control_plane]
control-plane

[etcd]
control-plane

[kube_node]
worker1

[calico_rr]

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr

이후, addons.yaml 파일을 수정해 준다.

root@control-plane:~/kubespray/inventory/mycluster/group_vars/k8s_cluster# ls
addons.yml          k8s-net-canal.yml    k8s-net-kube-ovn.yml     k8s-net-weave.yml
k8s-cluster.yml     k8s-net-cilium.yml   k8s-net-kube-router.yml
k8s-net-calico.yml  k8s-net-flannel.yml  k8s-net-macvlan.yml
ingress_nginx_enabled: true
metrics_server_enabled: true
metallb_enabled: true
metallb_ip_range:
  - "192.168.56.50-192.168.56.99"
metallb_protocol: "layer2"

k8s-cluster.yml 에서 해당 줄을 수정한다.

kube_proxy_strict_arp: true

마지막으로 쿠버네티스 클러스터를 배포(오랜 시간이 걸린다) 하고, vagrant 사용자에 kubectl 권한을 부여한다.

ansible-playbook -i inventory/mycluster/inventory.ini -b cluster.yml -v
mkdir ~/.kube
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $USER:$USER ~/.kube/config

오류

Vagrant 설치 과정에서 문제가 있었는지, IP가 잡히지 않아 쿠버네티스 배포 과정에서 문제가 있었다. 이는 수동으로 IP를 설정해서 해결하였다. (ubuntu 20.04 기준)

/etc/netplan/의 yaml 파일을 dhcp에서 고정 IP로 변경해 준다.

network:
  ethernets:
    enp0s8:
      addresses:
        - 192.168.56.21/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
        	- 8.8.8.8
  version: 2
profile
다 아는 건 아니어도 바라는 대로

0개의 댓글