Kubernetes 치트 시트

Tier: Free, Premium, Ultimate Offering: Self-Managed

이것은 GitLab 지원 팀이 때때로 문제 해결 중에 사용하는 Kubernetes에 관한 유용한 정보 목록입니다. GitLab은 지원 팀이 수집한 지식을 누구나 활용할 수 있도록 공개하고 있습니다.

경고: 이 명령어들은 귀하의 Kubernetes 구성 요소를 변경하거나 손상시킬 수 있으므로 자기 책임 하에 사용하십시오.

만약 유료 티어를 사용 중이고 이러한 명령을 사용하는 방법을 잘 모르겠다면, 지원팀에 문의하여 발생한 모든 문제를 해결받는 것이 가장 좋습니다.

일반 Kubernetes 명령어

  • GCP 프로젝트에 인가하는 방법 (특히 다른 GCP 계정에 프로젝트가 있는 경우에 유용함):

    gcloud auth login
    
  • Kubernetes 대시 보드에 액세스하는 방법:

    # 미니큐브의 경우:
    minikube dashboard —url
    # 로컬이 아닌 설치의 경우 kubectl 구성으로 액세스하는 방법:
    kubectl proxy
    
  • Kubernetes 노드로 SSH하고 루트로 컨테이너에 들어가는 방법 https://github.com/kubernetes/kubernetes/issues/30656:

    • GCP의 경우, 노드 이름을 찾아 gcloud compute ssh node-name를 실행합니다.
    • docker ps를 사용하여 컨테이너를 나열합니다.
    • docker exec --user root -ti container-id bash를 사용하여 컨테이너에 들어갑니다.
  • 로컬 머신에서 파드로 파일을 복사하는 방법:

    kubectl cp file-name pod-name:./destination-path
    
  • CrashLoopBackoff 상태의 파드를 처리하는 방법:

    • Kubernetes 대시 보드를 통해 로그를 확인합니다.
    • Kubectl을 통해 로그를 확인합니다:

      kubectl logs <webservice pod> -c dependencies
      
  • 실시간으로 Kubernetes 클러스터 이벤트를 모두 확인하는 방법:

    kubectl get events -w --all-namespaces
    
  • 이전에 종료된 파드 인스턴스의 로그를 가져오는 방법:

    kubectl logs <pod-name> --previous
    

    로그는 컨테이너/파드 자체에 저장되지 않습니다. 모든 것은 stdout에 작성됩니다. 세부 정보는 12요소 앱을 읽어보세요.

  • 클러스터에 구성된 cron 작업 가져오는 방법

    kubectl get cronjobs
    

    기반 cron 작업을 구성하면 여기에서 새로운 일정을 볼 수 있습니다. 일정에 대한 일부 세부 정보는 CronJob를 사용한 자동화된 작업 실행에서 찾을 수 있습니다.

GitLab 특정 Kubernetes 정보

  • Kubernetes Helm 차트를 테스트하는 데 사용할 수 있는 최소한의 구성.

  • 별도의 파드의 로그를 실시간으로 가져오기. webservice 파드의 예제:

    kubectl logs gitlab-webservice-54fbf6698b-hpckq -c webservice
    
  • 동일한 레이블을 공유하는 모든 파드를 따라가며 볼트 및 컨테이너:

    # webservice 파드의 모든 컨테이너
    kubectl logs -f -l app=webservice --all-containers=true --max-log-requests=50
    
    # 모든 webservice 파드의 webservice 컨테이너만
    kubectl logs -f -l app=webservice -c webservice --max-log-requests=50
    
  • 한 번에 모든 컨테이너에서 로그를 스트리밍하는 방법. 이는 리눅스 패키지 설치의 gitlab-ctl tail 명령과 유사합니다:

    kubectl logs -f -l release=gitlab --all-containers=true --max-log-requests=100
    
  • gitlab 네임스페이스의 모든 이벤트 확인 (Helm 차트를 설치할 때 다른 네임스페이스를 지정한 경우 네임스페이스 이름이 다를 수 있음):

    kubectl get events -w --namespace=gitlab
    
  • 대부분의 유용한 GitLab 도구(콘솔, Rake 작업 등)은 toolbox 파드에서 찾을 수 있습니다. 내부에서 명령을 실행하거나 외부에서 실행할 수 있습니다.

    참고: GitLab 14.2(charts 5.2)에서 task-runner 파드가 toolbox로 이름이 변경되었습니다.

    # 파드 찾기
    kubectl --namespace gitlab get pods -lapp=toolbox
    
    # 파드에 들어가기
    kubectl --namespace gitlab exec -it <toolbox-pod-name> -- bash
    
    # 레일즈 콘솔 열기
    # 레일즈 콘솔은 다른 GitLab 파드에서도 호출할 수 있습니다.
    /srv/gitlab/bin/rails console
    
    # 소스 스타일 명령어도 작동해야 합니다
    cd /srv/gitlab && bundle exec rake gitlab:check RAILS_ENV=production
    
    # GitLab 체크 실행. 특정 구조 때문에 출력이 혼란스럽고 잘못될 수 있습니다.
    /usr/local/bin/gitlab-rake gitlab:check
    
    # 파드에 들어가지 않고 콘솔 열기
    kubectl exec -it <toolbox-pod-name> -- /srv/gitlab/bin/rails console
    
    # DB 마이그레이션 상태 확인
    kubectl exec -it <toolbox-pod-name> -- /usr/local/bin/gitlab-rake db:migrate:status
    

    /usr/local/bin/gitlab-rake, 대신에 gitlab-rake도 사용할 수 있습니다.

  • 인프라 > Kubernetes 클러스터 통합의 문제 해결:

    • kubectl get events -w --all-namespaces의 출력 확인
    • gitlab-managed-apps 네임스페이스 내의 파드 로그 확인
    • GitLab 측에서 Sidekiq 로그와 Kubernetes 로그 확인. Helm 차트를 통해 GitLab을 설치한 경우, kubernetes.log는 Sidekiq 파드 내에서 찾을 수 있습니다.
  • 초기 관리자 비밀번호 가져오기 https://docs.gitlab.com/charts/installation/deployment.html#initial-login:

    # 비밀번호를 포함하는 시크릿의 이름을 찾기
    kubectl get secrets | grep initial-root
    # 디코딩하기
    kubectl get secret <secret-name> -ojsonpath={.data.password} | base64 --decode ; echo
    
  • GitLab PostgreSQL 데이터베이스에 연결하는 방법.

    참고: GitLab 14.2 (차트 5.2) 이후:

    kubectl exec -it <toolbox-pod-name> -- /srv/gitlab/bin/rails dbconsole --include-password --database main
    

    GitLab 14.1 (차트 5.1) 및 이전:

    kubectl exec -it <task-runner-pod-name> -- /srv/gitlab/bin/rails dbconsole --include-password
    
  • Helm 설치 상태에 관한 정보 가져오는 방법:

    helm status name-of-installation
    
  • Helm 차트를 사용하여 설치된 GitLab을 업데이트하는 방법:

    helm repo update
    
    # 현재 값 가져와 yaml 파일에 리디렉션하기(gitlab.rb 값의 유사물)
    helm get values <release name> > gitlab.yaml
    
    # 업그레이드 실행하기
    helm upgrade <release name> <chart path> -f gitlab.yaml
    

    Helm 차트를 사용하여 GitLab을 업데이트하는 방법도 참고하세요.

  • GitLab 구성을 변경하는 방법:

    • gitlab.yaml 파일 수정하기.
    • 다음 명령어 실행하여 변경 사항 적용하기:

      helm upgrade <release name> <chart path> -f gitlab.yaml
      
  • 릴리즈에 대한 매니페스트 가져오는 방법. 이는 모든 Kubernetes 리소스 및 종속 차트 정보를 포함하고 있기 때문에 유용할 수 있습니다:

    helm get manifest <release name>
    

