K8S에 Redis 설치(운영자)

오퍼레이터 설치(수동 설치)

  1. 프로젝트 생성

  2. $ oc new-project <your-project-name>
  1. 프로젝트 이동
    $ oc project <your-project-name>

  1. Git 소스 다운로드
    $ git clone https://github.com/RedisLabs/redis-enterprise-k8s-docs

  1. scc 적용(폴더를 git 소스로 이동한 후 계속)
    $ oc apply -f openshift/scc.yaml securitycontextconstraints.security.openshift.io "redis-enterprise-scc" configured

  1. 운영자 권한 설정
    $ oc adm policy add-scc-to-user redis-enterprise-scc system:serviceaccount:<my-project>:redis-enterprise-operator $ oc adm policy add-scc-to-user redis-enterprise-scc system:serviceaccount:<my-project>:<rec>

  1. 연산자 분포
    $ oc apply -f openshift.bundle.yaml

    → oc get Deployment로 배포 확인


  2. NAME READY UP-TO-DATE AVAILABLE AGE redis-enterprise-operator 1/1 1 1 0m36s
  1. 사용자 지정 Redis Enterprise Cluster(REC) 리소스 생성
    1. Rec 리소스 파일 사용 → Git 소스의 Openshift/rec_rhecl.yaml 사용
    1. rec 파일 편집
      기존 파일 보정
      api 버전: app.redislabs.com/v1종류: RedisEnterpriseClustermetadata: 이름: recspec: # 여기에 필드 추가 nodes: 3 redisEnterpriseImageSpec: 저장소: Registry.connect.redhat.com/redislabs/redis-enterprise versionTag: 6.2.10-90.rhel7-openshift redisEnterpriseServicesRiggerImageSpec: 리포지토리: Registry.connect.redhat.com/redislabs/services-manager bootstrapperImageSpec: 리포지토리: Registry.connect.redhat.com/redislabs/redis-enterprise-operator api 버전: app.redislabs.com/v1종류: RedisEnterpriseClustermetadata: 이름: recspec: # 여기에 필드 추가 nodes: 3 redisEnterpriseImageSpec: 저장소: ecrdev.clouz.io/registry.connect.redhat.com/redislabs/redis-enterprise versionTag: 6.2.8-64.rhel7-openshift redisEnterpriseServicesRiggerImageSpec: 저장소: ecrdev.clouz.io/registry.connect.redhat.com/redislabs/services-manager bootstrapperImageSpec: 리포지토리: ecrdev.clouz.io/registry.connect.redhat.com/redislabs/redis-enterprise-operator

      → 이미지 주소를 변경하여 ECR에 삽입하여 사용

    1. rec 파일(rec_rhel.yaml) 적용
      $ oc apply -f rec_rhecl.yaml

    1. 상태 확인
      $ oc get po NAME                                        READY   STATUS    RESTARTS        AGE rec-test-0                                  2/2     Running   257 (21h ago)   36h rec-test-1                                  2/2     Running   4 (21h ago)     21h rec-test-2                                  2/2     Running   2 (21h ago)     21h rec-test-services-rigger-6fd587c78d-rczg7   1/1     Running   0               42h redis-enterprise-operator-cc9f58fc7-4mw76   2/2     Running   10 (2d1h ago)   2d2h

      → 오류가 발생하여 pod가 표시되지 않았으나 해결 후 services-rigger, rec-test-0 및 rec statefulset이 표시되었습니다.
  1. 관리 콘솔에 연결
    1. 체크 서비스
      $ oc get svc NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE admission       ClusterIP   172.130.240.81   <none>        443/TCP                      5d20h rec-test        ClusterIP   None             <none>        9443/TCP,8001/TCP,8070/TCP   44h rec-test-prom   ClusterIP   None             <none>        8070/TCP                     44h rec-test-ui     ClusterIP   172.130.87.247   <none>        8443/TCP                     44h

    1. 경로 만들기
      $ oc expose svc rec-test-ui route.route.openshift.io/rec-test-ui exposed

      → 그런데 연결이 잘 안됨 → tls 옵션 문제, passthrough로 설정


      → 통과 옵션으로 경로 생성
    2. oc create route passthrough <route 이름> --service=rec-test-ui --port=8443
    1. 경로 수정
      spec:   host: rec-test-ui-redis-enterprise.d3.clouz.io   to:     kind: Service     name: rec-test-ui     weight: 100   port:     targetPort: ui   tls:     termination: passthrough     insecureEdgeTerminationPolicy: Redirect   wildcardPolicy: None

      → 옵션 tls 추가

