프로젝트를 위하여 EKS를 이용하기 전, 쿠버네티스 실습은 대부분 로컬 환경에서 진행되었다.
Vagrant와 Ansible, VirtualBox를 사용하였고, 실행하기까지의 과정을 정리해서 올려 본다.
먼저, 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가 배포되어 있는 것을 확인할 수 있다.
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
먼저, 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