환경 설명
총 3개의 환경에서 실습이 진행된다.
- 개발 환경
- CI/CD 환경
- 인프라 환경
개발 환경은 우리가 개발한 프로그램을 올리는 공간이며, CI/CD 환경은 GitHub의 변경 사항을 감지해 배포 서버로 보내주는 중간 역할을 한다. 인프라 환경은 실제 서비스가 배포되는 환경이다.
전반적인 배포 과정을 정리해 보았다.
- 개발하고 GitHub에 커밋한다.
- Jenkins는 GitHub의 변경을 감지하고 Maven에서 라이브러리를 다운로드한다.
- Gradle을 통해서 JAR 파일을 만든다.
- Docker Hub에서 베이스 이미지를 다운로드한다.
- 다운로드한 이미지에 JAR 파일을 넣어서 개인 이미지를 만든다.
- 만들어진 이미지를 Docker Hub에 올린다.
- Jenkins에서는 k8s에 Pod 생성 명령을 실행한다.
- 생성된 Pod에서는 Docker Hub에 만들어진 이미지를 다운로드한다.
- containerd가 다운로드한 이미지를 Pod에 컨테이너로 생성한다.
설치
1. Rocky Linux ISO
2. UTM 설치
3. Rocky 가상 환경 설정
- Start : Virtualize
- Operating System : Linux
- Linux : Boot ISO Image [Browse..] → Rocky ISO 파일 선택
- Hardware : Memory : 6144 MB, CPU Cores : 4
- Size : 32 GB
- Shared Directory : 설정 안 함
- Summary : Name : k8s-master
![]()
UTM에 만들어진 가상 환경 설정에 들어가서 다음과 같이 네트워크 설정을 진행한다.
다음 네트워크 설정은 꼭 해야 한다.
4. 원격 접속
ssh root@192.168.56.15. K8S 설치
echo '======== [4] Rocky Linux 기본 설정 ========'
echo '======== [4-1] 패키지 업데이트 ========'
# 강의와 동일한 실습 환경을 유지하기 위해 Linux Update는 하지 마세요!
# yum -y update
# (x) echo '======== [4-2] 타임존 설정 ========' timedatectl set-timezone Asia/Seoul timedatectl set-ntp true chronyc makestep echo '======== [4-3] [WARNING FileExisting-tc]: tc not found in system path 로그 관련 업데이트 ========' yum install -y yum-utils iproute-tc echo '======== [4-3] [WARNING OpenSSL version mismatch 로그 관련 업데이트 ========' yum update openssl openssh-server -y echo '======= [4-4] hosts 설정 ==========' cat << EOF >> /etc/hosts 192.168.56.30 k8s-master EOF echo '======== [5] kubeadm 설치 전 사전작업 ========' echo '======== [5] 방화벽 해제 ========' systemctl stop firewalld && systemctl disable firewalld echo '======== [5] Swap 비활성화 ========' swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab echo '======== [6] 컨테이너 런타임 설치 ========' echo '======== [6-1] 컨테이너 런타임 설치 전 사전작업 ========' echo '======== [6-1] iptable 세팅 ========' cat <<EOF |tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter cat <<EOF |tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system echo '======== [6-2] 컨테이너 런타임 (containerd 설치) ========' echo '======== [6-2-1] containerd 패키지 설치 (option2) ========' echo '======== [6-2-1-1] docker engine 설치 ========' echo '======== [6-2-1-1] repo 설정 ========' yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo echo '======== [6-2-1-1] containerd 설치 ========' yum install -y containerd.io-1.6.21-3.1.el9.aarch64 systemctl daemon-reload systemctl enable --now containerd echo '======== [6-3] 컨테이너 런타임 : cri 활성화 ========' containerd config default > /etc/containerd/config.toml sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml systemctl restart containerd echo '======== [7] kubeadm 설치 ========' echo '======== [7] repo 설정 ========' cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni EOF echo '======== [7] SELinux 설정 ========' setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config echo '======== [7] kubelet, kubeadm, kubectl 패키지 설치 ========' yum install -y kubelet-1.27.2-150500.1.1.aarch64 kubeadm-1.27.2-150500.1.1.aarch64 kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes systemctl enable --now kubelet echo '======== [8] kubeadm으로 클러스터 생성 ========' echo '======== [8-1] 클러스터 초기화 (Pod Network 세팅) ========' kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address 192.168.56.30 echo '======== [8-2] kubectl 사용 설정 ========' mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config echo '======== [8-3] Pod Network 설치 (calico) ========' kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico-custom.yaml echo '======== [8-4] Master에 Pod를 생성할 수 있도록 설정 ========' kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane- echo '======== [9] 쿠버네티스 편의기능 설치 ========' echo '======== [9-1] kubectl 자동완성 기능 ========' yum -y install bash-completion echo "source <(kubectl completion bash)" >> ~/.bashrc echo 'alias k=kubectl' >>~/.bashrc echo 'complete -o default -F __start_kubectl k' >>~/.bashrc source ~/.bashrc echo '======== [9-2] Dashboard 설치 ========' kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml echo '======== [9-3] Metrics Server 설치 ========' kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yamlk get pods -Ahttps://192.168.56.30:30000/#/login