fsGroup은 Kubernetes의 securityContext에서 제공하는 옵션으로, Pod가 마운트하는 볼륨의 그룹(GID)을 설정하는 역할을 한다.
fsGroup을 설정하면 Pod 내의 모든 컨테이너가 해당 GID를 가진 그룹으로 볼륨을 접근할 수 있다. 주로 Persistent Volume(PV) 또는 Persistent Volume Claim(PVC) 을 사용할 때 볼륨 내 파일의 권한 문제를 해결하는 데 활용된다.
Pod가 시작될 때 Kubernetes가 자동으로 볼륨의 파일과 디렉토리의 그룹을 fsGroup 값으로 변경한다. 볼륨 내 파일이 root 소유(UID=0)이더라도, fsGroup을 설정하면 특정 GID를 통해 접근할 수 있게 된다. 컨테이너 내에서 특정 GID를 사용하는 애플리케이션이 볼륨을 정상적으로 읽고 쓸 수 있도록 보장하는 기능이다.
기본적으로 Kubernetes는 볼륨을 마운트할 때 기본 root(UID 0) 권한으로 마운트할 수 있다.하지만, 컨테이너 내 애플리케이션이 루트 사용자가 아닌 일반 사용자로 실행될 경우, 볼륨에 대한 쓰기 권한이 없을 수 있다. fsGroup을 설정하면 일반 사용자도 볼륨을 정상적으로 사용할 수 있도록 보장할 수 있다.
로컬의 경우 테스트를 위해 볼륨생성을 먼저 한다.
k apply -f mybusybox.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
namespace: default
spec:
replicas: 1
selector:
matchLabels:
module: busybox
template:
metadata:
labels:
module: busybox
spec:
securityContext:
fsGroup: 1000
volumes:
- name: busybox
persistentVolumeClaim:
claimName: mypvc
containers:
- name: busybox
image: busybox
securityContext:
runAsUser: 0
command:
- "sh"
- "-c"
- "while true; do sleep 6000; done"
volumeMounts:
- mountPath: /mydata
name: busybox
컨테이너가 루트 권한 없이 실행될 경우, fsGroup을 사용하여 볼륨에 대한 권한을 조정할 수 있다.
fsGroup: 1000을 설정하여 PVC에 저장되는 파일들의 그룹을 1000으로 자동 변경한다.
PVC를 사용하는 모든 Pod는 동일한 fsGroup을 설정하면 같은 그룹으로 파일을 읽고 쓸 수 있다.
여러 개의 Pod가 PVC를 공유할 때 권한 문제를 방지할 수 있다.