간만에 Kubernetes 실습 환경 구축할 일이 생겨서
새로운 마음으로 진행하면서 기록으로 남겨 보고자 한다.
1. Server
- master 1대 + worker 2대 = 총 3대의 Server를 준비하자.
- 실습 환경은 VirtualBox로 하겠지만, 물리적인 Server로 이하 과정을 진행해도 무방하다.
① CPU / Memory
- Kubernetes 설치를 위해서는 다음과 같은 최소 사양이 필요하다
. master: 2core, 2048MB
. worker: 1core, 1280MB
- 하지만, 원활한 동작을 위해서는 모두 2core, 2GB Spec으로 구성하자
② Network
- VirtualBox의 경우 사실 NAT 방식으로도 Kubernetes 설치가 가능하긴 하다.
- 하지만, 실제 서버 구성과 같은 환경으로 실습을 진행해보기 위해서는 브리지 방식으로 구성해보자.
- 보통 집에서 인터넷을 쓰는 방식이라고 하면 아래 그림과 같은 구성이 될 것이다.
③ Hostname, IP
- 각 서버의 hostname 및 IP를 확인해 놓자.
- worker01 / worker02 서버들의 정보도 추가 확인하자.
2. Server Configure
- Kubernetes 설치를 위해 서버 환경 셋팅을 좀 해줘야 한다.
- 아래 과정은 서버 3대 모두 똑같이 진행해줘야 한다.
① swap off
- K8s에서는 swap 기능이 켜져 있으면 문제가 발생할 수 있으므로 꺼줘야 한다.
(master/worker)$ sudo swapoff -a (master/worker)$ sudo nano /etc/fstab |
- 재부팅되더라도 유지될 수 있도록 아래와 같이 swap 부분을 주석 처리해준다.
# /swap.img none swap sw 0 0 |
② ip_forward
- 가상화 머신끼리 패킷을 주고받을 수 있도록 ip_forward 기능을 켜줘야 한다.
(master/worker)$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' |
③ hosts
- 서버끼리 서로 알 수 있도록 hosts 정보도 등록해주자.
(master/worker)$ sudo nano /etc/hosts |
- 정보는 각자 상황에 맞춰서...
192.168.100.150 master 192.168.100.151 worker01 192.168.100.152 worker02 |
- 혹시 상단에 아래와 같은 부분이 있으면 삭제하자
127.0.0.1 master |
여기까지 진행했으면 깔끔한 진행을 위해 재부팅을 한 번 해주자.
VirtualBox의 장점을 살리기 위해서는 안전한 진행을 위해 snapshot 한 번 찍어주는 것도 좋다.
3. Kubernetes 설치
- Kubespray를 이용해서 Kubernetes 설치를 진행하도록 하겠다.
① Python3 설치
- 일단 기본 패키지로 설치하자
(master)$ sudo apt install -y python3 python3-pip |
② ssh-key 생성
- 서버間 연결을 위해 ssh-key 생성 및 등록 과정이 필요하다.
- 이와 관련해 가장 깔끔한 가이드 문서는 아래와 같다. 참고하면 좋다.
. https://cloud.google.com/compute/docs/connect/create-ssh-keys?hl=ko
- 여기에서는 가장 간단하게 그냥 무조건 기본값으로 그냥 막 엔터만 쳐서 생성하도록 하자.
(master)$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/whatwant/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/whatwant/.ssh/id_rsa Your public key has been saved in /home/whatwant/.ssh/id_rsa.pub The key fingerprint is: SHA256:MtIQVARuKNcksL0D3beQ2aMMbMYfcdybNFVZVRGgDnQ whatwant@master The key's randomart image is: +---[RSA 3072]----+ |....*=+. o.E.+o+*| | * B B. = . o | |+ @ @ +. = . | | * * B oo o | | o = = S . | | . . o | | | | | | | +----[SHA256]-----+ |
③ copy key
- ssh-key 인증을 통해 master에서 worker로 접속할 수 있도록 하기 위한 과정이다
- 명령어에 있는 IP는 worker들의 IP이다. 각자 상황에 맞춰 사용하면 된다.
- 자기 자신(master)에도 등록을 하자.
(master)$ ssh-copy-id 192.168.100.151 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/whatwant/.ssh/id_rsa.pub" The authenticity of host '192.168.100.151 (192.168.100.151)' can't be established. ED25519 key fingerprint is SHA256:Nu127IO/HdpFbO3HvWB8J61ZdhGjXpYDBSb3qg3rSY8. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys whatwant@192.168.100.151's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '192.168.100.151'" and check to make sure that only the key(s) you wanted were added. (master)$ ssh-copy-id 192.168.100.152 (master)$ ssh-copy-id 192.168.100.150 |
④ Kubespray 내려받기
- git clone 방식으로 내려 받고, 최신 버전으로 switch 하자.
(master)$ git clone https://github.com/kubernetes-sigs/kubespray.git (master)$ cd kubespray (master)$ git switch release-2.21 |
⑤ 의존성 패키지 설치
- Kubespray에서 필요로 하는 의존성 패키지들을 설치해주자
(master)$ sudo pip3 install -r requirements.txt |
⑥ 인벤토리 생성
- sample을 기반으로 나만의 설정을 업데이트해주면 된다.
- 당연히 아래 IP 정보는 각자 상황에 맞춰서...
(master)$ cp -rfp inventory/sample inventory/mycluster (master)$ declare -a IPS=(192.168.100.150 192.168.100.151 192.168.100.152) (master)$ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]} |
- 이렇게 생성된 hosts.yaml 파일을 확인 및 수정하자.
(master)$ nano ./inventory/mycluster/hosts.yaml |
- 아래 수정 내역은 공부를 위한 설정이다. 실제 운영 환경이라면 기본 설정대로 하는 것이 낫다.
all: hosts: master: ansible_host: 192.168.100.150 ip: 192.168.100.150 access_ip: 192.168.100.150 worker01: ansible_host: 192.168.100.151 ip: 192.168.100.151 access_ip: 192.168.100.151 worker02: ansible_host: 192.168.100.152 ip: 192.168.100.152 access_ip: 192.168.100.152 children: kube_control_plane: hosts: master: kube_node: hosts: worker01: worker02: etcd: hosts: master: k8s_cluster: children: kube_control_plane: kube_node: calico_rr: hosts: {} |
- addon은 다음 3가지 정도만 설정해보자.
(master)$ nano ./inventory/mycluster/group_vars/k8s_cluster/addons.yml |
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 |
⑦ install
- 이제 설치를 진행하자 !
(master)$ ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml |
- 혹시라도 에러가 발생하면 윗 단계들을 다시 한 번 꼼꼼하게 살펴보기 바란다.
- 지금 직접 해보면서 포스팅하는 것이기에, 분명히 된다 !!! ^^
4. kubectl
- master 서버에서 root 아닌 계정도 kubectl 명령을 사용할 수 있도록 하자
① 인증 정보 복사
- root 계정에 등록된 인증 정보를 복사해오면 된다.
(master)$ mkdir -p ~/.kube (master)$ sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config (master)$ sudo chown $(id -u):$(id -g) ~/.kube/config |
② 자동완성
- bash 쉘 환경에서 자동완성 기능을 추가하려면 다음과 같이 하면 된다.
(master)$ echo 'source <(kubectl completion bash)' >>~/.bashrc (master)$ source ~/.bashrc |
③ check
- 잘 동작하는지 해보자.
(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 master Ready control-plane 21m v1.25.6 worker01 Ready <none> 20m v1.25.6 worker02 Ready <none> 20m v1.25.6 |
잘 된다!!!!!
'Dev Tools > Kubernetes' 카테고리의 다른 글
minikube 설치하기 (0) | 2023.08.19 |
---|---|
Kubernetes Dashboard 설치/셋팅 (0) | 2023.04.20 |
Install `NGINX Ingress Controller` in Kubernetes (4) | 2021.09.18 |
Kubernetes 환경 구축 (Vagrant + VirtualBox + Kubespray) (0) | 2021.07.27 |
MinIO StandAlone in Kubernetes (0) | 2021.05.13 |