일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 쿠버네티스
- EFS CSI Driver
- helm
- headless service
- AWS 딥레이서
- Prometheus install
- 깃허브 액션
- Kubernets on Jenkins
- 딥레이서 보상함수
- livenessPorbe
- Firelens
- jenkins
- kubernetes 동작 원리
- github action 사용법
- grafana on kubernetes
- EKS 클러스터
- Aurora cluster
- Kubernetes
- LoadBalancer Controller
- 로드밸런서 컨트롤러
- 그라파나 시각화
- 메탈LB
- 그라파나 대시보드
- blue-green
- Solution Architecture
- 솔데스크
- SAA 합격 후기
- 딥레이서
- 쿠버네티스 컴포넌트
- terraform
mingming
Jenkins Plugin Version Error 본문
교육과정에서 프로젝트 당시 사용중이던 vm에 오랜만에 접속해보니 Jenkins가 Error 상태에 빠져있었습니다.
해당 파드를 몇번 재시작해보니 init container에서 에러가 발생한 것을 확인할 수 있었습니다.
Log 확인
Jenkins Pod의 로그를 확인해봐도 별다른 에러를 발견할 수 없었습니다.
root@master:~# kubectl logs jenkins-0
Defaulted container "jenkins" out of: jenkins, config-reload, config-reload-init (init), init (init)
Error from server (BadRequest): container "jenkins" in pod "jenkins-0" is waiting to start: PodInitializing
위의 로그를 확인해보니 현재 4개의 컨테이너가 존재하는데 그 중 config-reload-init, init 두 개의 init container가 존재하고 있는 것을 확인할 수 있었습니다.
config-reload-init log
root@master:~# kubectl logs jenkins-0 -c config-reload-init
{"time": "2024-03-22T12:41:46.203037+00:00", "msg": "Starting collector", "level": "INFO"}
{"time": "2024-03-22T12:41:46.203904+00:00", "msg": "No folder annotation was provided, defaulting to k8s-sidecar-target-directory", "level": "WARNING"}
{"time": "2024-03-22T12:41:46.204470+00:00", "msg": "Loading incluster config ...", "level": "INFO"}
{"time": "2024-03-22T12:41:46.206178+00:00", "msg": "Config for cluster api at 'https://10.96.0.1:443' loaded...", "level": "INFO"}
{"time": "2024-03-22T12:41:46.206671+00:00", "msg": "Unique filenames will not be enforced.", "level": "INFO"}
{"time": "2024-03-22T12:41:46.207093+00:00", "msg": "5xx response content will not be enabled.", "level": "INFO"}
{"time": "2024-03-22T12:41:46.208027+00:00", "msg": "Performing list-based sync on configmap resources: {'label_selector': 'jenkins-jenkins-config', 'namespace': 'default'}", "level": "INFO"}
{"time": "2024-03-22T12:41:46.279270+00:00", "msg": "Writing /var/jenkins_home/casc_configs/jcasc-default-config.yaml (ascii)", "level": "INFO"}
inti log
Plugin workflow-aggregator:596.v8c21c963d92d (via pipeline-model-definition:2.2184.v0b_358b_953e69->git-client:4.7.0) depends on configuration-as-code:1775.v810dc950b_514, but there is an older version defined on the top level - configuration-as-code:1670.v564dc8b_982d0,
Plugin git:5.1.0 (via git-client:4.7.0) depends on configuration-as-code:1775.v810dc950b_514, but there is an older version defined on the top level - configuration-as-code:1670.v564dc8b_982d0
두 개의 init container log를 살펴보니 init 컨테이너에서 에러가 발생했음을 알 수 있었습니다.
해결 방법
플러그인 종속성 충돌로 인해 에러가 발생한 것으로 보입니다. 현재 workflow-aggregator 와 git 플러그인이 configuration-as-code 1775.v810dc950b_514 버전에 호환되며 현재 설치된 버전과는 호환이 되지 않는 것 같습니다.
1. configmap 수정
제 경우 helm을 통해 배포를 진행하였고 플러그인 버전이 configmap에 기록되어 있습니다.
kubectl get configmap
NAME DATA AGE
jenkins 2 90d
jenkins-jenkins-jcasc-config 1 90d
kube-root-ca.crt 1 123d
my-metallb-config 1 113d
kubectl describe configmap jenkins
Name: jenkins
Namespace: default
Labels: app.kubernetes.io/component=jenkins-controller
app.kubernetes.io/instance=jenkins
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=jenkins
Annotations: meta.helm.sh/release-name: jenkins
meta.helm.sh/release-namespace: default
Data
====
plugins.txt:
----
kubernetes:4029.v5712230ccb_f8
workflow-aggregator:596.v8c21c963d92d
git:5.1.0
configuration-as-code:1670.v564dc8b_982d0
apply_config.sh:
plugins.txt의 내용을 수정 후 파드를 재시작 해보겠습니다.
kubectl edit configmap jenkins
plugins.txt: |-
kubernetes:4029.v5712230ccb_f8
workflow-aggregator:596.v8c21c963d92d
git:5.1.0
configuration-as-code:1775.v810dc950b_514 ## 수정
init container 에러는 사라졌지만 새로운 에러가 발생했습니다.
java.io.IOException: Failed to load: Jackson 2 API Plugin (jackson2-api 2.17.0-379.v02de8ec9f64c)
- Update required: JSON Api Plugin (json-api 20231013-3.v20f3c247f2fe) to be updated to 20231013-17.v1c97069404b_e or higher
Jackson 2 API Plugin의 버전이 낮아 발생한 에러같습니다.
해당 부분은 다음에 다시 수정해보도록 하겠습니다.
json-api의 버전이 낮아 발생한 에러입니다. 해당 버전을 수정하기 위해선 Jenkins의 Pod의 Volume안에 있는 메타데이터 값을 수정해야 합니다.
Jenkins 파드의 볼륨과 Jenkins 파드의 Jenkins Container 부분을 살펴보면 다음과 같습니다.
Mounts:
/var/jenkins_home from jenkins-home (rw)
/var/jenkins_home/casc_configs from sc-config-volume (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-8r546 (ro)
/var/jenkins_home 경로를 jenkins-home 볼륨으로 마운트 한다 라는 의미입니다. jenkins-home 볼륨은 Volumes 필드에 정의되어 있습니다.
Volumes:
plugins:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
jenkins-config:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: jenkins
Optional: false
plugin-dir:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
jenkins-secrets:
Type: Projected (a volume that contains injected data from multiple sources)
SecretName: jenkins
SecretOptionalName: <nil>
jenkins-cache:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
jenkins-home:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: jenkins
ReadOnly: false
sc-config-volume:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
tmp-volume:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
'kubernetes' 카테고리의 다른 글
Jenkins 버전 업그레이드 (0) | 2024.12.26 |
---|---|
Kubectl 버전 업그레이드 (1) | 2024.09.01 |
Killer.sh CKA 문제 풀이 (0) | 2024.01.29 |
Kubernetes - Kustomize (0) | 2023.12.03 |
Kubernetes Secret (2) | 2023.10.29 |