기본적인 kubernetes resource, option 등을 설명한 블로그입니다. 추가적인 기능을 보고싶으시면 docs를 참고바랍니다.
https://kubernetes.io/docs/home/
- configmap -> 컨테이너 구성 정보를 한 곳에서 정리.
- kubectl create configmap [config_name] --from-literal=[key]=[value]
- kubectl create configmap [config_name] --from-file=[file name] -> key = file name, value = file 내용
- kubectl cretae configmap [config_name] --from-file=[key]=[configmap file name] -> key = [key], value = file 내용
- kubectl cretae configmap [config_name] --from-file=[directory name] -> key = directory 안의 file name, value = file 내용
apiVersion: v1
kind: configMap
metadata:
name: app-config
data:
[key]: [value]
[key]: [value]
...
- 위의 value 값은 1mib를 초과할 수 없다.
- kubectl get configmaps [config name]
- version은 apps/v1
...
spec:
containers:
- image: smlinux/genid:env
env:
- name: INTERVAL
valueFrom: # config file을 수정하면 pod를 다시 실행. configmap 안의 특정 key값만 가져올 때
- configMapKeyRef:
name: [config name]
key: [key name]
...
spec:
containers:
- image: smlinux/genid
envFrom: # config map 전체 가져올 때.
- configMapRef:
name: [config name]
kind: Pod
...
spec:
...
containers:
- image: smlinux/genid:env
...
volumeMounts:
- name: [volume name]
mountPath: [mount path]
- image: nginx:1.14
...
volumeMounts:
- name: [volume name]
mountPath: [mount path]
readOnly: true
volumes:
- name: [volume name]
emptyDir: {}
- name: [volume name]
configMap:
name: [config name]
items:
- key: [config key] # mount path안에서 file name으로 지정.
path: [mount로 저장할 file 명]
- Secret -> 파드들의 데이터들을 인코딩해서 한 곳에 저장. configmap하고 다른 점은 인코딩한다는 점. password, auth token, ssh key 저장할 때 쓰임.
- kubectl create secret [available command] [name] [flags] [options] -> available command는 docker-registry, generic, tls가 있고 반드시 그 중 하나는 써야하고 뒤에 올 parameter도 달라진다.
- kubectl create secret tls [name] --cert=[cert file path] --key=[key file path]
- kubectl create secret docker-registry [name] --docker-username=[user name] --docker-password=[password] --docker-email=[email]
- kubectl create secret generic [name] --from-literal=[key]=[value] --from-file=[dir name]
- secret을 여러가지 타입이 있는데, Opaque -> 임의의 사용자 정의 데이터(generic), kubernetes.io/tls -> tls 관련 정의(tls), kubernetes.io/dockerconfigjson -> ~/.docker/config.json 파일(docker-registry) 등등 많이 있다.
kind: Pod
...
spec:
containers:
- image: smlinux/genid:env
env:
- name: [env name]
valueFrom:
secreteKeyRef:
name: [secrete name]
key: [key name]
- 파일로는 kubectl create -f [secret fle name] -> declarative
apiVersion: v1
kind: Secret
metadata:
name: secret
data:
[key]: [value]
[key]: [value]
...
- secret은 describe로 value값을 볼 수 없지만, value에 plain text가 들어가는 것보다 echo -n [value] | base64 같은 encoding을 통해 나온 값을 넣어주는 것이 안전.
- echo -n [encoded value] | base64 --decode로 decoding할 수 있으며, secret안의 value값을 보고 싶으면, kubectl get secret [secret name] -o yaml로 볼 수 있다.
- secret은 yaml로 생성하려면 annotation값이 문서에 적힌대로 써야하며, value는 10바이트 이상이여야한다.
kind: Pod
...
spec:
containers:
- image: smlinux/genid:env
env:
- name: [env name]
valueFrom:
- secretRef:
name: [secrete file name]
kind: Pod
...
spec:
...
containers:
- image: smlinux/genid:env
...
volumeMounts:
- name: [volume name]
mountPath: [mount path]
- image: nginx:1.14
...
volumeMounts:
- name: [volume name]
mountPath: [mount path]
readOnly: true
volumes:
- name: [volume name]
emptyDir: {}
- name: [volume name]
secret:
secreteName: [secret name]
items:
- key: [config key] # mount path안에서 file name으로 지정.
path: [mount로 저장할 file 명] # volume mount는 decoding되서 저장.
- secret etcd에 암호화 하지 않은 텍스트로 저장되므로, 최대 크기는 1MB
- 현재 볼륨에서 사용된 컨피그맵이 업데이트되면, 프로젝션된 키도 마찬가지로 업데이트된다. 환경 변수로 사용되는 컨피그맵은 자동으로 업데이트되지 않으며 파드를 다시 시작해야 한다.
'kubernetes, helm, rancher' 카테고리의 다른 글
kubernetes auth, certificates (0) | 2021.12.02 |
---|---|
kubernetes scheduling (0) | 2021.12.01 |
kubernetes labels (0) | 2021.11.28 |
kubernetes services (0) | 2021.11.27 |
kubernetes HA(Highly Available), multi master node (0) | 2021.11.27 |