Docker Hub 저장소를 GitHub Private Registry로 동기화한다던가, 그 반대로 한다던가. 이런 작업이 왜 필요한가?
- 저장소 마이그레이션을 시간을 두고 차분하게 진행하려고
- 백업 저장소가 필요한 까닭에
- 기타 등등
동기화 솔루션은 널려 있고 고도의 복잡도가 있는 작업도 아니니 대체로 잘 작동하리라 믿는다. xelalexv/dregsy: Keep Docker registries in sync 는 내가 쓰기에 나쁘지 않고 굳이 다른 솔루션까지 테스트해볼 생각은 안 들었다.
Kubernetes에 dregsy를 띄우는 예제가 있고 설정이 복잡하지 않기 때문에 공식문서로 충분하리라 보지만 편의상 예를 들어보자. 우선 Docker Hub의 저장소 두 개를 GitHub Private Registry로 가져오는 예이다.
apiVersion: v1
kind: Secret
metadata:
name: dregsy
namespace: playground
type: Opaque
stringData:
config.yaml: |-
relay: skopeo
tasks:
- name: task1
interval: 60
verbose: true
source:
registry: registry.hub.docker.com
auth: BASE64_ENCODED_OF_{"username": "my_id", "password": "my_token"}
target:
registry: docker.pkg.github.com
auth: auth: BASE64_ENCODED_OF_{"username": "my_id", "password": "my_token"}
mappings:
- from: unchartedsky/macgyver
to: unchartedsky/macgyver/macgyver
tags: ['latest']
- from: unchartedsky/discourse
to: unchartedsky/discourse/discourse
tags: ['latest' , 'develop', 'master']
relay
값을 docker
로 지정하면 도커 엔진을 쓰지만 구태여 그럴 필요가 없다. containers/skopeo 는 도커 엔진 없이도 충분히 잘 작동하고 저장소 복제하는데 별다른 문제가 없기 때문이다.
이제 dregsy를 띄우면 되는데 대체로 공식 문서에서 손댈 부분이 별로 없다. ConfigMap을 가져와서 마운트하는 부분만 추가했다. 참고로 LOG_LEVEL
이 debug
정도는 되어야 작업이 실패했을 때 원인을 파악하기 쉽다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dregsy
labels:
app: dregsy
spec:
selector:
matchLabels:
app: dregsy
serviceName: dregsy
replicas: 1
template:
metadata:
labels:
app: dregsy
spec:
containers:
- name: dregsy
image: xelalex/dregsy
command: ['dregsy', '-config=/config/config.yaml']
env:
- name: LOG_LEVEL
value: debug
resources:
requests:
cpu: 10m
memory: 32Mi
limits:
cpu: 2000m
memory: 2048Mi
volumeMounts:
- name: dregsy-config
mountPath: /config/config.yaml
subPath: config.yaml
volumes:
- name: dregsy-config
secret:
secretName: dregsy
items:
- key: config.yaml
path: config.yaml
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.