오늘 포스팅을 위해
그동안 많은 과정을 거쳐왔나보다 ^^
- 오래된 노트북 - 우분투 서버로 만들기 (Ubuntu 20.04 Server)
- Ubuntu 18.04 에서 Python3 편하게 사용하기
- Kubernetes Install (Ubuntu 20.04)
- Kubespray 이용하여 Kubernetes 설치하기
- Vagrant 이미지 업로드 (VirtualBox)
- Vagrant 사용하기 - 기본
포스팅으로만 하면 위의 내용 정도뿐이지만,
그 뒤에서 공부하고 시행착오를 겪은 것을 합치면.... 에휴...
멍청하면 손발 뿐만 아니라 온몸이 고생한다더니...
로컬 환경에서 VM을 이용한 Kubernetes 실습 환경을 갖추는 것이 목표이다.
VM 생성도 Vagrant를 이용해서 기본적인 사항은 편하게 할 수 있도록 했고,
Kubernetes 설치 과정은 공부를 위해 직접 수행하는 방식으로 구성했다.
즉, Ubuntu 꾸미기(?) 등과 같은 과정은 Skip 하고
공부가 필요한 Kubernetes 설치 과정은 가급적 직접 수행해보자.
(물론 Kubespray를 사용하지 않고 정말 쌩으로 해보면 좋겠지만... 어느 정도는 ^^)
0. Host Environment
- 다음 Spec이 최소사양이라는 말은 아니고, 참고하시라고...
. CPU: AMD Ryzen 5 3600X
. RAM: 32GB
. VGA: Nvidia GeForce RTX 2060
. OS: Windows 10 Pro
1. Vagrant 설치
2. VirtualBox 설치
3. Vagrant Up
- 다음 내용의 Vagrantfile을 이용해서 VM을 생성하자
(개인적인 취향으로 Host의 git-bash 환경에서 작업하는 것을 좋아하기에
아래 sh 명령어들이 linux 스타일로 되어있다)
host$ mkdir k8s-vm
host$ cd k8s-vm
host$ nano Vagrantfile
host$ vagrant up
# -*- mode: ruby -*-
# vi: set ft=ruby :
N = 2
Vagrant.configure("2") do |config|
config.vm.define "w-k8s-master" do |cfg|
cfg.vm.box = "whatwant/Ubuntu-20.04-Server"
cfg.vm.box_version = "0.2.0"
cfg.vm.hostname = "master"
cfg.vm.network "public_network", ip: "192.168.100.200"
cfg.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.cpus = "2"
vb.memory = "2048"
end
cfg.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get upgrade -y
SHELL
end
(1..N).each do |i|
config.vm.define "w-k8s-worker#{i}" do |cfg|
cfg.vm.box = "whatwant/Ubuntu-20.04-Server"
cfg.vm.box_version = "0.2.0"
cfg.vm.hostname = "worker#{i}"
cfg.vm.network "public_network", ip: "192.168.100.20#{i}"
cfg.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.cpus = "1"
vb.memory = "1280"
end
cfg.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get upgrade -y
SHELL
end
end
end
- master 1대, worker 2대 구성으로 했다.
- VM 이미지는 Ubuntu 20.04 Server 기반으로 미리 살짝 꾸며둔 것을 이용했다.
- VM의 CPU/RAM 설정은 가급적 최소한의 규격으로 잡아두었다.
- `vagrant up` 했을 때 종종 실패를 하는데, 여러 번 try하면 결국 된다.
- IP 설정은 각자의 공유기 셋팅에 따라 수정이 필요하다.
4. (master) Kubespray 실행 환경 만들기
- Kubespray는 ansible 기반이기에 그에 따른 환경을 갖춰야 한다.
- 필요한 package 설치 후 ssh 접근이 가능하도록 키 생성 & 배포를 진행한다.
- 패스워드는 `vagrant`이다.
host$ ssh vagrant@192.168.100.200 master$ sudo apt install ansible python3-argcomplete master$ ssh-keygen master$ ssh-copy-id 192.168.100.200 master$ ssh-copy-id 192.168.100.201 master$ ssh-copy-id 192.168.100.202 |
- ansible에서 접근할 서버 정보들을 입력해놓자
$ sudo nano /etc/ansible/hosts |
[all] master ansible_ssh_host=192.168.100.200 ip=192.168.100.200 ansible_user=vagrant worker1 ansible_ssh_host=192.168.100.201 ip=192.168.100.201 ansible_user=vagrant worker2 ansible_ssh_host=192.168.100.202 ip=192.168.100.202 ansible_user=vagrant [k8s_master] master [k8s_worker] worker1 worker2 |
- 테스트
$ ansible all -m ping |
5. (master/worker) Kubernetes 설치를 위한 환경 설정
- master/worker 모두 Kubernetes 설치를 위한 환경 설정을 진행해야 한다.
- swap 공간 사용하지 않도록 하고, 서로 접근이 용이하게 되도록 host 설정을 해주자.
- ip forward 기능도 활성화 시켜줘야 한다.
- master/worker 접근은 앞에서 했던 것과 마찬가지로 `ssh vagrant@192.168.100.200/201/202` 방식으로...
master/worker$ sudo swapoff -a master/worker$ sudo nano /etc/fstab # /swap.img none swap sw 0 0 master/worker$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' master/worker$ sudo nano /etc/hosts 192.168.100.200 master 192.168.100.201 worker1 192.168.100.202 worker2 |
6. (master/worker) Restart
- 깔끔한 진행을 위해 이 시점에서 모두 restart 진행하고 이후 진행하자!
7. (master) Kubespray 이요한 Kubernetes 설치
- 이제 기본환경 준비는 끝났다.
- Kubespray 설치 준비를 할 차례다.
host$ ssh vagrant@192.168.100.200 master$ cd /srv/install master$ git clone https://github.com/kubernetes-sigs/kubespray.git master$ cd kubespray master$ git checkout v2.16.0 master$ sudo pip install -r requirements.txt master$ cp -rfp inventory/sample inventory/mycluster master$ declare -a IPS=(192.168.100.200 192.168.100.201 192.168.100.202) master$ CONFIG_FILE=inventory/mycluster/hosts.yaml python contrib/inventory_builder/inventory.py ${IPS[@]} master$ nano ./inventory/mycluster/hosts.yaml |
- 아래와 같이 수정해보자.
all: hosts: master: ansible_host: 192.168.100.200 ip: 192.168.100.200 access_ip: 192.168.100.200 worker1: ansible_host: 192.168.100.201 ip: 192.168.100.201 access_ip: 192.168.100.201 worker2: ansible_host: 192.168.100.202 ip: 192.168.100.202 access_ip: 192.168.100.202 children: kube_control_plane: hosts: master: kube_node: hosts: worker1: worker2: etcd: hosts: master: k8s_cluster: children: kube_control_plane: kube_node: calico_rr: hosts: {} |
- 당연하게도 위의 설정은 각자 IP 환경에 맞게 업데이트
master$ nano ./inventory/mycluster/group_vars/k8s_cluster/addons.yml |
- addons는 아래 3개 정도만 해보자. (ingress는 나중에 직접 설치할 것이다)
dashboard_enabled: true helm_enabled: true metrics_server_enabled: true |
- proxy mode도 iptables로 변경해보자
master$ nano ./inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml |
# Kube-proxy proxyMode configuration. # Can be ipvs, iptables kube_proxy_mode: iptables |
8. (master) execute
- 이제 정말로 준비는 끝났다. 설치 시작~!!
master$ cd /srv/install/kubespray master$ ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml |
9. (master) 계정 설정
- root가 아닌 일반 계정에서 `kubectl` 명령어를 사용하기 위한 설정을 하자
master$ mkdir -p $HOME/.kube master$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config master$ sudo chown $(id -u):$(id -g) $HOME/.kube/config master$ echo "source <(kubectl completion zsh)" >> ~/.zshrc master$ source ~/.zshrc |
10. (master) 점검
- 잘 되었는지 살펴보자.
master$ kubectl cluster-info Kubernetes control plane is running at https://127.0.0.1:6443 To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. master$ kubectl get nodes NAME STATUS ROLES AGE VERSION node1 Ready control-plane,master 14m v1.20.7 node2 NotReady <none> 13m v1.20.7 node3 NotReady <none> 13m v1.20.7 |
성공~!!!
'Dev Tools > Kubernetes' 카테고리의 다른 글
Kubernetes 설치 (0) | 2023.04.17 |
---|---|
Install `NGINX Ingress Controller` in Kubernetes (4) | 2021.09.18 |
MinIO StandAlone in Kubernetes (0) | 2021.05.13 |
Kubespray 이용하여 Kubernetes 설치하기 (4) | 2021.05.04 |
Kubernetes Install (Ubuntu 20.04) (0) | 2020.12.28 |