KubeSOS 보고서의 Fast-Stats

KubeSOS는 GitLab 클러스터 구성 및 GitLab 클라우드 네이티브 차트 배포에서 로그를 수집하는 도구입니다. fast-stats를 사용하여 GitLab 로그에서 성능 통계를 빠르게 생성하고 비교할 수 있는 최소 메모리 사용량을 가진 도구입니다.

  • fast-stats 실행:

    cat <file-name> | cut -d  ' ' -f2- | grep ^{ | fast-stats
    
  • 오류 목록:

    cat <file-name> | cut -d ' ' -f2- | grep ^{ | fast-stats errors
    
  • fast-stats 상위 실행:

    cat <file-name> | cut -d ' ' -f2- | grep ^{ | fast-stats top
    
  • 출력되는 행의 수 변경. 기본적으로 10개의 행이 출력됩니다.

    cat <file-name> | cut -d ' ' -f2- | grep ^{ | fast-stats -l <number of rows>
    

macOS의 minikube를 통한 최소 GitLab 구성 설치

이 섹션은 minikube를 사용한 Kubernetes 개발Helm에 기반을 두고 있습니다. 자세한 내용은 해당 문서를 참조하십시오.

  • Homebrew를 통해 Kubectl 설치:

    brew install kubernetes-cli
    
  • Homebrew를 통해 minikube 설치:

    brew cask install minikube
    
  • minikube 시작 및 구성. minikube가 시작되지 않는 경우 minikube delete && minikube start를 실행해 보세요 그리고 다음 단계를 반복하세요:

    minikube start --cpus 3 --memory 8192 # GitLab 작동 최소량
    minikube addons enable ingress
    
  • Homebrew를 통해 Helm 설치 및 초기화:

    brew install helm
    
  • minikube 최소 값 YAML 파일을 워크스테이션으로 복사:

    curl --output values.yaml "https://gitlab.com/gitlab-org/charts/gitlab/raw/master/examples/values-minikube-minimum.yaml"
    
  • minikube ip 명령어로 IP 주소를 찾아 해당 IP 주소로 YAML 파일을 업데이트하세요.

  • GitLab Helm 차트 설치:

    helm repo add gitlab https://charts.gitlab.io
    helm install gitlab -f <path-to-yaml-file> gitlab/gitlab
    

    일부 GitLab 설정을 수정하려면 위 설명된 구성을 기본으로 사용하여 자체 YAML 파일을 만들 수 있습니다.

  • 설치 진행 상황은 helm status gitlabminikube dashboard를 통해 모니터링하세요. 워크스테이션의 자원 양에 따라 설치에 20-30분 정도 소요될 수 있습니다.

  • 모든 파드가 Running 또는 Completed 상태인 경우 초기 로그인에 설명된 대로 GitLab 패스워드를 가져와 UI를 통해 GitLab에 로그인하세요. https://gitlab.domain에서 액세스할 수 있으며 domain은 YAML 파일에서 제공된 값입니다.