harbor 설치 부터 kubernetes 연동까지!
Harbor 설치
- 설치 전에 필수 설치 사항
- docker-compose
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
# version 확인
$ docker-compose -v
- Harbor를 다운받기
기본적으로 Online(harbor-online-installer-vx.x.x.tgz)으로 받아서 설치를 시작하면 된다.
2020년 1월 11일 최신 버젼인 harbor-online-installer-v1.9.4.tgz을 기준으로 진행하였다.
$ wget https://github.com/goharbor/harbor/releases/download/v1.9.4/harbor-online-installer-v1.9.4.tgz
$ tar xvfz harbor-online-installer-v1.9.4.tgz
$ cd harbor
# 특정 설정을 변경해야 한다.
# hostname과 https 설정 필수 수정
# 작동하는 PORT를 변경할 경우 다음 파일에서 수정
$ vi harbor.yml
# 설치는 ROOT 계정으로 진행하는 것을 추천한다.
$ ./install.sh
- 동작 확인
브라우저를 통해서 확인한다. HTTPS를 활성화 했다면 https로 확인이 가능하다. 로그인 기본 ID 는 admin이며 password는 harbor.yml에 표기되어 있다.
# 파일 내 기본 비밀번호
harbor_admin_password: Harbor12345
- harbor.xml 수정시 반영 방법
harbor.xml을 수정후 무언가 반영할때는 다음과 같이 진행한다.
# 변경내역 반영
$ ./prepare
# docker-compose 재실행
$ docker-compose down -v
$ docker-compose up -d
harbor에 이미지 올리고 받기
- docker login
먼저 docker에서 이미지를 push 하기 위해서 login을 해야 한다.
$ docker login 10.52.181.240:8443
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /home/service/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
- docker tag 생성
$ docker tag lahuman/react-app:0.1 10.52.181.240:8443/51scrum/test-react-app:0.1
- docker push
$ docker push 10.52.181.240:8443/51scrum/test-react-app:0.1
- docker pull
$ docker pull 10.52.181.240:8443/51scrum/test-react-app:0.1
만약 x503 에러가 발생하면서 docker login이 되지 않는다면?
인증서 문제인데 내 경우는 그냥 http 통신으로 처리하였다.
우선 http 방식의 docker login을 위해서는 /etc/docker/daemon.json 파일을 생성하고 주소 정보와 IP를 다음과 같이 추가 한다.
{
"insecure-registries" : ["10.52.181.240:8000"]
}
이후 docker 서비스를 재기동 후 http로 로그인을 한다.
$ systemctl restart docker
# 로그인
$ docker login 10.52.181.240:8000
kubernetes에서 Private Repository 이미지 가져오기
kubernetes에서 Private Repository를 사용하기 위해서는 secret를 등록해야 한다. lahuman이라는 이름을 가진 secret를 생성한다.
$ kubectl create secret docker-registry lahuman --docker-server=http://10.52.181.240:8000 --docker-username=admin --docker-password='비밀번호' --docker-email="이메일"
만약 http 통신으로 docker login 한다면, kubernetes worker의 docker에 insecure-registries 설정을 해야한다.
등록된 값의 상세 확인은 다음의 명령어로 한다.
$ kubectl get secret lahuman --output="jsonpath={.data.\.dockerconfigjson}" | base64 -d
이제 pod를 배포해서 정상 동작 되는지 확인해보자
우산 다음과 같은 pod.yml을 작성한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deployment
spec:
replicas: 3
selector:
matchLabels:
app: react
template:
metadata:
labels:
app: react
spec:
containers:
- name: hello-container
image: lahuman/test-react-app
ports:
- containerPort: 80
imagePullSecrets:
- name: lahuman
생성된 파일을 kubectl 명령어를 이용해서 반영한다.
$ kubectl apply -f pod.yml
결과를 확인한다.
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-react-6968cdc94-5fxrv 1/1 Running 0 51m
hello-react-6968cdc94-5lpdg 1/1 Running 0 51m
hello-react-6968cdc94-82zh6 1/1 Running 0 51m
외부에서 접근하기 위해서 service.yml 파일을 작성한다.
apiVersion: v1
kind: Service
metadata:
name: hello-svc
spec:
selector:
app: react
ports:
- port: 8200
targetPort: 80
externalIPs:
- 10.52.181.240
- 10.52.181.241
서비스 파일을 kubectl 명령을 이용해서 반영한다.
$ kubectl apply -f service.yml
정상적으로 동작하는지 브라우저를 통해 확인하면 된다!