워크스페이스 구성
- GitLab 15.11에 도입되었습니다 사용자가 조절 가능한 특징인
remote_development_feature_flag
라는 플래그와 함께. 기본적으로 비활성화 상태입니다.- GitLab 16.0에서 GitLab.com과 Self-managed에서 활성화되었습니다.
- GitLab 16.7에서 일반적으로 사용 가능하게 되었습니다.
remote_development_feature_flag
특징 플래그가 삭제되었습니다.
Workspaces를 사용하여 GitLab 프로젝트를 위해 격리된 개발 환경을 생성하고 관리할 수 있습니다.
각 워크스페이스는 해당 프로젝트의 특정한 요구 사항을 충족시키기 위해 사용자 정의할 수 있는 종속성, 라이브러리 및 도구의 고유한 모음을 포함합니다.
워크스페이스 인프라 구성
워크스페이스를 생성하기 전에, 인프라를 한 번만 설정해야 합니다.
워크스페이스 인프라를 설정하려면 다음을 수행하세요:
- GitLab 에이전트가 지원하는 Kubernetes 클러스터를 설정합니다. 지원되는 Kubernetes 버전을 확인하세요.
- Kubernetes 클러스터의 오토스케일링이 활성화되어 있는지 확인합니다.
- Kubernetes 클러스터에서:
- 각 워크스페이스에 대해 볼륨을 동적으로 할당할 수 있도록 기본 저장소 클래스가 정의되어 있는지 확인합니다.
- 선택한 Ingress 컨트롤러(예:
ingress-nginx
)를 설치합니다. - GitLab 에이전트를 설치하고 구성합니다.
-
dns_zone
과*.<dns_zone>
을 Ingress 컨트롤러가 노출하는 로드 밸런서로 지정합니다. 이 로드 밸런서는 웹소켓을 지원해야 합니다. - GitLab 워크스페이스 프록시를 설정합니다.
- 선택 사항. 워크스페이스의 sudo 액세스를 구성합니다.
워크스페이스 생성
- 비공개 프로젝트 지원이 GitLab 16.4에 도입되었습니다.
- Git 참조 및 Devfile 위치가 GitLab 16.10에 도입되었습니다.
- 자동 종료 전 시간이 GitLab 16.10에서 워크스페이스 자동으로 종료로 변경되었습니다.
- 변수가 GitLab 17.1에 도입되었습니다.
필수 사항:
- 워크스페이스 인프라를 설정해야 합니다.
- 워크스페이스 및 에이전트 프로젝트에 적어도 개발자 역할이 있어야 합니다.
- 워크스페이스를 생성하려는 각 프로젝트에 devfile을 생성하세요:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 프로젝트의 루트 디렉터리에
devfile
이라는 이름의 파일을 생성합니다. 예제 구성 중 하나를 사용할 수 있습니다.
- devfile에서 사용하는 컨테이너 이미지가 임의의 사용자 ID를 지원하는지 확인하세요.
워크스페이스를 생성하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 편집 > 새 워크스페이스를 선택합니다.
- 클러스터 에이전트 드롭다운 목록에서 프로젝트가 속한 그룹이 소유한 클러스터 에이전트를 선택합니다.
- Git 참조 드롭다운 목록에서 GitLab이 워크스페이스를 생성하는 데 사용하는 브랜치, 태그 또는 커밋 해시를 선택합니다.
- Devfile 위치에는 워크스페이스를 구성하는 데 사용하는 devfile의 경로를 입력합니다. devfile이 프로젝트의 루트 디렉터리에 있지 않으면 상대 경로를 지정합니다.
- 워크스페이스 자동으로 종료에는 워크스페이스가 자동으로 종료되기까지의 시간(시간 단위)을 입력합니다. 이 시간 제한은 워크스페이스가 과도한 리소스를 소비하거나 무기한 실행되는 것을 방지하는 안전 장치입니다.
- 변수에는 워크스페이스로 주입하려는 환경 변수의 키와 값을 입력합니다. 새 변수를 추가하려면 변수 추가를 선택합니다.
- 워크스페이스 생성을 선택합니다.
워크스페이스가 시작하는 데 몇 분이 소요될 수 있습니다.
워크스페이스를 열려면 미리 보기에서 워크스페이스를 선택합니다.
터미널에도 액세스할 수 있으며 필요한 종속성을 설치할 수 있습니다.
워크스페이스에 대한 sudo 액세스 구성
필수 사항:
- 사용되는 devfile의 컨테이너 이미지가 임의의 사용자 ID를 지원하는지 확인하세요.
워크스페이스용 sudo 액세스는 devfile에서 사용되는 컨테이너 이미지가 사용자 ID
0
로 실행되는 것을 의미하지 않습니다.
개발 환경은 종종 실행 중에 종속성을 설치, 구성 및 사용하기 위해 sudo 권한이 필요합니다.
워크스페이스용 안전한 sudo 액세스를 다음으로 구성할 수 있습니다:
Sysbox 사용
Sysbox는 컨테이너를 개선하여 컨테이너 격리를 향상시키고 동일한 작업 부하를 수행할 수 있도록 하는 컨테이너 런타임입니다.
Sysbox를 사용하도록 워크스페이스를 구성하려면:
- Kubernetes 클러스터에 Sysbox 설치합니다.
- GitLab 에이전트에서 워크스페이스용 다음 설정을 구성합니다:
-
default_runtime_class
을 Sysbox에 의해 설정된 런타임 클래스로 지정합니다. 예:sysbox-runc
. -
allow_privilege_escalation
을true
로 설정합니다.
-
Kata Containers와 함께
Kata Containers는 가벼운 가상 머신(VM)의 표준 구현으로, 컨테이너와 유사한 느낌과 성능을 제공하지만 VM의 워크로드 격리 및 보안 이점을 제공합니다.
Kata Containers를 사용하도록 워크스페이스를 구성하려면:
- Kubernetes 클러스터에 Kata Containers 설치.
- 다음과 같이 GitLab 에이전트를 구성하십시오:
-
default_runtime_class
를 Kata Containers에서 설정한 런타임 클래스 중 하나로 설정합니다. 예:kata-qemu
. -
allow_privilege_escalation
를true
로 설정합니다.
-
사용자 네임스페이스로
사용자 네임스페이스는 컨테이너 내에서 실행 중인 사용자를 호스트의 사용자로부터 격리합니다. Kubernetes 1.30에는 이 기능이 베타 상태입니다.
Kubernetes에서 사용자 네임스페이스 기능을 사용하도록 워크스페이스를 구성하려면:
- 사용자 네임스페이스로 Kubernetes 클러스터 구성.
- GitLab 에이전트에서 다음 설정을 구성하십시오:
-
use_kubernetes_user_namespaces
를true
로 설정합니다. -
allow_privilege_escalation
를true
로 설정합니다.
-
SSH로 워크스페이스에 연결
필수 조건:
- SSH 액세스는
devfile
에서 지정한 이미지에 대해 활성화되어 있어야 합니다. 자세한 정보는 워크스페이스 컨테이너 이미지 업데이트에서 확인하세요. - GitLab 워크스페이스 프록시를 가리키는 TCP 로드 밸런서를 구성해야 합니다. 자세한 정보는 DNS 레코드 업데이트에서 확인하세요.
SSH 클라이언트로 워크스페이스에 연결하려면:
-
gitlab-workspaces-proxy-ssh
서비스 외부 IP 주소를 가져옵니다.kubectl -n gitlab-workspaces get service gitlab-workspaces-proxy-ssh
-
워크스페이스의 이름을 가져옵니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택합니다.
- 귀하의 작업을 선택합니다.
- 워크스페이스를 선택합니다.
- 연결하려는 워크스페이스의 이름을 복사합니다.
-
다음 명령을 실행합니다.
ssh <작업공간_이름>@<ssh_프록시_IP_주소>
-
패스워드로, 적어도
read_api
스코프가 있는 개인 액세스 토큰을 입력합니다.
TCP 로드 밸런서를 통해 gitlab-workspaces-proxy
에 연결하는 경우,
gitlab-workspaces-proxy
는 사용자 이름(작업공간 이름)을 확인하고 다음을 확인하기 위해 GitLab과 상호 작용합니다:
- 개인 액세스 토큰
- 사용자의 워크스페이스 액세스
워크스페이스 컨테이너 이미지 업데이트
SSH 연결용 런타임 이미지를 업데이트하려면:
- 런타임 이미지에
sshd
를 설치합니다. - 암호 없이 컨테이너에 액세스를 허용하기 위해
gitlab-workspaces
라는 사용자를 만듭니다.
FROM golang:1.20.5-bullseye
# `openssh-server` 및 기타 종속성 설치
RUN apt update \
&& apt upgrade -y \
&& apt install openssh-server sudo curl git wget software-properties-common apt-transport-https --yes \
&& rm -rf /var/lib/apt/lists/*
# 빈 암호를 허용합니다
RUN sed -i 's/nullok_secure/nullok/' /etc/pam.d/common-auth
RUN echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config
# 워크스페이스 호스트 키 생성
RUN ssh-keygen -A
RUN chmod 775 /etc/ssh/ssh_host_rsa_key && \
chmod 775 /etc/ssh/ssh_host_ecdsa_key && \
chmod 775 /etc/ssh/ssh_host_ed25519_key
# `gitlab-workspaces` 사용자 생성
RUN useradd -l -u 5001 -G sudo -md /home/gitlab-workspaces -s /bin/bash gitlab-workspaces
RUN passwd -d gitlab-workspaces
ENV HOME=/home/gitlab-workspaces
WORKDIR $HOME
RUN mkdir -p /home/gitlab-workspaces && chgrp -R 0 /home && chmod -R g=u /etc/passwd /etc/group /home
# `/etc/shadow`에 서명 액세스를 허용
RUN chmod 775 /etc/shadow
USER gitlab-workspaces
관련 주제
문제 해결
워크스페이스를 사용할 때 다음과 같은 문제가 발생할 수 있습니다.
오류: 리스 갱신에 실패했습니다
GitLab Kubernetes 에이전트의 알려진 문제로 인해 워크스페이스를 만들 수 없을 수 있습니다. 에이전트 로그에 다음과 같은 오류 메시지가 나타날 수 있습니다:
{"level":"info","time":"2023-01-01T00:00:00.000Z","msg":"failed to renew lease gitlab-agent-remote-dev-dev/agent-123XX-lock: timed out waiting for the condition\n","agent_id":XXXX}
이 문제는 에이전트 인스턴스가 리더십 리스를 갱신할 수 없는 경우에 발생하며,
이로 인해 리더 전용 모듈인 remote_development
모듈이 종료됩니다.
이 문제를 해결하려면 에이전트 인스턴스를 다시 시작하십시오.
오류: 워크스페이스를 만들 수 있는 에이전트가 없음
프로젝트에서 워크스페이스를 만들 때 다음과 같은 오류가 발생할 수 있습니다.
워크스페이스를 만들 수 있는 에이전트가 없습니다. 문제 해결을 위해 Workspaces 문서를 참조하세요.
이 문제를 해결하려면: