설치&설정 관련

harbor 설치 부터 kubernetes 연동까지!

lahuman 2020. 6. 23. 22:31
728x90

harbor 설치 부터 kubernetes 연동까지!

Harbor 설치

  1. 설치 전에 필수 설치 사항
    • 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
  1. 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
  1. 동작 확인

브라우저를 통해서 확인한다. HTTPS를 활성화 했다면 https로 확인이 가능하다.
로그인 기본 ID 는 admin이며 password는 harbor.yml에 표기되어 있다.

# 파일 내 기본 비밀번호 
harbor_admin_password: Harbor12345
  1. harbor.xml 수정시 반영 방법

harbor.xml을 수정후 무언가 반영할때는 다음과 같이 진행한다.

# 변경내역 반영
$ ./prepare
# docker-compose 재실행
$ docker-compose down -v
$ docker-compose up -d

harbor에 이미지 올리고 받기

  1. 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
  1. docker tag 생성
$ docker tag lahuman/react-app:0.1 10.52.181.240:8443/51scrum/test-react-app:0.1
  1. docker push
$ docker push 10.52.181.240:8443/51scrum/test-react-app:0.1
  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

정상적으로 동작하는지 브라우저를 통해 확인하면 된다!

참고자료

728x90