Zookeeper는 안정적인 분산 조정(distributed cordination) 처리를 가능하게 해주는 오픈소스 서버
- 설정 정보 유지, 이름 지정, 분산 동기화 및 그룹 서비스 제공을 위한 중앙 집중식 서비스
- 분산 처리 시스템을 구성할 때 서버 간의 정보 공유, 서버 상태 체크, 동기화에 대한 락 처리를 수행하는 대표적인 오픈소스
특징
1) zookeeper는 심플하다. 주키퍼는 분산된 프로세스가 znode로 불리는 네임스페이스가 cordinate(조정)할 수 있다. 높은 성능과 고가용성으로 대규모 분산처리 시스템에 적합하다.
2) zookeeper는 복제된다. 조정 된 분산 프로세스와 마찬가지로 ZooKeeper 자체는 ensembl이라는 일련의 호스트를 통해 복제된다.
클라이언트는 단일 zookeeper 서버와 연결하여 데이터를 주고받으며 감시 이벤트를 통해 연결 유지 중이라는 것을 알리는 heatbeat를 주고 받는다. 만일 특정 상황으로 인해 연결이 끊어지면, 다른 서버에 연결될 것이다. 이를 통해SPOF(SinglePoint of Failure)가 되는 일을 막는다.
3) zookeeper는 순서화된다. ZooKeeper는 모든 ZooKeeper transaction의 order를 반영하는 숫자로 각 업데이트에 도장을 찍는다.
4) zookeeper는 빠르다. 쓰기보단 읽기 작업 성능에서 빠르다.
5) 네임스페이스는 파일시스템 계층과 유사하며, 디렉토리 구조의 각 노드에 데이터는 저장한다. 파일 시스템과 다른 점은 각 노드에 자식 노드의 데이터 혹은 관련된 데이터가 포함된다.
Znode
- Ephemeral Node(임시노드): 해당 노드는 노드를 생성한 클라이언트의 연결 세션이 유지될 때만 유효하다.
- Persistance Node(영구노드): 데이터를 강제로 삭제하지 않는 이상, 영구적으로 저장되는 노드이다.
- Sequence Node(시퀀스 노드): 노드를 생성할 때 자동으로 sequence 번호가 붙는 노드. 주로 분산 락을 구현하는데 이용한다.
Watches
- 주키퍼는 watch라는 콘셉을 제공하는데, 클라이언트는 노드에 watch를 설정할 수 있다. znode가 업데이트되면 watch는 트리거가되고 제거되며 클라이언트는 노드가 변경되었다는 패킷을 수신하게 된다. 예를 들어 watch를 설정한 상태에서 클라이언트와 서버의 연결이 끊어지면 연결이 끊어졌다는 local 알림을 받을 수 있을 것이다.
보안유지가 필요한 자격증명 및 개인 암호화 키 같은 중요한 정보를 저장하고 분류하기 위해 제공되는 리소스
1) 특징
패스워드 같은 기밀 정보를 Base64 인코딩으로 만들 수 있다.
key=value 쌍으로 사용한다.
환경 변수로 secret 정보를 컨테이너에 전달할 수 있다.
볼륨의 파일로서 시크릿 정보를 저장할 수 있다.
메모리에 저장된다.
시크릿 크기가 너무 커지면 쿠버네티스의 apiserver나 kubelet의 메모리를 많이 차지하게되기 때문에 개별 시크릿의 최대 크기는 1MB까지 정의한다.
2) 종류
Built in 시크릿(default-token secret) : 클러스터 내부에서 API 이용 시 사용됨 : 내부에서 사용되는 계정인 Service account를 생성하면 자동으로 secret 생성 : 만들어진 secret으로 해당 service account가 권한을 가지고 있는 API 접근 가능
사용자 정의 시크릿 : 말그대로 사용자가 정의한 시크릿 : create 명령어를 사용하여 생성할 수 있고, yaml 파일에 정의해서 생성할 수도 있음
3) Secret vs ConfigMap
민감하지 않은 일반 데이터는 configMap 리소스를 사용한다.
중요 데이터가 포함되어 있으면 Secret 리소스를 사용하는 것이 좋다.
4) Built in Secret
모든 Pod에는 자동으로 연결된 secret 볼륨이 존재한다.
$ kubectl describe pod [name]
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-kf7wl (ro)
---------------------------
Volumes:
default-token-kf7wl:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-kf7wl
Optional: false