레이블이 postgresql인 게시물을 표시합니다. 모든 게시물 표시
레이블이 postgresql인 게시물을 표시합니다. 모든 게시물 표시

install harbor

# chart 저장소로 chartmuseum 을 사용중이였는데 dashboard ui 가 없어 찾아 보니 chartmuseum-ui 가 있다.
# 그런데 chartmuseum-ui 는 helm 차트가 없고 현재 차트 업로드가 안되고 조회만 된다고 한다.
# harbor(https://github.com/goharbor/harbor) 는 CNCF 졸업한 프로젝트로 
# chart 외 Open Container Initiative(OCI) 표준을 따르는 컨테이너 이미지 및 기타 아티팩트(helm chart 파일)를 저장하고 
# 프로젝트별 구분 및 RBAC(롤 기반 접근제어)
# trivy(https://github.com/aquasecurity/trivy)를 통한 취약점 파악이 가능하다.
# 그리고 db(postgresql)를 사용해 아티팩트 사용에 대한 히스토리 및 push, pull 카운트도 알 수 있다.
# 물론 UI 도 있고, chartmuseum(3k) 보다 스타수도 26k로 많다.... 해서 harbor 를 설치해보자.

# harbor 2.x 에서는 chart 저장소가 chartmuseum 에서 oci 레지스트리로 변경되었다.
# harbor 2.8 (Apr 17, 2023) 부터 chartmuseum 을 지원하지 않는다.
# chart 는 image(artifact)와 동일하게 관리된다.

# harbor helm chart 다운로드
helm repo add harbor https://helm.goharbor.io
helm repo update
helm fetch harbor/harbor
tar zxvf harbor-1.17.1.tgz
cd harbor

# values.yaml 변경
# ingress, clusterIP, nodePort, loadBalancer (대소문자 구분) 중 하나를 선택하면 나머지 설정들은 스킵된다.
# nodePort 를 사용하면 기존 ClusterIP 타입의 서비스외  NodePort 타입의 harbor 서비스가 더 생성되고 여기서 기존 서비스들로 분배된다.(configmap > nginx.conf 참고)
expose.type: ingress
expose.tls.enabled: false

# harbor 접근할 웹 주소
expose.ingress.hosts.core: https://harbor.ysoftman.test

# docker 이미지나 helm chart 를 push/pull 할때 cli 명령에서 사용될 서버 주소
externalurl: https://harbor.ysoftman.test

# pv,pvc 기본으로 Container Storage Interface (CSI) 로 생성된다.
# pv,pvc 를 사용하면 파드를 삭제했다가 pvc 를 사용하는 새로운 파드를 다시 띄우면, k8s 는 기존 데이터가 남아있는 동일한 노드로 파드를 스케줄링(NodeAffinity)하여 이전 데이터를 그대로 이어받아 사용할 수 있다.
# kubectl get storageclasses 로 csi 가 연결된 스토리지 provisioner 확인
# csi 종류
# rancher.io/local-path 는 k8s 클러스터의 각 노드에 있는 로컬 스토리지를 Persistent Volume(PV)으로 사용해 emptyDir (Ephemeral Storage) 처럼 pod 삭제시 데이터가 날라가는것 방지할 수 있다.
# cinder.csi 는 openstack 환경에서 cinder API 호출하여 새로운 cinder 볼륨을 사용
# reclaimpolicy(pod 삭제시 pv등 정리 방법)는 delete 인 local-path 를 사용
persistence.persistentVolumeClaim.xxxxx.storageClass: "local-path-delete"

# 별도의 nfs 사용할 경우 pv, pvc 리소스를 추가하자.
# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: ysoftman-harbor
spec:
  accessModes:
    - ReadWriteMany
  capacity:
    storage: 10Gi
  nfs:
    path: /xxxxx/ysoftman/harbor
    server: nfs.ysoftman.zzz
  persistentVolumeReclaimPolicy: Retain

# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ysoftman-harbor
  namespace: harbor
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: ""
  volumeName: ysoftman-harbor

