2.7. 일반적인 3scale 설치 문제 해결
이 섹션에는 일반적인 설치 문제 목록이 포함되어 있으며 문제 해결에 대한 지침을 제공합니다.
2.7.1. 더티 영구 볼륨 클레임을 남기는 이전 배포
문제
이전 배포 시도에서는 더티 PVC(영구 볼륨 클레임)로 인해 MySQL 컨테이너가 시작되지 않습니다.
원인
OpenShift에서 프로젝트를 삭제해도 연결된 PVC는 정리되지 않습니다.
해결책
절차
oc get pvc
명령을 사용하여 오류가 있는 MySQL 데이터가 포함된 PVC를 찾습니다.# oc get pvc NAME STATUS VOLUME CAPACITY ACCESSMODES AGE backend-redis-storage Bound vol003 100Gi RWO,RWX 4d mysql-storage Bound vol006 100Gi RWO,RWX 4d system-redis-storage Bound vol008 100Gi RWO,RWX 4d system-storage Bound vol004 100Gi RWO,RWX 4d
-
OpenShift UI에서
cancel deployment
를 클릭하여 system-mysql pod의 배포를 중지합니다. - MySQL 경로 아래의 모든 항목을 삭제하여 볼륨을 정리합니다.
-
새
system-mysql
배포를 시작합니다.
2.7.2. 인증된 이미지 레지스트리의 인증 정보가 잘못되었거나 누락됨
문제
Pod가 시작되지 않습니다. 이미지 스트림에 다음 오류가 표시됩니다.
! error: Import failed (InternalError): ...unauthorized: Please login to the Red Hat Registry
원인
OpenShift 4.x에 3scale을 설치하는 동안 OpenShift는 이미지 스트림이 참조하는 이미지를 가져올 수 없기 때문에 포드를 시작하지 못합니다. 이는 Pod가 가리키는 레지스트리에 대해 인증할 수 없기 때문에 발생합니다.
해결책
절차
다음 명령을 입력하여 컨테이너 레지스트리 인증 구성을 확인합니다.
$ oc get secret
시크릿이 있는 경우 터미널에 다음 출력이 표시됩니다.
threescale-registry-auth kubernetes.io/dockerconfigjson 1 4m9s
- 그러나 출력이 표시되지 않는 경우 다음을 수행해야 합니다.
- 이전에 레지스트리 서비스 계정을 생성하는 동안 설정한 인증 정보를 사용하여 보안을 생성합니다.
-
제공된
oc create secret
명령에서 <your- registry-service-account-username> 및 <
단계를 사용합니다.your-
registry-service-account-password >를 교체하여 OpenShift에서 레지스트리 인증 구성 APIManager 리소스와 동일한 네임스페이스에
threescale-registry-auth
시크릿을 생성합니다. <project-name>
내에서 다음을 실행해야 합니다.$ oc project <project-name> $ oc create secret docker-registry threescale-registry-auth \ --docker-server=registry.redhat.io \ --docker-username="<your-registry-service-account-username>" \ --docker-password="<your-registry-service-account-password>" --docker-email="<email-address>"
APIManager 리소스를 삭제하고 다시 생성합니다.
$ oc delete -f apimanager.yaml apimanager.apps.3scale.net "example-apimanager" deleted $ oc create -f apimanager.yaml apimanager.apps.3scale.net/example-apimanager created
검증
다음 명령을 입력하여 배포 상태가
Starting
또는Ready
상태인지 확인합니다. 그런 다음 Pod가 생성되기 시작합니다.$ oc describe apimanager (...) Status: Deployments: Ready: apicast-staging system-memcache system-mysql system-redis zync zync-database zync-que Starting: apicast-production backend-cron backend-worker system-sidekiq system-sphinx Stopped: backend-listener backend-redis system-app
다음 명령을 입력하여 각 Pod의 상태를 확인합니다.
$ oc get pods NAME READY STATUS RESTARTS AGE 3scale-operator-66cc6d857b-sxhgm 1/1 Running 0 17h apicast-production-1-deploy 1/1 Running 0 17m apicast-production-1-pxkqm 0/1 Pending 0 17m apicast-staging-1-dbwcw 1/1 Running 0 17m apicast-staging-1-deploy 0/1 Completed 0 17m backend-cron-1-deploy 1/1 Running 0 17m
2.7.3. Docker 레지스트리에서 잘못 가져 오기
문제
설치 중에 다음 오류가 발생합니다.
svc/system-redis - 1EX.AMP.LE.IP:6379 dc/system-redis deploys docker.io/rhscl/redis-32-rhel7:3.2-5.3 deployment #1 failed 13 minutes ago: config change
원인
OpenShift는 docker
명령을 실행하여 컨테이너 이미지를 검색하고 가져옵니다. 이 명령은 registry.redhat.io
Red Hat Ecosystem Catalog 대신 docker.io
Docker 레지스트리를 참조합니다.
이는 시스템에 예기치 않은 버전의 Docker 컨테이너 환경이 포함된 경우 발생합니다.
해결책
절차
적절한 Docker 컨테이너 버전 을 사용합니다.
2.7.4. 영구 볼륨이 로컬에 마운트될 때 MySQL의 권한 문제
문제
system-msql Pod가 충돌하며 배포되지 않아 이에 종속된 다른 시스템이 배포에 실패합니다. Pod 로그에 다음 오류가 표시됩니다.
[ERROR] Cannot start server : on unix socket: Permission denied [ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ? [ERROR] Aborting
원인
MySQL 프로세스는 부적절한 사용자 권한으로 시작됩니다.
해결책
절차
영구 볼륨에 사용되는 디렉터리에는 root 그룹에 대한 쓰기 권한이 있어야 합니다. MySQL 서비스가 root 그룹에서 다른 사용자로 실행되므로 root 사용자에 대한 읽기-쓰기 권한이 있는 것만으로는 충분하지 않습니다. root 사용자로 다음 명령을 실행합니다.
chmod -R g+w /path/for/pvs
SElinux가 액세스를 차단하지 못하도록 다음 명령을 실행합니다.
chcon -Rt svirt_sandbox_file_t /path/for/pvs
2.7.5. 로고 또는 이미지를 업로드할 수 없음
문제
로고를 업로드할 수 없음 - system-app
로그에 다음과 같은 오류가 표시됩니다.
Errno::EACCES (Permission denied @ dir_s_mkdir - /opt/system/public//system/provider-name/2
원인
영구 볼륨은 OpenShift에서 쓸 수 없습니다.
해결책
절차
OpenShift에서 영구 볼륨에 쓸 수 있는지 확인합니다. root 그룹이 소유해야 하며 쓰기 가능한 그룹이어야 합니다.
2.7.6. OpenShift에서 작동하지 않는 테스트 호출
문제
테스트 호출은 OpenShift에서 새 서비스 및 경로를 생성한 후 작동하지 않습니다. curl을 통한 직접 호출도 실패합니다. 즉, service not available
.
원인
3scale에서는 기본적으로 HTTPS 경로가 필요하며 OpenShift 경로는 보안되지 않습니다.
해결책
절차
OpenShift 라우터 설정에서 보안 경로 확인란이 클릭되었는지 확인합니다.
2.7.7. 3scale과 다른 프로젝트의 APIcast 배포 실패
문제
APIcast 배포가 실패합니다(pod가 파란색으로 바뀌지 않음). 로그에 다음 오류가 표시됩니다.
update acceptor rejected apicast-3: pods for deployment "apicast-3" took longer than 600 seconds to become ready
Pod에 다음 오류가 표시됩니다.
Error synching pod, skipping: failed to "StartContainer" for "apicast" with RunContainerError: "GenerateRunContainerOptions: secrets \"apicast-configuration-url-secret\" not found"
원인
시크릿이 제대로 설정되어 있지 않았습니다.
해결책
절차
APIcast v3을 사용하여 보안을 생성할 때 apicast-configuration-url-secret
을 지정합니다.
oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<ACCESS_TOKEN>@<TENANT_NAME>-admin.<WILDCARD_DOMAIN>