Nexus 3.71.0 버전 이후 OrientDB 지원 중단 관련 설정 변경하기
Nexus 3.71.0 버전 이후 OrientDB 지원 중단
kubernetes pod에 띄워 잘 사용하던 nexus가 어느 날부터 뜨지 않는다.
로그를 살펴보니 다음과 같이 안내되어 있다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
This instance is using a legacy Orient database.
You must migrate to H2 or PostgreSQL before upgrading to this version. See our database migration help documentation at:
https://links.sonatype.com/products/nxrm3/docs/unsupported-db.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
https://help.sonatype.com/en/migrating-to-a-new-database.html
이전 버전의 nexus 사용 시 별다른 설정을 하지 않으면 기본 설정이 내장 db인 OrientDB
를 사용하는데 3.71.0 이상 버전을 사용하면 더 이상 OrientDB
를 지원하지 않으므로 내장 H2
나 외부 PostgreSQL
로 변경해야 한다.
Migration 하기
기존 데이터를 migration 하려면 아래 링크를 참조하면 된다.
https://help.sonatype.com/en/upgrading-to-nexus-repository-3-71-0-and-beyond.html
내 경우 그냥 기존 데이터를 버리고 새로 설치했다.
설정하기
기존 데이터를 버리고 새로 설정을 진행하려고 하면 migration 과정은 생략하고 기존 /nexus-data
폴더를 비운 후 아래 설정만 진행해 주면 된다.
PostgreSQL 사용 시엔 /nexus-data/etc/fabric
위치에 nexus-store.properties
파일을 생성하고 아래 정보를 적절히 추가해 준다.
username=<postgres_user>
password=<postgres_password>
jdbcUrl=jdbc\:postgresql\://<database-host>\:<database-port>/nexus
외부 PostgreSQL을 사용하건 내장 H2을 사용하건 두 경우 모두 아래 설정을 /nexus-data/etc/nexus.properties
파일에 추가해 준다.
nexus.datastore.enabled=true
Kubernetes Deployment 설정 참고 사항
docker hub의 sonartype/nexus3
이미지를 사용하는 경우 기본 설정이 아래와 같다.
ENV INSTALL4J_ADD_VM_PARAMS=-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=/nexus-data/javaprefs
kubernetes로 띄우는 경우 resource limit 설정을 위 설정 이상으로 잡아주어야 한다.
내 경우 대략 아래와 같이 설정하였다.
spec:
containers:
- name: nexus
image: sonatype/nexus3:latest
ports:
- containerPort: 8081
- containerPort: 8083
resources:
requests:
memory: '1Gi'
limits:
memory: '3Gi'
이전 설정은 limit가 2Gi
였는데 startup 시점에 2Gi
를 초과하면서 pod가 evict 되어 늘려주어야 했다.
Nexus 설정 다시 하기
이전 nexus data를 migration 하지 않고 새로 진행하면서 관련 설정에 대해 기록해 본다.
rancher desktop을 사용하면서 nexus, jenkins 사용 관련하여 필요한 설정들이다.
nexus admin password 설정
초기 비번이 /nexus-data/admin.password
위치에 저장되어 있다. 해당 비번으로 로그인 후 변경해 준다.
변경 이후 해당 파일은 삭제된다.
nexus repository 구성
maven repository
내 경우 기본 설정된 maven repository (maven-releases
, maven-snapshots
)를 그대로 사용하여서 별도의 설정은 필요 없었다.
docker repository
docker repository의 경우 기본 설정으로 제공되지 않기 때문에 docker hosted repository를 추가해주어야 한다.
내 경우 nexus-service:8083
로 docker hosted port를 설정하여 사용하고 있다.
따라서 nexus에서 repository 생성 시 http 요청을 8083
으로 설정해 준다.
여기까지 설정하면 jenkins에서 docker image upload는 잘 동작한다.
이전엔 nexus docker hosted repostiory 추가 할 때 v1 api 설정을 활성화해야 했던 거 같은데 굳이 하지 않아도 이제 정상 호출이 되는 듯했다.
rancher-desktop wsl insecure-registries 설정 추가
pod 생성에 에러가 발생하여 kubectl describe po [해당 pod]
로 확인해 보니 다음과 같은 에러가 발생한다.
Warning Failed 12m (x3 over 12m) kubelet Failed to pull image "nexus.bluesky.local:8083/luversof/bluesky-cloud-admin-server:0.0.1-SNAPSHOT.179": Error response from daemon: Get "https://nexus.bluesky.local:8083/v2/": http: server gave HTTP response to HTTPS client
kubernetes deployment에서 upload 된 docker image 호출 시 기본 설정은 https로 호출을 한다.
http로 호출을 변경하려면 wsl의 /etc/docker/daemon.json
파일에 insecure-registries
설정을 추가해줘야 한다.
(내 경우 rancher desktop을 사용하고 있어 해당 사용 기준 설정임)
{
// 아래 내용 추가
"insecure-registries": [
"nexus.bluesky.local:8083", "nexus-service:8083"
]
}
kubernetes secret 생성
http 호출로 변경하고 다시 배포해 보면 pod describe에서 다음과 같이 에러가 보인다.
Warning Failed 9s kubelet Failed to pull image "nexus.bluesky.local:8083/luversof/bluesky-cloud-admin-server:0.0.1-SNAPSHOT.179": Error response from daemon: Head "http://nexus.bluesky.local:8083/v2/luversof/bluesky-cloud-admin-server/manifests/0.0.1-SNAPSHOT.179": no basic auth credentials
http로 호출은 하였지만 인증을 처리하지 못하였다.
내 경우 deployments에 imagePullSecret
을 다음과 같이 설정하였다.
imagePullSecrets:
- name: regcred
image를 pull 할 때 해당 secret을 사용하여 인증을 처리한다.
해당 secret을 대략 다음처럼 생성해 준다.
kubectl -n default create secret docker-registry regcred --docker-server=nexus.bluesky.local:8083 --docker-username=[유저이름] --docker-password=[비밀번호] --docker-email=[이메일]