설치를 위해, 사전에 작성해 둔 YAML 파일들을 가져옵니다.
git clone https://github.com/rudasoft/pipeline.git
cd pipeline
apiVersion: v1
kind: PersistentVolume
metadata:
name: docker-registry-pv
namespace: pipeline
spec:
storageClassName: docker-registry-pv
accessModes:
- ReadWriteOnce
capacity:
storage: 20Gi
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /host_mnt/d/data/docker-registry/
Kubernetes 에서 실제 물리적 디스크를 PersistentVolumeClaim 과 PersistentVolume 을 통해 사용합니다. 이전 수정한 설정 파일로 PersistentVolume 을 생성하고 확인합니다.
kubectl create -f docker-registry-pv.yaml
kubectl get pv --namespace=pipeline
kubectl describe pv docker-registry-pv --namespace=pipeline
Docker Registry 에 로그인 계정 정보를 만들고 저장하기 위해서, Kubernetes 의 Secret 를 사용합니다.
kubectl create secret docker-registry docker-registry-users --namespace=pipeline --docker-server=registry.pipeline.internal --docker-username=admin --docker-password=admin --docker-email=developers@rudasoft.com
Docker Registry Secret 생성 에서 docker server 의 도메인을 registry.pipeline.internal 으로 설정하였습니다. 해당 도메인이 Host 머신을 가르킬 수 있도록 host 파일을 수정해야 합니다.
127.0.0.1 으로 설정하는 경우, connection refuesed 오류가 나게 됩니다. host 파일에 본인의 실제 IP를 맵핑하여 호스트 머신을 찾을 수 있도록 하였습니다.
192.168.43.183 registry.pipeline.internal
imagePullSecrets:
- name: "docker-registry-users"
persistence:
accessMode: "ReadWriteOnce"
enabled: true
size: 10Gi
storageClass: "docker-registry-pv"
Docker Registry 를 설치 후 확인합니다.
helm install docker-registry stable/docker-registry -f docker-registry-values.yaml --namespace=pipeline
kubectl get pods --namespace=pipeline
정상적으로 설치가 되었다면 docker-registry pod 이 Running 상태가 됩니다.
Kubernetes 에서는 pod 들에 접근하기 위한 정책을 정의한 추상적 개념을 Service 를 통해 관리합니다. Running 상태가 된 Docker Registry pod에 접근하기 위해서 Service 를 생성합니다.
kubectl expose deployment docker-registry --type=LoadBalancer --name=docker-registry-svc --namespace=pipeline
kubectl get svc --namespace=pipeline
Private Docker Registry 의 설치는 완료되었지만, docker pull, push 등을 사용하기 위해서는 https 설정이 되어야 합니다. 지금은 http 만 설정된 상황이므로, Docker Daemon 설정을 수정하여 registry.pipeline.internal 도메인에 대한 http를 허용합니다.
docker pull hello-world
docker tag hello-world registry.pipeline.internal:5000/hello-world
docker login registry.pipeline.internal
Username: admin
Password: admin
docker push registry.pipeline.internal:5000/hello-world