# values.yaml 설정에서 existingClaim 명시
persistence.persistentVolumeClaim.xxxxx.storageClass: ""
persistence.persistentVolumeClaim.xxxxx.existingClaim: "ysoftman-harbor"

# harbor database(postgreSQL) 데이터 저장소로 nfs 사용시 권한 문제와 디렉터리 비어있지 않음등의 문제가 있다면 로컬 스토리지를 사용하자.
persistence.persistentVolumeClaim.database.storageClass: "local-path-delete"

# image/chart 저장소 타입 filesystem, azure, gcs, s3, swift 중 선택
persistence.imageChartStorage.type: filesystem

# image/chart filesystem 선택시 저장 경로
persistence.imageChartStorage.filesystem.rootdirectory: /storage

# 배포
helm upgrade --install harbor . \
--namespace harbor \
--create-namespace \
--values values.yaml

# 이제 admin / Harbor12345 로그인해서 메뉴에서 admin 암호를 변경(대소,특수,포함 8자리 이상등의 조건)한다.
https://harbor.ysoftman.test

#####

# nodePort 와 ingress 둘 다 사용하기
# ingress 상태로 띄우고
expose.type: ingress

# ingress 리소스를 templates/ysoftman_ingress.yaml 파일로 백업
kubectl get ing -o yaml > templates/ysoftman_ingress.yaml

# nodePort 로 다시 배포(helm upgrade)하면 nodePort 서비스가 추가된다.
expose.type: nodePort

# templates/ysoftman_ingress.yaml > backend service 를 NodePort 서비스명으로 변경 후 다시 배포(helm upgrade)

#####

# harbor database(postgresql)이 nfs로 저장이 안되고, 외부 gcs(google cloud storage), s3, 등을 사용할 수 없다면 덤프파일로 백업하자.

# database container 에 접속해서 psql 로 다음과 같이 사용자명과 db명을 파악하자.

# 로컬에서 접속할 수 있도록 port-foward
kubectl port-forward svc/harbor-database 5432:5432 -n harbor

# pg cli 툴 설치
# postgresql server 와 맞는 버전을 설치해야 한다.
# 14 버전 대신 15 버전으로 설치
brew unlink postgresql@14
brew install postgresql@15

# registry db 덤프
pg_dump -h localhost -p 5432 -U postgres -d registry > harbor_backup_20250807.sql

# 덤프 파일로 복구
psql -h localhost -p 5432 -U postgres -d registry < harbor_backup_20250807.sql

#####

# helm 3.7 부터는 oci registry 연동 시 https 만 지원하고 http 사용지 동작하지 않는다.
# oci 방식으로 저장된 차트는 url 로 다운로드가 할 수 없다.
# harbor ui 에서 올라간 차트 이미지에 대해 helm pull, docker pull 등의 커맨드를 클립보드로 복사하는 기능이 있다.

# harbor registry 로그인
helm registry login -u admin -p Harbor12345 https://harbor.ysoftman.test

# harbor 2.8 chartrepo 방식이 사라져 chartrepo 엔드포인트는 사용할 수 없고 oci 프로토콜로만 사용해야 한다.
# 차트 파일 library 프로젝트에 올리기
helm push ysoftman-chart-0.0.1.tgz oci://harbor.ysoftman.test/library

# library 프로젝트의 ysoftman 차트 다운로드
helm pull oci://harbor.ysoftman.test/library/ysoftman-chart --version 0.0.1

# docker 이미지 library 프로젝트로 태깅
docker tag aaa/ysoftman-image:dev harbor.ysoftman.test/library/ysoftman-image:dev

# docker 이미지 library 프로젝트에 올리기
docker push harbor.ysoftman.test/library/ysoftman:dev

# library 프로젝트의 ysoftman:dev 이미지 다운로드
docker pull harbor.ysoftman.test/library/ysoftman:dev

# harbor 버전 확인(로그인 메뉴 > about)
https://harbor.ysoftman.test/api/v2.0/systeminfo

yum modular filtering

