grafana plugin 의 경우 public repository 만 있다보니
air-gap network 환경에서는 plugin 설치가 불편한 점이 있습니다.
그래서 nexus 를 private repository 로 구성한 후
grafana plugin 을 nexus 에 등록하여 grafana plugin repository 를 구성하려고 합니다.
이 가이드는 nexus 로 grafana plugin private repository 를 구성 후
grafana-cli 를 이용해서 plugin 을 설치하는 방법과
helm chart 의 values.yaml 파일 설정을 통해서 배포하는 방법을 확인해보겠습니다.
참고로 nexus 에 grafana plugin 을 등록 절차가 조금 수작업이긴 하나
grafana 에서 활용되는 plugin 이 자주 변경이 되지는 않으니 air-gap network 환경에서는 활용가치는 있다고 생각합니다.
가이드는 아래 2개의 plugin 을 샘플 대상으로 작성되었습니다.
먼저, grafana plugin 을 nexus repository 에 upload 하는데 사용되는 metadata 파일들을 생성합니다.
id=michaeldmoore-scatter-panel
type=panel
url=https://github.com/michaeldmoore/michaeldmoore-scatter-panel
version=1.1.0
jq -c '.' repo | jq '.plugins[.plugins | length] += {"id":"'${id}'","type":"'${type}'","url":"'${url}'","versions":[{"version":"'${version}'"}]}' > repo_new
cp repo_new repo
id=grafana-clock-panel
type=panel
url=https://github.com/grafana/clock-panel
version=2.1.0
jq -c '.' repo | jq '.plugins[.plugins | length] += {"id":"'${id}'","type":"'${type}'","url":"'${url}'","versions":[{"version":"'${version}'"}]}' > repo_new
cp repo_new repo
// repo
{
"plugins": [
{
"id": "michaeldmoore-scatter-panel",
"type": "panel",
"url": "https://github.com/michaeldmoore/michaeldmoore-scatter-panel",
"versions": [
{
"version": "1.1.0"
}
]
},
{
"id": "grafana-clock-panel",
"type": "panel",
"url": "https://github.com/grafana/clock-panel",
"versions": [
{
"version": "2.1.0"
}
]
}
]
}
id=michaeldmoore-scatter-panel
version=1.1.0
echo '{"versions":[{"version":"'${version}'","arch":{"any":{}}}]}' | jq . > ${id}
id=grafana-clock-panel
version=2.1.0
echo '{"versions":[{"version":"'${version}'","arch":{"any":{}}}]}' | jq . > ${id}
// michaeldmoore-scatter-panel
{
"versions": [
{
"version": "1.1.0",
"arch": {
"any": {}
}
}
]
}
// grafana-clock-panel
{
"versions": [
{
"version": "2.1.0",
"arch": {
"any": {}
}
}
]
}
위에서 생성한 metadata 와 grafana plugin 을 nexus rest api 를 활용해서 등록합니다.
nexus 에 rest api 호출이 가능하도록 설정되어야 합니다.
rest api 가 안되는 상황이라면 수동으로 업로드를 진행하세요.
grafana plugin 사이트에서 plugin 파일을 다운로드 받습니다.
nexus 를 설치합니다. 설치 후 service port-forward 를 사용하세요.
helm repo add sonatype https://sonatype.github.io/helm3-charts/
helm install nexus sonatype/nexus-repository-manager -n nexus
kubectl port-forward services/nexus 8081:8081 -n nexus
nexus 에 hosted repository 를 생성합니다.
다음으로 nexus rest api 를 활용하여 파일을 업로드 합니다.
echo -n 'admin:admin' | base64
export token=YWRtaW46YWRtaW4=
export host=http://localhost:8081
# repo 파일 등록, repo 폴더도 같이 생성
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-H 'Authorization: Basic ${token}' \
-F 'raw.directory=/' \
-F 'raw.asset1=@repo;type=application/x-zip-compressed' \
-F 'raw.asset1.filename=repo'
# /repo/michaeldmoore-scatter-panel 파일 등록
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-H 'Authorization: Basic ${token}' \
-F 'raw.directory=/repo' \
-F 'raw.asset1=@michaeldmoore-scatter-panel;type=application/x-zip-compressed' \
-F 'raw.asset1.filename=michaeldmoore-scatter-panel'
# /michaeldmoore-scatter-panel/versions/1.1.0/download 이름으로 plugin 파일 등록
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-H 'Authorization: Basic ${token}' \
-F 'raw.directory=/michaeldmoore-scatter-panel/versions/1.1.0' \
-F 'raw.asset1=@michaeldmoore-scatter-panel-1.1.0.zip;type=application/x-zip-compressed' \
-F 'raw.asset1.filename=download'
# /repo/grafana-clock-panel 파일 등록
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-H 'Authorization: Basic ${token}' \
-F 'raw.directory=/repo' \
-F 'raw.asset1=@grafana-clock-panel;type=application/x-zip-compressed' \
-F 'raw.asset1.filename=grafana-clock-panel'
# /grafana-clock-panel/versions/2.1.0/download 이름으로 plugin 파일 등록
curl -X POST ${host}/service/rest/v1/components?repository=grafana-plugin \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-H 'Authorization: Basic ${token}' \
-F 'raw.directory=/grafana-clock-panel/versions/2.1.0' \
-F 'raw.asset1=@grafana-clock-panel-2.1.0.any.zip;type=application/x-zip-compressed' \
-F 'raw.asset1.filename=download'
- repo (file 포함)
- grafana-clock-panel
- michaeldmoore-scatter-panel
- grafana-clock-panel
- versions
- 2.1.0
- download
- michaeldmoore-scatter-panel
- versions
- 1.1.0
- download
grafana-cli 를 이용하여 plugin 을 설치합니다.
# grafana pod 에 terminal 접속
kubectl exec -it deploy/grafana -c grafana -- bash
# 환경변수 setup
export GF_PLUGIN_REPO=http://localhost:8081/repository/grafana-plugin/
# plugin 설치
grafana-cli plugins install michaeldmoore-scatter-panel 1.1.0
grafana-cli plugins install grafana-clock-panel 2.1.0
grafana 를 helm chart 로 배포하는 경우에는 values.yaml 에 설정을 추가합니다.
# grafana values.yaml
env:
GF_PLUGIN_REPO: http://localhost:8081/repository/grafana-plugin/
plugins:
- michaeldmoore-scatter-panel 1.1.0
- grafana-clock-panel 2.1.0
이상으로 grafana plugin private repositry 를 구성하고 plugin 을 설치하는 과정까지 확인해 보았습니다.
.감사합니다.