문제 기록

  1. rec crd 추가 후 포드 오류
Readiness probe failed: Traceback (most recent call last): File "/opt/redislabs/mount/health_check.py", line 24, in <module> file_handler = handlers.TimedRotatingFileHandler('/var/opt/redislabs/log/readiness_check.log', File "/opt/redislabs/lib/python3.9/logging/handlers.py", line 208, in __init__ BaseRotatingHandler.__init__(self, filename, 'a', encoding=encoding, File "/opt/redislabs/lib/python3.9/logging/handlers.py", line 58, in __init__ logging.FileHandler.__init__(self, filename, mode=mode, File "/opt/redislabs/lib/python3.9/logging/__init__.py", line 1146, in __init__ StreamHandler.__init__(self, self._open()) File "/opt/redislabs/lib/python3.9/logging/__init__.py", line 1175, in _open return open(self.baseFilename, self.mode, encoding=self.encoding, PermissionError: (Errno 13) Permission denied: '/var/opt/redislabs/log/readiness_check.log'

→ 포드가 업로드된 노드로 들어가 폴더 권한을 1001:1001로 한 번 설정합니다. 로그 파일이 생성되고 포드가 업로드됩니다.

$ df |grep csi 172.30.249.100:/csishare-csivol-1e2dcc98b9       12058624   2352384   9706240  20% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-1e2dcc98b9/globalmount 172.30.249.100:/csishare-csivol-f0c88861d7       12058624   1603328  10455296  14% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-f0c88861d7/globalmount 172.30.249.100:/csishare-csivol-006af47a4a        4718592   1583616   3134976  34% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-006af47a4a/globalmount 172.30.249.100:/csishare-csivol-cc6bc1b5b0        4718592   1792256   2926336  38% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-cc6bc1b5b0/globalmount 172.30.249.100:/csishare-csivol-0c72deb9e2       12058624   1594624  10464000  14% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-0c72deb9e2/globalmount 172.30.249.100:/csishare-csivol-21fd1dd6cf        3670016   1587200   2082816  44% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-21fd1dd6cf/globalmount 172.30.249.100:/csishare-csivol-c71b2f980e        6815744   1582336   5233408  24% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-c71b2f980e/globalmount 172.30.249.100:/csishare-csivol-3944eeed52        3670016   1582336   2087680  44% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-3944eeed52/globalmount 172.30.249.100:/csishare-csivol-f583b1de27        6815744   1624576   5191168  24% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-f583b1de27/globalmount 172.30.249.100:/csishare-csivol-282e1df81b       22544384   1582080  20962304   8% /var/lib/kubelet/plugins/kubernetes.io/csi/pv/csivol-282e1df81b/globalmount 172.30.249.100:/csishare-csivol-282e1df81b/logs  22544384   1582080  20962304   8% /var/lib/kubelet/pods/e7b355bd-2d76-4a16-8315-f50cf1740bc8/volume-subpaths/csivol-282e1df81b/redis-enterprise-node/3

→ csi 명령 df |grep으로 폴더 위치 확인

→ /var/lib/kubelet/pods/e7b355bd-2d76-4a16-8315-f50cf1740bc8/volume-subpaths/csivol-282e1df81b/redis-enterprise-node/3 이 폴더의 권한을 1001로 설정


K8S에 Redis 설치(운영자) 1