# rocky 8.8 에 최신 postgresql15 repo 파일을 /etc/yum.repos.d/ 에 생성하고 설치하면
sudo yum install postgresql15-server

# 다음과 같은 에러가 발생한다.
All matches were filtered out by modular filtering for argument: postgresql15-server
# 한글 에러는 요렇다.
일치하는 인수가 없습니다: postgresql15-server

# 기존 postgresql(버전10) 패키지를 비활성화 후 설치하면 된다.
sudo yum module disable -y postgresql

install postresql by yum

# centos 7 에서 postresql 9.6 버전을 다음 repository로 설치하려고 하는데 해당 URL은 사라진 상태다.
# sudo yum install -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 대신 최신 yum repository 를 설치하자
sudo yum install -y -v https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 만약 gpg 체크가 필요하다는 에러 메시지가 나오면 다음 설정으로 비활성화 할 수 있다.
sudo vi /etc/yum.conf
gpgcheck=0

# 참고로 ansible 사용시 저장소 추가 예시
- name: "Install Postgresql 15 for centos/rocky"
  yum:
    name: "http://download.postgresql.org/pub/repos/yum/reporpms/EL-{{ansible_distribution_major_version}}-x86_64/pgdg-redhat-repo-latest.noarch.rpm"
    state: present
    sslverify: false
    disable_gpg_check: true
  become: yes

# 설치된 yum repository 확인
sudo yum repolist

# (필요시) /etc/yum.repo.d 내용을 다시 로딩
sudo yum makecache -q

# 기본 postgresql 패키지는 비활성화
sudo yum module disable postgresql

# 15버전 패키지가 리스트에 있는지 확인
yum list | grep -E ^postgresql15

# 설치
sudo yum install -y postgresql15-server postgresql15-contrib

# db초기화
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb

# postgresql 서비스 활성화,시작,상태확인
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15
sudo systemctl status postgresql-15

SQL IDE/QueryBrowser

[SQL IDE/QueryBrowser]
SQL Developer http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html
MySQL WorkBench http://www.mysql.com/downloads/workbench/
SSMS(SQL Server Management Studio) http://www.microsoft.com/en-us/download/details.aspx?id=7593

ARM 계열 맥북 M1 등에서 mysql workbench 최신 버전(8.0.x)이 계속 크래시 되는 이슈가 있다.

대신 dbeaver 를 사용하자.
brew install --cask dbeaver-community

이름에 커서 위치시키고 f4 : table view
cmd+shift+r : open resource (.sql .erd등 파일 열때 유용)
cmd+enter : 쿼리 하나 실행
cmd+\ : 현재탭의 모든 쿼리 실행
ctrl+/ : 현재 라인 주석 토글
ctrl+shift+f : 쿼리 포맷팅
alt+up : 이전 쿼리 위치로 이동
alt+down : 다음 쿼리 위치로 이동
ctrl+shift+j : 라인 합치기
ctrl+shift+\ : 실행 결과 창 닫기
cmd+shift+x : to uppercase
cmd+shift+y : to lowercase
cmd+shift+e : editor 선택 팝업
cmd+s : editor 내용 저장, 레코드 결과 수정 적용
ctrl+r : 레코드 결과 수정 취소
ctrl+tab (customize) : next tab
ctrl+shift+tab (customize) : previous tab
ctrl+e (customize) : switch active panel (디폴트 ctrl+alt+t 는 rectangle 앱 단축키와 중복)

[터미널에서 사용하는 SQL IDE]

[harlequin]
설치
pip install harlequin harlequin-mysql

mysql 접속
harlequin -a mysql -h localhost -p 3306 -U root --password example --database dev --theme one-dark

설정 파일($XDG_CONFIG_HOME/harlequin/config.toml)을 만들어 두자.
default_profile = "ysoftman"
[profiles.ysoftman]
adapter = "mysql"
theme = "one-dark"
limit = 100000
host = "localhost"
port = "3306"
database = "test"
user = "user1"
password = "abc123"
connection_timeout = "10"

이제 할리퀸 실행하면 하면 위 설정으로 실행된다.
harlequin

Prev