[Kubernetes] 데브옵스 환경 구축
item name : 2121-deploy
Copy from : 2121-container-build
> 전체 설치 순서
> Vagrantfile로 설치 되는 내용
> 설치 시작
1. Vagrant 스크립트 실행
# Vagrant 폴더 생성
C:\Users\사용자> mkdir cicd
C:\Users\사용자> cd cicd
# Vagrant 스크립트 다운로드
C:\Users\사용자\cicd> curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/cicd-server/vagrant-2.3.4/Vagrantfile
# Rocky Linux Repo 세팅
C:\Users\사용자\cicd> curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/cicd-server/vagrant-2.3.4/rockylinux-repo.json
C:\Users\사용자\cicd> vagrant box add rockylinux-repo.json
# Vagrant Vbguest 및 Disk Plugin 설치
C:\Users\사용자\cicd> vagrant plugin install vagrant-vbguest vagrant-disksize
# Vagrant 실행
C:\Users\사용자\cicd> vagrant up
2. CI/CD 서버 접속 ( root/vagrant )
3. Jenkins 초기 설정
- dashboard 접속 후 비밀번호 입력
http://192.168.56.20:8080/login
[root@cicd-server ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
- 플러그인 설치
- admin 계정 생성
4. 전역 설정(JDK, Gradle)
- jdk, gradle 세팅
- jdk 설치경로를 찾아 입력
[root@cicd-server ~]# find / -name java | grep java-17-openjdk
/usr/lib/jvm/java-17-openjdk-17.0.11.0.9-2.el8.x86_64/bin/java // -->> /bin/java 제외하고 복사
- gradle 설정 후 save
5. Dockerhub 계정 생성
https://hub.docker.com/signup
* 컨테이너 이미지 명으로 1pro/app-tester가 <Username>/app-tester 이렇게 바뀝니다.
6. Docker 사용 설정
# jeknins가 Docker를 사용할 수 있도록 권한 부여
[root@cicd-server ~]# chmod 666 /var/run/docker.sock
[root@cicd-server ~]# usermod -aG docker jenkins
# Jeknins로 사용자 변경
[root@cicd-server ~]# su - jenkins -s /bin/bash
# 자신의 Dockerhub로 로그인 하기
[jenkins@cicd-server ~]$ docker login
Username:
Password:
* 자신의 Docker Hub Username 및 Password 입력
아래 그림처럼 Login Succeeded 결과 확인
7. Master Node에서 인증서 복사
- CI/CD 서버에서 SCP 명령으로 인증서 가져오기
* Master Node의 VM은 실행 중인 상태여야 합니다.
* root가 아닌 Jenkins 유저 상태에서 작업 해주세요.
# 폴더 생성
[jenkins@cicd-server ~]$ mkdir ~/.kube
# Master Node에서 인증서 가져오기
[jenkins@cicd-server ~]$ scp root@192.168.56.30:/root/.kube/config ~/.kube/
- 인증서 가져오기 실행 후 [fingerprint] yes 와 [password] vagrant 입력
8. GitHub 가입
https://github.com/signup
* https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2 -> https://github.com/<username>/kubernetes-anotherclass-sprint2
- source 복사
https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2
- Deployment yaml 파일 수정
* 1pro를 입력하지 마시고 자신의 DockerHub Username 입력해 주세요.
- 가끔씩 Sync fork 확인
9. 빌드/배포 스크립트 작성 및 실행
- jar build 프로젝트 생성 및 실행
Project url : https://github.com/k8s-1pro/kubernetes-anotherclass-api-tester/
Repository URL : https://github.com/k8s-1pro/kubernetes-anotherclass-api-tester.git
Branch Specifier : */main
Gradle Version : gradle-7.6.1
Tasks : clean build
# jar 파일 확인
[jenkins@cicd-server ~]$ ll /var/lib/jenkins/workspace/2121-source-build/build/libs
-rw-r--r--. 1 jenkins jenkins 19025350 Oct 19 11:19 app-0.0.1-SNAPSHOT.jar
-rw-r--r--. 1 jenkins jenkins 16646 Oct 19 11:19 app-0.0.1-SNAPSHOT-plain.jar
- 컨테이너 빌드 : docker
item name : 2121-container-build
# <Your-Github-Uesrname> 에 본인의 github username 적기
Project url : https://github.com/<Your-Github-Uesrname>/kubernetes-anotherclass-sprint2/
Repository URL : https://github.com/<Your-Github-Uesrname>/kubernetes-anotherclass-sprint2.git
Branch Specifier : */main
Path : 2121/build/docker
# jar 파일 복사
cp /var/lib/jenkins/workspace/2121-source-build/build/libs/app-0.0.1-SNAPSHOT.jar ./2121/build/docker/app-0.0.1-SNAPSHOT.jar
# 도커 빌드
docker build -t <Your_DockerHub_Username>/api-tester:v1.0.0 ./2121/build/docker
docker push <Your_DockerHub_Username>/api-tester:v1.0.0
# Dockerfile 내용확인
cat /var/lib/jenkins/workspace/2121-container-build/2121/build/docker/Dockerfile
FROM openjdk:17
COPY ./app-0.0.1-SNAPSHOT.jar /usr/src/myapp/app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=${spring_profiles_active}", "-Dapplication.role=${application_role}", "-Dpostgresql.filepath=${postgresql_filepath}", "-jar", "/usr/src/myapp/app.jar"]
EXPOSE 8080
WORKDIR /usr/src/myapp
- 배포하기 : kubectl
item name : 2121-deploy
Copy from : 2121-container-build
Path : 2121/deploy/k8s
kubectl apply -f ./2121/deploy/k8s/namespace.yaml
kubectl apply -f ./2121/deploy/k8s/pv.yaml
kubectl apply -f ./2121/deploy/k8s/pvc.yaml
kubectl apply -f ./2121/deploy/k8s/configmap.yaml
kubectl apply -f ./2121/deploy/k8s/secret.yaml
kubectl apply -f ./2121/deploy/k8s/service.yaml
kubectl apply -f ./2121/deploy/k8s/hpa.yaml
kubectl apply -f ./2121/deploy/k8s/deployment.yaml
- Dashoboard 확인
- Pod Error 과제
기본 설정으로 진행하면 path "/root/k8s-local-volume/2121" does not exist 다음과 같은 에러가 나온다.
k8s 노드에 접속하여 해당 경로를 생성하면 해결.