딸기말차

[MSA] 17. Jenkins 설치 본문

Bootcamp/MSA

[MSA] 17. Jenkins 설치

딸기말차 2023. 11. 1. 11:19

엔코아 플레이데이터(Encore Playdata) Backend 2기 백엔드 개발 부트캠프 (playdata.io)

 

백엔드 개발 부트캠프

백엔드 기초부터 배포까지! 매력있는 백엔드 개발자 포트폴리오를 완성하여 취업하세요.

playdata.io


1. 쿠버네티스의 대표적인 도구

1. kubectl

기본 커맨드 도구로, 추가 설치 없이 사용 가능하고 kubectl 을 통해 오브젝트 생성, 이벤트 정보를 확인 가능하다.

# 적용
kubectl apply -f 파일명

 

2. kustomize

사용자의 의도에 따라 유동적으로 배포 가능하다

명세와 야믈파일 변수, 템플릿을 사용하지 않는다

명령어로 배포 대상 오브젝트의 이미지태그와 레이블같은 명세를 변경한다

config map 과 secret 생성 기능이 존재한다

배포 시 가변적인 요소를 적용하는데 적합하다.

 

3. helm

k8s의 70% 이상이 사용하고있다

오브젝트 배포에 필요한 사양을 이미 정의해 놓은 차트(패키지) 를 활용한다

때문에 사용하기 간편하다

차트 패키지는 자체적인 템플릿 문법을 사용할 수 있다


2. kustomize, helm 설치

# minikube start
minikube start

minikube start

# minikube 가 정상실행 됐는지 확인하기위해 pod 확인
kubectl get pods -A

minikube pods

# kustomize 설치
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash

kustomize 설치

# 어디서든 kustomize를 호출하기 위해 디렉토리 이동
sudo mv ./kustomize /usr/bin/

 

디렉토리 이동

# Helm 설치 
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3

# sh 파일이 생성 된 것 확인
ls | grep helm

helm 설치

# helm 실행 권한변경
chmod 700 get_helm.sh

# sh 파일 실행 
./get_helm.sh

helm 실행

# helm 확인 
helm

helm


3. Zenkins를 위한 사설 registry

# 이미지 저장을 위한 사설 레지스트리 등록
cp -R ./registry ~/

registry 디렉토리

# 인증서 파일인 tls.csr 내 ip 설정 변경
172.25.185.186

 

인증서는 해당 인증서를 가지고 있어야 접근할 수 있는 역할을 수행한다.

# create-registry.sh 내 ip 수정
172.25.185.186

# 인증서 생성
sudo ./create-registry.sh

인증서 생성

# 컨테이너가 잘 생성되었는지 확인
docker ps

컨테이너 확인

# jdk image build
docker tag openjdk:11-slim 172.25.185.186:8443/openjdk:11-slim

# image build check
docker images 172.25.185.186:8443/openjdk

image build 확인

# 사설 registry에 push
docker push 172.25.185.186:8443/openjdk:11-slim

사설 registry push


4. Jenkins 설치

# jenkins 설치 파일을 우분투로 이동
cp -R ./jenkins ~/

# minikube로 jenkins 설치

# heapster : kubernates를 모니터링하는 툴
 minikube addons enable heapster
 
 # ingress : 클러스터 외부에서 내부로 접근하는 요청을 처리하는 규칙
 minikube addons enable ingress

heapster, ingress

# kubectl을 통해 heapster, ingress 확인
kubectl get pods --all-namespaces

kubectl을 통해 확인

# k9s을 통해 heapster, ingress 확인
k9s
0 (all)

k9s을 통해 확인

# helm을 repository에 추가
helm repo add jenkins https://charts.jenkins.io

# helm을 이용해 yaml 파일 생성
helm show values jenkins/jenkins > jenkins-values.yaml

use helm

# yaml 파일을 이용해 jenkins 설치
helm install jenkins jenkins/jenkins -f jenkins-values.yaml

jenkins install

# k9s를 통해 pod 생성중인 것 확인
k9s
1 (default)

k9s를 통해 install 현황 확인

# minikube라는 가상환경이기 때문에 jenkins에 바로 접속 불가, 포트포워딩을 해서 접속해야한다.
kubectl --namespace default port-forward svc/jenkins 8080:8080

포트포워딩을 통해 jenkins 접속

# jenkins 로그인을 위해 admin 계정의 pw 설정
kubectl exec --namespace default -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/additional/chart-admin-password && echo

password : 0eQvjacRRkoLKlVKt0C0Ni

pw 설정

# localhost:8080 으로 jenkins 접속, 로그인
localhost:8080

jenkins main page


5. Keycloak 설치

Keycloak은 사용자 인증과 권한 부여를 위한 오픈소스 Identity and Access Management (IAM) 솔루션이다.

이를 이용해 여러 서비스 및 어플리케이션에 대한 사용자 인증 및 권한부여를 중앙에서 관리할 수 있으며, Single Sign On(SSO) 를 통해 사용자는 여러 서비스나 어플리케이션에 반복적으로 로그인하는 불편함을 해결할 수있다.

# Single Sign On
1회 사용자 인증으로 다수의 애플리케이션 및 웹사이트에 대한 사용자 로그인을 허용하는 인증 솔루션
# Keycloak 설치
docker run -d --name keycloak -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -p 11000:8080 jboss/keycloak

keycloak 설치


6. 64일차 후기

개발 중 서비스를 빌드하기 위해서는, jar 파일을 다시 빌드하고, Dockerfile을 통해 이미지를 재빌드하여 컨테이너에 올려야한다.

모든 서비스마다 이 작업을 하려면 많은 시간이 걸릴 것이고, 작업의 효율이 떨어진다.

 

Jenkins는 이러한 점을 파이프라인을 구축하여, 내 코드가 올라가있는 git과 같은 repository 와 연동해, 저장소 내에서 변경사항이 생길 경우 자동으로 빌드를 할 수있게 해준다.