개발 환경 세팅

이클립스로 개발환경을 세팅하고 Github로 소스를 Push하는 내용을 다룹니다.



파이프라인 전체 구성 및 흐름


Setting Overview for k8s Deploy Concept

[사전가입] 관련 URL

Github: https://github.com/
DockerHub: https://hub.docker.com/

[별도설치] 관련 URL

Blog: https://kubetm.github.io/k8s/02-beginner/cluster-install-case6/
Youtube: https://www.youtube.com/watch?v=r7TWWRL59aY



1. 개발환경 세팅 및 소스 푸시

Setting Overview for k8s Deploy Concept

1-1) 스프링 프로젝트용 이클립스 설치

윈도우용 자바 설치 사이트 URL

https://java.com/ko/download/ie_manual.jsp?locale=ko

이클립스 STS용 설치 사이트 URL

https://spring.io/tools

바로 다운로드 URL

https://download.springsource.com/release/STS4/4.12.0.RELEASE/dist/e4.21/spring-tool-suite-4-4.12.0.RELEASE-e4.21.0-win32.win32.x86_64.self-extracting.jar

[기본 폴더 생성] 
C:\helm-ide
C:\helm-ide\tools
C:\helm-ide\workspace
C:\helm-ide\jdk
C:\helm-ide\git
C:\helm-ide\vagrant

[설치 위치] 
C:\helm-ide\tools

[압축해제 후 폴더]
C:\helm-ide\tools\sts-4.12.0.RELEASE

이클립스 세팅 및 소스 다운

[workspace 위치 지정]
C:\helm-ide\workspace

[Eclipse 인코딩 변경]
Preferences > General > Workspace > Text file encoding > UTF-8

1-2) OpenJDK 다운로드 및 적용

다운로드 사이트 URL

https://jdk.java.net/archive/

바로 다운로드 URL

https://download.java.net/java/ga/jdk11/openjdk-11_windows-x64_bin.zip

[설치 위치] 
C:\helm-ide\jdk

[압축해제 후 폴더]
C:\helm-ide\jdk\jdk-11

[Eclipse OpenJDK 지정]
Preferences > Java > Installed JREs > Add > jdk-11 폴더 선택 후 Finish

1-3) 프로젝트 소스 다운 및 실행

프로젝트 소스 다운로드 URL

https://github.com/spring-guides/gs-rest-service

[Github]
Code > Download ZIP 클릭

[설치 위치]
C:\helm-ide\workspace

[Eclipse 프로젝트 Import]
File > Open Projects from File System or Archive > Directory..
> C:\helm-ide\workspace\gs-rest-service-main\complate 폴더 선택

[rest-service App 실행]
Boot Dashboard > local > rest-service > (Re)start

[API 확인]
http://localhost:8080/greeting

1-4) Github에 App 올리기

  • 사전에 Github에 가입되어 있어야 함
[Github에서 Repository 만들기]
Repositories > New > rest-service

[프로젝트  Git 설정]
프로젝트 root 폴더 > team > Share Project.. > Repository [Create..] > [Browse..] > C:\helm-ide\git 폴더 선택

[Eclipse 소스 Push하기]
프로젝트 root 폴더 > team > commit > 파일 Staged Changes 후 Commit
Github Repository(rest-service)에서 [Code]클릭 후 Clone HTTPS 주소 복사 클릭 > Eclipse에서 [Push HEAD..] 클릭 > Preview > Preview

[Github에서 소스 확인]


2. CI/CD Server 세팅 및 빌드

Setting Overview for k8s Deploy Concept

2-1) vagrant로 CI/CD Server 세팅

[설치 위치]
C:\helm-ide\vagrant

[Vagrantfile 파일 다운로드]
curl -O https://kubetm.github.io/yamls/cicd-server/Vagrantfile

[cicd 설치]
vagrant up

[접속 및 설치 확인]
CI/CD Server : 192.168.56.20:22 root/vagrant
kubectl : kubectl version
helm : helm version
git : git version
Jenkins : systemctl status jenkins

2-2) Jenkins 접속 및 설정

Jenkins 접속 URL

http://192.168.56.20:8080/

[비번 설정]
cat /var/lib/jenkins/secrets/initialAdminPassword

[Plugin Install]
Install suggested plugins

[Create First Admin User]
Skip and continue as admin -> Save and Finish  -> Start using Jenkins

[admin pw 변경]
Dashboard > admin > Configure > pw변경 (admin)

[JDK 전역 설정]
Dashboard > Jenkins 관리 > Global Tool Configuration > [Add JDK]
Name : jdk-11
Install automatically 체크 해제
JAVA_HOME: /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-1.el7_9.x86_64

[Gradle 전역 설정]
Dashboard > Jenkins 관리 > Global Tool Configuration > [Add Gradle]
Name : gradle-7.3
Install automatically 체크
Version : Gradle 7.3-rc3
save

2-3) 빌드 Job 설정

Dashboard > 새로운 Item > Enter an item name > [rest-service] > Freestyle project > ok

[General] 
- Github project 체크
  Project url : https://github.com/kubetm/rest-service/

[소스 코드 관리]
- Git 체크
  Repositories > Repository URL > https://github.com/kubetm/rest-service.git
  Credentials > Add > Add Credentials 
    Kind : Username with password 
    Username : kubetm
    Password : 비번입력
  Credentials : kubetm/***** 선택

[Build]
- Invoke Gradle script > Invoke Gradle > Gradle Version : gradle-7.3
  Tasks :  clean build
  [Advanced..]
    Root Build script : ./complete
    
[저장]

[Build Now]

[생성된 빌드 jar 파일 위치]
/var/lib/jenkins/workspace/rest-service/complete/build/libs


3. 컨테이너 빌드/푸시 및 K8S 배포

Setting Overview for k8s Deploy Concept

3-1) Dockerfile 만들기 및 빌드/푸시

Jenkins의 프로젝트 파일로 이동하여 Dockerfile 생성

cd /var/lib/jenkins/workspace/rest-service
vi Dockerfile
FROM openjdk:11
COPY ./complete/build/libs/rest-service-0.0.1-SNAPSHOT.jar /usr/src/myapp/rest-service.jar
ENTRYPOINT ["java", "-jar", "/usr/src/myapp/rest-service.jar"]
EXPOSE 8080
WORKDIR /usr/src/myapp

Docker빌드 후 DockerHub로 컨테이너 이미지 Push

docker build -t kubetm/rest-service:v1 .
docker images
docker login
docker push kubetm/rest-service:v1

3-2) kubectl 설정

master 서버에서 클러스터 인증 파일 복사

k8s-master> cat /root/.kube/config # 내용 복사하기
cicd-server> cd /root/.kube
cicd-server> vi config             # 생성 후 붙여놓고
cicd-server> kubectl get nodes     # 확인

3-3) 리소스 생성 및 배포

vi rest-pod.yaml
vi rest-svc.yaml  

Pod

apiVersion: v1
kind: Pod
metadata:
  name: rest-service-pod
  labels:
    app: rest-service
spec:
  containers:
  - name: rest-service
    image: kubetm/rest-service:v1
    ports:
    - containerPort: 8080

Service

apiVersion: v1
kind: Service
metadata:
  name: rest-service-svc
spec:
  selector:
    app: rest-service
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30080

배포 및 확인

kubectl apply -f rest-pod.yaml
kubectl apply -f rest-svc.yaml
kubectl get pods
kubectl get svc

APP 접근

http://192.168.56.30:30080/greeting