jenkins를 사용하려면 기본적으로 nfs설정이 되어 있어야 한다.
nfs 구축은 https://happycloud-lee.tistory.com/178 이분 블로그를 참고.
쿠버네티스 1.21버전 이후 사라진 RemoveSelfLink함수로 인해 https://github.com/kubernetes-incubator/external-storage.git 이 git을사용하면 pod가 실행되지 않는다.
helm 설치
- jenkins를 사용하려면 helm을 통해 repo에 저장하고 install해야 한다.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm repo 등록
- 설치가 완료되었으면 jenkins를 repo에 등록하고 install한다.
# 예시 helm repo add [repo 이름] [설치할 차트 url]
helm repo add jenkins https://charts.jenkins.io
helm repo update
- repo update를 통해 변경사항을 적용한다.
jenkins 설치
- helm 차트를 사용하여 jenkins를 설치한다.
# 예시 helm install [release 이름] [repo 이름]/[차트 이름]
helm install jenkins jenkins/jenkins
jenkins 설정
- jenkins 설치가 완료되면 deployment와 service를 생성한다.
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
namespace: haho
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts
ports:
- containerPort: 8080
env:
- name: JENKINS_OPTS
value: "--httpPort=8090"
- metadata.namespace는 나의 네임스페이스를 지정하기 위한 것으로 선택이다.
- spec.template.spec.containers.env.value를 통해 jenkins가 8090 포트를 사용하도록 한다.
Service
apiVersion: v1
kind: Service
metadata:
name: jenkins
namespace: haho
spec:
type: NodePort
ports:
- port: 8090
targetPort: 8090
nodePort: 30000 # 원하는 NodePort 번호, 30000-32767 범위 내
selector:
app: jenkins
- spec.ports.post를 통해 Servie의 포트를 8090으로 설정한다.
- deployment에서 지정했던 8090포트로 트래픽을 전달한다.
- 외부에서 접근할 수 있는 포트를 30000으로 설정한다.
두 파일 다 yaml파일을 작성하였다면 apply를 통해 생성한다.
kubectl apply -f [파일 이름]
Ingress 설정
- jenkins의 설정이 끝났다면 외부로 노출시키기 위해 Ingress를 설정한다.
IngressClass
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: k8s.io/ingress-nginx
- metadata.annotatisions를 통해 ingreassClass를 기본 값으로 설정한다.
- spec.constroller는 ingress가 nginx ingress controller에 의해 관리됨을 지정한다.
Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jenkins-ingress
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jenkins
port:
number: 8090
- IngressClass와 Ingress를 통해 HTTP 요청이 Nginx Ingress Controller를 통해 Jenkins 서비스로 전달된다.
노드의 IP와 NotePort로 지정한 포트로 접속한다.
jenkins 배포 완료
kubectl exec -it [pod 이름] -n [namespace 이름] -- cat /var/jenkins_home/secrets/initialAdminPassword
kubectl exec -it jenkins-58955695d-b9qn2 -n haho -- cat /var/jenkins_home/secrets/initialAdminPassword
- 초기 id는 admin이고 비밀번호는 위의 명령을 통해 확인한다.
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] CI/CD구성하기(Jenkins, ArgoCD, Gitea, Harbor) #1 배포 (0) | 2024.08.12 |
---|---|
[Kubernetes] kube config를 통해 외부 클러스터를 로컬 클러스터에서 실행하기 (0) | 2024.08.07 |
[Kubernetes] 쿠버네티스 구조 (0) | 2024.07.29 |
[Kubernetes] helm이란? (0) | 2024.07.22 |
[Kubernetes] 쿠버네티스 클러스터의 구조와 컴포넌트 (0) | 2024.07.22 |