| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- grafana on kubernetes
- 딥레이서
- 쿠버네티스 컴포넌트
- Solution Architecture
- Kubernets on Jenkins
- blue-green
- 딥레이서 보상함수
- 솔데스크
- 깃허브 액션
- 로드밸런서 컨트롤러
- jenkins
- livenessPorbe
- terraform
- Firelens
- Aurora cluster
- Prometheus install
- kubernetes 동작 원리
- 그라파나 시각화
- 그라파나 대시보드
- headless service
- github action 사용법
- LoadBalancer Controller
- SAA 합격 후기
- 쿠버네티스
- EKS 클러스터
- AWS 딥레이서
- EFS CSI Driver
- 메탈LB
- Kubernetes
- helm
mingming
Vagrant로 kubernetes Cluster 구축하기 본문


Vagrant
Vagrant는 가상 개발 환경을 관리하고 구축하기 위한 오픈 소스 소프트웨어 입니다. Vagrant를 사용해 VirtualBox , VMware등 가상 개발 환경을 프로비저닝할 수 있습니다.
Vagrant 장점
1. 일관성 유지 : Vagrant를 통해 개발환경을 프로비저닝 하게 되면 동일한 개발환경을 구성할 수 있습니다.
2. 재현성 : Vagrant 환경을 코드로 정의하므로 환경을 언제든지 재현할 수 있습니다.
3. 다양한 환경 지원 : 다양한 가상화 플랫폼 ( VirtualBox , VMware , Hyper-V ) 을 지원합니다.
4. 빠른시작 : 수십대의 가상머신을 하나의 Vagrantfile로 정의해 가상머신을 생성할수 있습니다.
Vagrant 설치하기
vagrant 공식 사이트를 이용해 간편하게 설치할 수 있습니다. 각 OS에 맞게 설치해줍니다.
Vagrant 시작하기
Vagrant 를 시작할 디렉터리에서 vagrant init 명령어를 실행해 줍니다. init 하게 되면 Vagratnfile이 생성됩니다.
Vagrantfile은 Vagrant 소프트웨어를 사용하여 가상 환경을 정의하고 구성하는 데 사용되는 설정파일 입니다.
Vagrantfile은 Ruby 프로그래밍 언어를 기반으로 작성되며, Vagrant가 가상 머신을 생성하고 구성하는 방법을 정의 합니다.
실습 환경
Provider : VitualBox
Master : 1
Node : 1
OS : Ubuntu 20.04
CPU : 2
Memory : 2048
CNI : weavenet
Vagrantfile
Vagrant init 후 생성된 Vagrantfile에 다음과 같이 작성해줍니다.
Vagrant.configure("2") do |config|
#================#
# Master Node #
#================#
config.vm.define "k8s-master" do |cfg|
cfg.vm.box = "ubuntu/focal64"
cfg.vm.provider "virtualbox" do |vb|
vb.name = "k8s-master"
vb.cpus = 2
vb.memory = "2048"
vb.customize ["modifyvm", :id, "--groups", "/k8s-cluster"]
end
cfg.vm.host_name= "master"
cfg.vm.network "public_network", ip: "192.168.0.129"
cfg.vm.network "forwarded_port", guest:22, host:60014, auto_correct: true, id: "ssh"
cfg.vm.synced_folder "../data","./vagrant", disabled:true
cfg.vm.provision "shell", path: "init.sh"
cfg.vm.provision "shell", path: "master.sh"
end
#================#
# Worker Nodes #
#================#
config.vm.define "k8s-worker" do |cfg|
cfg.vm.box = "ubuntu/focal64"
cfg.vm.provider "virtualbox" do |vb|
vb.name = "k8s-worker"
vb.cpus = 2
vb.memory = "2048"
vb.customize ["modifyvm", :id, "--groups", "/k8s-cluster"]
end
cfg.vm.host_name= "worker"
cfg.vm.network "public_network", ip: "192.168.0.130"
cfg.vm.network "forwarded_port", guest:22, host:60015, auto_correct: true, id: "ssh"
cfg.vm.synced_folder "../data","./vagrant", disabled:true
cfg.vm.provision "shell", path: "init.sh"
cfg.vm.provision "shell", path: "worker.sh"
end
end
현재 Vagrantfie 에선 Master 와 Worker 각각 한대씩 정의하고 있지만 필요에 따라 Worker를 추가할 수 있습니다.
init.sh
Master와 Worker 모두에게 적용할 쉘 스크립트 입니다. ssh 설정과 Docker, Kubernetes 설치하는 스크립트 입니다.
#!/bin/bash -xe
echo "[TASK 1] Setting sshd config"
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
echo "[Task 2] Change Timezone & Setting Profile"
# Change Timezone
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
echo "[TASK 3] Disable ufw"
systemctl stop ufw && systemctl disable ufw
echo "[TASK 4] Install base Package"
apt update && apt install -y tree jq sshpass bridge-utils net-tools bat nfs-common sysstat
echo "alias cat='batcvat --paging=never'" >> /etc/profile
echo "[TASK 5] Setting Local DNS Using Hosts file"
echo "192.168.0.129 master" >> /etc/hosts
echo "192.168.0.130 worker" >> /etc/hosts
echo "[TASK 6] docker install"
# docker gpg key add
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# docker repository add
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# docker install
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
echo "[TASK 7] swwap memory off"
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
echo "[TASK 8] edit iptables"
echo "net.bridge.bridge-nf-call-ip6tables = 1" | sudo tee /etc/sysctl.d/k8s.conf
echo "net.bridge.bridge-nf-call-iptables = 1" | sudo tee -a /etc/sysctl.d/k8s.conf
sudo sysctl --system
echo "[TASK 9] kubernetes install"
apt-get install -y apt-transport-https ca-certificates
sudo curl -s /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
rm /etc/containerd/config.toml
systemctl restart containerd
apt-get update
apt-get install -y kubelet kubeadm kubectl
systemctl daemon-reload
systemctl restart kubelet
master.sh
Master 에게만 적용할 쉘 스크립트 입니다. Kubernetes cluster 구성과 Config 파일 설정하는 스크립트 입니다.
#!/bin/bash -xe
echo " K8S Master config start "
echo "[TASK 1] Initial Kubernetes - Pod CIDR 10.32.0.0/12 , Service CIDR 10.200.1.0/24 , API Server 192.168.0.129"
kubeadm init --token 123456.1234567890123456 --token-ttl 0 --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.0.129 --service-cidr 10.200.1.0/24
echo "[TASK 2] Setting kube config file"
mkdir -p /root/.kube
cp -i /etc/kubernetes/admin.conf /root/.kube/config
chown $(id -u):$(id -g) /root/.kube/config
echo "[TASK 3] Alias kubectl to k"
echo 'alias k=kubectl' >> /etc/profile
echo 'complete -F __start_kubectl k' >> /etc/profile
echo "[TASK 4] Install Helm"
curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
echo "[TASK 5] Install weavenet CNI"
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
echo " K8S Master config End "
worker.sh
kubernetes Controlplane join 및 기타 패키지 설치하는 스크립트 입니다.
임의로 토큰 값을 지정 후 인증 절차를 스킵했습니다. 테스트 환경으로만 사용하시길 권장합니다.
#!/bin/bash -xe
echo " K8S Node config start "
echo "[TASK 1] K8S Controlplane Join - API Server 192.168.10.10"
kubeadm join --token 123456.1234567890123456 --discovery-token-unsafe-skip-ca-verification 192.168.0.129:6443
echo "[TASK 2] Alias kubectl to k"
echo 'alias k=kubectl' >> /etc/profile
echo 'complete -F __start_kubectl k' >> /etc/profile
echo "[TASK 3] Install Helm"
curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
echo " K8S Node config End "
vagrant up
위의 스크립트 파일을 Vagrantfile과 같은 경로에 작성 후 vagrant up 을 실행해 줍니다.
vagrant ssh k8s-master
master로 접속해 클러스터 구성이 성공적으로 되었는지 확인합니다.
username : vagrant . password : vagrant
kubectl get nodes
실습이 끝나면 vagrant destroy -f 명령어를 통해 환경을 삭제해 줍니다.
'kubernetes' 카테고리의 다른 글
| kubernetes controller - ReplicaSet (1) | 2023.09.03 |
|---|---|
| kubernetes controller - Replication Controller (1) | 2023.09.03 |
| Kubernetes Pod Resoure 할당하기 (0) | 2023.08.31 |
| EKS Prometheus & Grafana (1) | 2023.08.31 |
| kubernetes static Pod (2) | 2023.08.30 |