티스토리 뷰
GitLab image registry를 helm chart를 이용하여 설치하는 방법을 가이드 합니다.
helm chart 버전은 8.4.1 입니다.
ubuntu@bastion:~/install/gitlab$ helm search repo gitlab/gitlab --versions
NAME CHART VERSION APP VERSION DESCRIPTION
gitlab/gitlab 8.4.1 v17.4.1 GitLab is the most comprehensive AI-powered Dev...
사전준비
- nfs dynamic provisioning
happycloud-lee.tistory.com/178?category=832243
설치하기
1) 작업 디렉토리 생성
작업할 VM에서 작업 디렉토리를 생성 합니다.
mkdir -p ~/install/gitlab && cd ~/install/gitlab
2) Helm repo 추가
helm repo add gitlab https://charts.gitlab.io
helm repo update
helm repo ls
3) 설치 values 파일 생성
domain과 SSL인증서 자동생성에 사용될 email을 등록합니다.
gitlab 설치 후 여러개의 ingress 객체가 만들어집니다. 이때 host명의 domain이 사용됩니다.
k create ns gitlab
kubens gitlab
helm upgrade gitlab -i -f gitlab.yaml gitlab/gitlab -n gitlab
예를 들어 Web서버 Ingress 호스트는 gitlab.git.msa.edutdc.com이 됩니다.
$ vi gitlab.yaml
global:
hosts:
domain: git.msa.edutdc.com
certmanager-issuer:
# The email address to register certificates requested from Let's Encrypt.
# Required if using Let's Encrypt.
email: hiondal@gmail.com
4) 설치
namespace를 만들고 이동한 후 설치 합니다.
k create ns gitlab
kubens gitlab
helm upgrade gitlab -i -f gitlab.yaml gitlab/gitlab -n gitlab
5) Pod생성 완료 시까지 대기
watch kubectl get po
* gitlab-runner 파드가 Readiness Probe가 실패하면서 실행 안될 때
- deployment yaml을 생성하고, 내용 중 서버 명을 서비스 객체로 바꾼 후, 기존 파드를 지우고 다시 설치 합니다.
k get deploy gitlab-gitlab-runner -o yaml > runner.yaml
$ vi runner.yaml
...
spec:
containers:
- command:
- /usr/bin/dumb-init
- --
- /bin/bash
- /configmaps/entrypoint
env:
- name: CI_SERVER_URL
value: http://gitlab-webservice-default:8181
#value: http://gitlab.git.msa.edutdc.com
- name: RUNNER_EXECUTOR
...
$ k delete -f runner.yaml
$ k apply -f runner.yaml
* 실수로 다른 네임 스페이스에 설치하여, 재설치하는 경우
ubuntu@bastion:~/install/gitlab$ helm upgrade gitlab -i -f gitlab.yaml gitlab/gitlab -n gitlab
Release "gitlab" does not exist. Installing it now.
Error: Unable to continue with install: CustomResourceDefinition "certificaterequests.cert-manager.io" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"; annotation validation error: missing key "meta.helm.sh/release-name": must be set to "gitlab"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "gitlab"
CRD(Custom Resource Definition)객체들을 모두 지우고, 기존 객체 모두 지운 후, 네임스페이스까지 삭제하고 다시 설치하세요.
k get crd | grep cert-manager.io
k delete pvc --all
kubectl get pv -o json | jq -r '.items[] | select(.status.phase == "Released") | .metadata.name' | xargs kubectl delete pv
kubens default
k delete ns gitlab
다시 gitlab 네임스페이스 생성하고 이동한 후 설치 합니다. 이때, gitlab-runner파드가 설치 안되면 바로 위 방법으로 설치합니다.
k create ns gitlab
kubens gitlab
helm upgrade gitlab -i -f gitlab.yaml gitlab/gitlab
k8s cluster 외부에서 접근 설정(k8s cluster 외부에서 접근 불가 시)
아래와 같이 proxying할 VM에서 haproxy를 설치하고 port forwarding을 합니다.
iptables를 이용할 수도 있습니다.
단, 사전에 ingress controller가 설치되어 있어야 하고 service객체는 30080과 30443으로 접근할 수 있어야 합니다.
DNS서버가 없어 backend서버를 host명으로 지정 못하면 privaet IP로 지정하면 됩니다.
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
maxconn 3000
listen stats
bind :9000
mode http
stats enable
stats uri /
monitor-uri /healthz
frontend api-server
bind *:6443
default_backend api-server
mode tcp
option tcplog
backend api-server
balance source
mode tcp
server controlplane controlplane.msa.edutdc.com:6443 check
frontend http-in
bind *:80
mode tcp
option tcplog
default_backend http-backend
frontend https-in
bind *:443
mode tcp
option tcplog
default_backend https-backend
backend http-backend
mode tcp
server worker1 worker1.msa.edutdc.com:30080
server worker2 worker2.msa.edutdc.com:30080
backend https-backend
mode tcp
server worker1 worker1.msa.edutdc.com:30443
server worker2 worker2.msa.edutdc.com:30443
로그인, root 암호변경, 테스트 사용자와 repository 추가
1) Host 추가
ingress 주소를 확인합니다.
ubuntu@bastion:~/install/gitlab$ k get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
gitlab-kas gitlab-nginx kas.git.msa.edutdc.com 80, 443 70m
gitlab-minio gitlab-nginx minio.git.msa.edutdc.com 80, 443 70m
gitlab-registry gitlab-nginx registry.git.msa.edutdc.com 80, 443 70m
gitlab-webservice-default gitlab-nginx gitlab.git.msa.edutdc.com 80, 443 70m
PC의 hosts에 'gitlab.git.msa.edutdc.com'를 등록합니다.
IP는 proxy서버를 이용하는 경우는 그 VM의 public IP를 등록하고, k8s cluster를 직접 접근하는 경우는 아무 노드의 public ip를 등록하면 됩니다.
2) 로그인 화면 접속
브라우저에서 https://gitlab.git.msa.edutdc.com 으로 접근합니다.
안전하지 않은 접근 어쩌고 하는 경고는 무시합니다. 테스트 인증서이기 때문에 나오는 경고입니다.
3) 로그인 하기
ID는 'root'입니다.
암호는 시크릿 'gitlab-gitlab-initial-root-password' 객체에서 아래를 참조하여 구합니다.
$ k get secret gitlab-gitlab-initial-root-password -o yaml
apiVersion: v1
data:
password: MFlMT3RHeUMwZUpTU3l6RUg1NWtIN1k1aEtEOFRuUXBpeW53ZG5WSmtUYjZqbUFKdW40aFNiNzNHNWgwWmpFUg==
kind: Secret
...
$ echo MFlMT3RHeUMwZUpTU3l6RUg1NWtIN1k1aEtEOFRuUXBpeW53ZG5WSmtUYjZqbUFKdW40aFNiNzNHNWgwWmpFUg== | base64 -d
0YLOtGyC0eJSSyzEH55kH7Y5hKD8TnQpiynwdnVJkTb6jmAJun4hSb73G5h0ZjERubuntu@bastion:~/install/gitlab$
4) 루트 암호 변경
5) 테스트 사용자 추가
좌측 하단의 [Admin]버튼을 누르고, Users 메뉴에서 사용자를 추가합니다.
이때 암호는 어차피 바꿀 초기 암호이므로 실제 암호가 아닌 적절한 임시 암호로 지정합니다.
등록된 유저로 로그인하고, 자동으로 나오는 암호 변경화면에서 암호를 변경 합니다.
6) 테스트 레포지토리 추가
테스트 사용자로 로그인한 후 좌측의 'Projects'메뉴에서 레포지토리를 추가합니다
7) SSH key 생성 및 등록: ssh로 pull/push할 때만 필요
Git Client인 PC와 VM에서 수행합니다. 단, ssh key는 한쪽에서 생성한 것을 이용해야 합니다.
아래 예제에서 email은 사용자 등록 시 지정한 email과 동일해야 합니다.
SSH key 추가: ssh로 pull/push하려면 수행
- ssh key 만들기: Git client에서 수행
ssh-keygen -t ed25519 -C "user00@gmail.com"
cat ~/.ssh/id_ed25519.pub
- Git에 추가
GitLab에 로그인하고, 프로필 설정(Profile Settings)으로 이동합니다.
왼쪽 메뉴에서 "SSH Keys"를 클릭합니다.
"Key" 필드에 복사한 공개 키를 붙여넣습니다.
"Title" 필드에 이 키를 설명하는 이름을 입력합니다. 예를 들어 "My MacBook Air"와 같이 입력할 수 있습니다.
"Add key"를 클릭하여 SSH 키를 추가합니다
Git Client 설정
remote repository에서 https 프로토콜로 pull/push하기 위해서 작업 하여야 합니다.
이를 위해 SSL인증서를 client에 등록해야 합니다.
1) SSL 인증서 추출
kubectl get secret gitlab-gitlab-tls -o jsonpath="{.data['tls\.crt']}" | base64 --decode > gitlab-tls.crt
아래 명령으로 host명이 정확한지 확인합니다.
openssl x509 -in gitlab-tls.crt -text -noout
2) 인증서 등록
OS에 따라 아래와 같이 등록합니다.
- Git client(로컬, bastion)에 추가
. Mac
sudo vi /etc/ssl/certs/gitlab-tls.crt
git config --global http.sslCAPath /etc/ssl/certs/gitlab-tls.crt
. Window
copy tls.crt C:\Program Files\Git\usr\ssl\certs\
git config --global http.sslCAInfo C:/Program\ Files/Git/usr/ssl/certs/tls.crt
. Linux
sudo cp gitlab-tls.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
3) Access Token 생성
Edit Profile 메뉴를 누르고 Access Tokens에서 생성합니다.
Pull/push 시 로그인 암호 대신 이 토큰을 입력해야 합니다.
4) Pull/push 테스트
이전 단계에서 만든 테스트 레포지토리를 clond 하고 푸쉬 해 봅니다.
'Agile&DevOps > CI, CD 툴 설치' 카테고리의 다른 글
ArgoCD 설치 (0) | 2024.08.07 |
---|---|
Nexus 설치 및 구성 (0) | 2020.06.12 |
SonarQube 설치 (0) | 2019.09.12 |
Jenkins 설치 (0) | 2019.09.12 |
gitlab 설치 (0) | 2019.09.12 |
- Total
- Today
- Yesterday
- CQRS
- 마이크로서비스 패턴
- 애자일
- 분초사회
- 호모프롬프트
- API Composition
- 육각형인간
- 스포티파이
- SAGA
- 스핀프로젝트
- AXON
- Event Sourcing
- 돌봄경제
- agile
- micro service
- 도파밍
- spotify
- 마이크로서비스
- 요즘남편 없던아빠
- 리퀴드폴리탄
- 디토소비
- 버라이어티가격
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |