on
[102일 차] 21.12.16 : Kubernetes 4
[102일 차] 21.12.16 : Kubernetes 4
Kubernetes
- 스토리지
1교시
스토리지 : Vagrant 환경에서 실습하기 어려우니 EKS로 실습할 것.
여러 개의 노드 안에 여러 개의 파드 안에 여러 개의 컨테이너가 있는데, 이걸 일일이 마운트 하는 것은 번거롭다.
-> 마운트를 도와주는 오브젝트 : 스토리지
k8s 내부 데이터 보존을 위해 외부 스토리지 시스템과 연결하여 퍼시스턴스 볼륨 사용
-> 파드와 물리적 외부 볼륨 사이에 스토리지 오브젝트를 배치, 파드 측에서는 물리적 볼륨에 대해 알 필요 없다
노드 내부에서 간단하게 사용할 수 있는 볼륨 - emptyDir과 hostPath
emptyDir
노드의 디스크를 파드가 일시적으로 사용하는 방법.
같은 파드의 컨테이너 간에는 볼륨을 공유할 수 있으나 다른 파드에서는 접근할 수 없다.
파드가 종료되면 emptyDir은 삭제된다. 데이터를 일시적으로 기록하는 용도로 사용
같은 노드라도 다른 파드라면 공유 불가
(다른 노드도 당연히 공유 불가)
hostPath
동일하게 노드의 디스크를 사용하지만, 같은 노드의 다른 파드에서 볼륨 공유 가능
(다른 노드는 여전히 공유 불가)
노드가 정지되면 데이터에 접근할 수 없어 간단하게 사용하는 수준으로 채용
노드 망가지면 데이터 날아가는 단점은 여전하다
그래서 다른 노드 간의 볼륨 공유는 외부 저장소를 사용한다.
노드가 망가져도 외부 볼륨에 저장했으니 데이터를 잃어버릴 걱정이 없다.
외부 스토리지에 백업/Failover 대비를 해 놓으면 끝.
AWS에서 외부 볼륨 용도로 사용하는 것이 EFS
->NFS 구축, 백업, 장애 방지까지 알아서 해준다.
2~4교시
https://kubernetes.io/ko/docs/concepts/storage/volumes/
쿠버네티스 볼륨 관련 문서
파드를 노드에 어떻게 배포할지는 스케줄러라는 오브젝트가 조정해 준다
-> 이거엔 손대지 않기를 권장한다.
hostPath
대충 비슷한 내용으로 다른 파일을 만들고 파드 생성 후 확인
-> 공유 된다
외부 스토리지 시스템을 사용한다고 해서 반드시 여러 노드에서 볼륨을 공유할 수 있는 것은 아니다.
스토리지 시스템의 동작 방식에 따라 다르다.
NFS 서버는 물리적 개념, 퍼시스턴트 볼륨은 논리적 개념
수동으로 스토리지를 설정한다는 것은 NFS 서버가 하나의 물리적 서버로 존재한다는 것
자동으로 스토리지를 설정한다는 것은 물리적 서버가 모인 클러스터일 경우
수동으로 스토리지 설정하기
1. NFS 서비스 구성
2. 퍼시스턴트 볼륨(PV) 생성
3. 사용자는 PVC 생성
4. 쿠버네티스가 PVC를 PV에 마운트
5. PVC를 참조하는 볼륨을 가진 파드 생성
5~8교시
EKS를 쓰다가 없애고, Vagrant 환경을 만든다고 해서 바로 기본 환경으로 설정되는 것은 아니다.
-> kubectl config get-contexts로 환경을 확인하고, * 표시가 되어있는지 확인
-> 안되어 있다면 kubectl config use-context [이름] 실행
어쨌거나 수동 스토리지 설정을 요약하면
NFS 서버에 PV, PVC 구축 후 마운트
NFS 대신 AWS EFS를 사용할 수 있다.
한 번 구성하면 동적으로 정보가 바뀌더라도 자동으로 인식해서 변경사항이 없게끔 자동으로 구성한다.
일단 다음 정보들을 긁어놓는다
클러스터 VPC ID, 퍼블릭 서브넷 ID
vpc-0e092ce359e6ed6cc
subnet-0da3e0c1ca57c94c8
subnet-0d9116486739ebdb6
subnet-0b808ecca6118130c
이후 콘솔 접속해서 EFS를 수동으로 만들자.
만든 후 attach에서 연결 명령어를 긁어온다
EFS ID, 연결 명령어, 엔드포인트 긁어두기
RBAC(Role-Based Access Control) : 역할 기반 접근 제어 특정 사용자와 역할 2가지를 조합하여 사용자에게 특정 권한을 부여한다. Role은 특정 API나 리소스(Pod, Deployment 등), 사용 권한(get, edit 등)을 매니페스트 파일에 명시해둔 규칙의 집합 특정 네임스페이스에 대한 권한을 관리한다. Role binding은 역할과 특정 사용자를 묶어주는 역할을 수행하고, 지정한 사용자들에 한해 역할에 명시한 규칙들을 기준으로 권한을 사용할 수 있도록 권한을 관리.
스토리지 클래스는 한 번 만들면 종속적이지 않다.
= 다른 디플로이먼트에서도 갖다 쓸 수 있다
명령어로 EKS가 삭제되지 않으면(에러가 발생해 삭제가 안된다면) Cloudformation으로 가서 확인
-> 스택 삭제 중 에러가 발생했을 것이다.
스택을 직접 삭제하면 명령어로 삭제하는 것과 별 차이가 없다.
팀플 끝나고 시간이 있으면 쿠버네티스 부분은 전체적으로 다시 들을 수 있으면 좋겠다.
from http://ballenabox.tistory.com/153 by ccl(A) rewrite - 2021-12-16 19:26:41