k8s 노트 6(kubernetes 용기 설정)
13257 단어 docker&k8s
Kubernetes 는 ConfigMap 대상 을 기반 으로 설정 파일 을 용기 에서 분리 하고 설정 데 이 터 를 키 값 으로 저장 합 니 다.이 데 이 터 는 Pod 에서 사용 하거나 시스템 구성 요소 에 설정 할 수 있 습 니 다.
(1)ConfigMap 만 들 기
ConfigMap 의 생 성 은 명령 을 통 해 파일 을 만 들 거나 자원 목록 을 정의 하여 만 들 수 있 습 니 다.명령 을 통 해 만 들 때 명령 문법 형식 은 다음 과 같 습 니 다.
Kubectl create configmap
명령 을 통 해 만 들 때 map-name 은 ConfigMap 대상 의 이름 입 니 다.데이터 원본 을 위해 값,파일 또는 디 렉 터 리 를 통 해 가 져 올 수 있 습 니 다.값 이 무엇이든 ConfigMap 대상 의 ke-value 데이터 로 바 뀌 어야 합 니 다.
1)사용 값 직접 생 성
"kubectl create configmap"명령 을 사용 하여 생 성 할 때"from-literal"옵션 을 사용 하여 명령 줄 에 키 쌍 을 직접 입력 하여 ConfigMap 대상 을 만 들 수 있 습 니 다.
# test-config configmap
[root@master01 ~]# kubectl create configmap test-config --from-literal=key-name=dayi123 --from-literal=key-passwd=dayi1234
configmap/test-config created
# configmap
[root@master01 ~]# kubectl get configmaps test-config -o yaml
apiVersion: v1
data:
key-name: dayi123
key-passwd: dayi1234
kind: ConfigMap
metadata:
creationTimestamp: "2019-01-28T06:23:22Z"
name: test-config
namespace: default
resourceVersion: "2649395"
selfLink: /api/v1/namespaces/default/configmaps/test-config
uid: 365e5478-22c5-11e9-9f5c-000c298d15e0
2)파일 기반 생 성
"kubectl create configmap"명령 에 사용 하기"-from-file"옵션 은 파일 내용 을 기반 으로 ConfigMap 대상 을 만 들 수 있 습 니 다."-from-file 옵션 은 여러 파일 의 내용 을 전달 하기 위해 여러 번 사용 할 수 있 습 니 다.명령 사용 형식 은 다음 과 같 습 니 다.
Kubectl create configmap --from-file=
키 이름 을 스스로 지정 하려 면'from-file'옵션 에서 사용자 정의 키 를 직접 지정 해 야 합 니 다.명령 형식 은 다음 과 같 습 니 다.
Kubectl create configmap --from-file==
파일 기반 configmap 를 사용 하여 nginx 설정 파일 을 만 듭 니 다:
# configmap,
[root@master01 ~]# kubectl create configmap test-nginxconfig --from-file=nginxconfig=/etc/nginx/nginx.conf
configmap/test-nginxconfig created
# nginx configmap, nginx
[root@master01 ~]# kubectl get configmap test-nginxconfig -o yaml
apiVersion: v1
data:
nginxconfig: |+
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
. . . . . .
3)디 렉 터 리 기반 생 성
설정 파일 이 많 고 같은 디 렉 터 리 에 존재 할 때 이 디 렉 터 리 를 configmap 로 만 들 수 있 습 니 다."-from-file 옵션 뒤에 있 는 경 로 는 디 렉 터 리 경 로 를 가리 키 면 디 렉 터 리 에 있 는 모든 파일 을 같은 ConfigMap 자원 에 함께 만 들 수 있 습 니 다.명령 형식 은 다음 과 같 습 니 다.
Kubectl create configmap --from-file=
이 디 렉 터 리 에 여러 개의 파일 이 있 을 때,각각 다른 키 데이터 로 저 장 됩 니 다.예 를 들 어 nginx 의 프로필 디 렉 터 리"/etc/nginx"를 configmap 로 만 듭 니 다.
[root@master01 ~]# kubectl create configmap nginx-dir-config --from-file=/etc/nginx/
configmap/nginx-dir-config created
4)자원 설정 목록 을 사용 하여 configmap 만 들 기
자원 설정 목록 을 사용 하여 configmap 설정 파일 을 정의 할 때 정의 해 야 할 필드 는 보통 apiVersion,kind,metadata 필드 와 데 이 터 를 저장 하 는 관건 적 인 필드 인'data'를 포함 합 니 다.
# configmap
[root@master01 configmap]# cat test01-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-demo
data:
log_level: INFO
log_file: /var/log/nginx/access.log
config_file: /etc/nginx/nginx.conf
(2)Pod 환경 변수 에 ConfigMap 대상 키 데이터 전달
Pod 자원 이 환경 변 수 를 가 져 올 때 ConfigMap 대상 의 데 이 터 를 참조 할 수 있 습 니 다.구체 적 인 방법 은 env 필드 에서 value From 에 configMapKeyRef 대상 을 삽입 하여 실현 하 는 것 입 니 다.
# configmap , pod configmap
[root@master01 configmap]# cat test-env-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: test-env-configmap
data:
httpd_port: "8080"
---
apiVersion: v1
kind: Pod
metadata:
name: test-envconfigmap-demo
spec:
containers:
- image: busybox
name: busybox-httpd
command: ["/bin/httpd"]
args: ["-f","-p","$(HTTPD_PORT)"]
env:
- name: HTTPD_PORT
valueFrom:
configMapKeyRef:
name: test-env-configmap
key: httpd_port
# pod
[root@master01 configmap]# kubectl apply -f test-env-configmap.yaml
[root@master01 configmap]# kubectl exec test-envconfigmap-demo ps aux
PID USER TIME COMMAND
1 root 0:00 /bin/httpd -f -p 8080
pod 에 configmap 에서 정 의 된 자원 을 전달 할 때 env 필드 에 value From 필드 에 설 치 된 configMapKeyRef 필드 의 각 내장 필드 역할 은 다음 과 같 습 니 다.
name:configmap 대상 의 이름 을 참조 하기 위해
key:ConfigMap 대상 의 키 를 참조 할 이름 을 지정 합 니 다.
optional:현재 Pod 자원 의 이름 을 지정 하 는 데 사 용 됩 니 다.
configmap 는 이름 공간 등급 의 자원 입 니 다.pod 자원 과 같은 이름 공간 에 있어 야 합 니 다.configmap 에 많은 키 데이터 가 존재 할 때 pod 자원 은 용기 에서 envFrom 필드 를 사용 하여 configmap 자원 의 모든 키 값 을 한꺼번에 가 져 오 는 것 을 지원 합 니 다.여러 configmap 에서 키 데 이 터 를 사용 할 때 키 이름 충돌 이 발생 하지 않도록 모든 응용 프로그램 에서 가 져 올 키 는 prefix 필드 에서 특수 한 접 두 사 를 지정 할 수 있 습 니 다.또한 prefix 필드 는 생략 할 수 있 습 니 다.생략 할 때 모든 변수 이름 은 ConfigMap 의 키 와 같 습 니 다.
(3)configmap 메모리 볼 륨
configmap 대상 의 키 값 이 긴 파일 내용 에서 유래 되 었 을 때 그 내용 을 파일 로 직접 적용 하 는 것 이 좋 습 니 다.구현 방식 은 pod 자원 을 정의 할 때 이러한 configmap 대상 을 onfigmap 형식의 저장 볼 륨 으로 설정 한 다음 지정 한 디 렉 터 리 에 마 운 트 하여 접근 하 는 것 입 니 다.
1)전체 메모리 볼 륨 마 운 트
configmap 대상 이 pod 자원 의 저장 볼 륨 과 연 결 될 때 configmap 대상 의 모든 키 는 하나의 파일 로 나타 나 고 키 이름 은 파일 이름 으로 바 뀌 며 키 값 은 파일 내용 으로 바 뀝 니 다.pod 자원 이 이 메모리 볼 륨 을 사용 할 때 메모리 볼 륨 이름과 인용 할 configmap 대상 의 이름 만 가리 키 면 됩 니 다.
# nginx pod , nginx-dir-config configmap
[root@master01 configmap]# cat test-nginx-configmap-vol.yaml
apiVersion: v1
kind: Pod
metadata:
name: configmap-nginx-voldemo
spec:
containers:
- image: nginx:1.12
name: ngin-service
volumeMounts:
- name: ngxconfig
mountPath: /etc/nginx/
readOnly: true
volumes:
- name: ngxconfig
configMap:
name: nginx-dir-config
2)메모리 볼 륨 의 일부 키 값 마 운 트
어떤 때 는 용기 에 configmap 메모리 볼 륨 을 마 운 트 한 후 마 운 트 지점 디 렉 터 리 에서 모든 파일 을 내 보 내 기 를 원 하지 않 을 수도 있 습 니 다.이 때 configMap 필드 에 포 함 된 items 필드 를 사용 하여 이 수 요 를 완성 할 수 있 습 니 다.이 items 필드 에 포 함 된 필드 는 주로 다음 과 같은 세 필드 가 있 습 니 다.
key:필수 필드,적용 할 키 이름
path:마 운 트 지점 디 렉 터 리 에 생 성 된 파일 의 상대 경로 에 대응 하 는 키
mode:파일 권한 모델
# nginx , volumes
volumes:
- name: ngxconfig
configMap:
name: nginx-dir-config
items:
- key: nginx.conf
path: nginx.conf
mode: 0644
- key: fastcgi.conf
path: fastcgi.conf
- key: mime.types
path: mime.types
3)메모리 볼 륨 의 키 값 을 독립 적 으로 마 운 트 합 니 다.
앞에서 모든 파일 을 마 운 트 하 든 일부 파일 을 마 운 트 하 든 마 운 트 지점 디 렉 터 리 에 있 는 모든 파일 이 숨겨 집 니 다.configmap 대상 이 제공 하 는 프로필 을 마 운 트 지점 디 렉 터 리 에 보충 하려 면 이 방식 이 가장 적합 합 니 다.이 방식 은 configmap 필드 를 통 해 이 루어 집 니 다.
# nginx.conf , , pod ,
[root@master01 configmap]# cat test-nginx-configmap-vol03.yaml
apiVersion: v1
kind: Pod
metadata:
name: configmap-nginx-voldemo03
spec:
containers:
- image: nginx:1.12
name: ngin-service
volumeMounts:
- name: ngxconfig
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
readOnly: true
volumes:
- name: ngxconfig
configMap:
name: nginx-dir-config
2.Secret 자원 의 사용
Secret 자원 의 사용 은 configmap 자원 의 사용 방법 과 대체적으로 같 고 secret 자원 은 민감 한 데 이 터 를 저장 하 는 데 사 용 됩 니 다.
(1)secret 자원
Secret 자원 도 키 를 통 해 데 이 터 를 저장 할 수 있 습 니 다.pod 자원 에서 환경 변수 나 저장 볼 륨 을 통 해 데이터 접근 을 하지만 secret 대상 은 이 대상 을 호출 한 pod 자원 이 있 는 작업 노드 에 만 배포 되 고 노드 에서 만 메모리 에 저장 할 수 있 습 니 다.master 노드 에서 secret 대상 은 암호 화 되 지 않 은 형식 으로 etcd 에 저장 합 니 다.
Secret 대상 은 주로 두 가지 용도 로 사용 되 는데 하 나 는 메모리 볼 륨 으로 pod 에 주입 하여 용기 응용 프로그램 에서 사용 하 는 것 이 고,다른 하 나 는 kubelet 이 pod 의 용기 에 미 러 를 끌 어 올 릴 때 개인 창고 에 인증 정 보 를 제공 하 는 것 이다.Secret 자원 은 주로 다음 과 같은 네 가지 유형 으로 구성 된다.
Opaque:사용자 정의 데이터 내용,base 64 인 코딩 으로 암호,비밀 키,인증서 등 데 이 터 를 정의 합 니 다.형식의 식별 자 는 generic 입 니 다.
Kubernetes.io/service-acount-token:service Account 의 인증 정 보 를 만 들 수 있 습 니 다. service account 시 kubernetes 에서 자동 으로 생 성 합 니 다.
Kubernetes.io/dockerconfigjson:docker 미 러 창고 의 인증 정 보 를 저장 하 는 데 사 용 됩 니 다.유형 표시 docker-registry
Kuberbetes.io/tles:SSL 통신 모드 에 인증서 와 비밀 키 파일 을 저장 하 는 데 사 용 됩 니 다.명령 식 생 성 시 형식 입 니 다. tles 로 표 시 됩 니 다.
(2)시 크 릿 자원 만 들 기
1)명령 으로 생 성
명령 을 사용 하여 시 크 릿 자원 을 만 드 는 방법 은 명령 을 사용 하여 configmap 자원 을 만 드 는 방법 과 기본적으로 일치 합 니 다.명령 을 통 해 시 크 릿 대상 을 만 드 는 명령 형식 은 다음 과 같 습 니 다.
Kubectl create secret generic --from-literal=key=value
비밀 대상 을 만 들 면 base 64 인 코딩 형식 으로 암호 화 됩 니 다.
# secret
[root@master01 configmap]# kubectl create secret generic auth --from-literal=username=admin --from-literal=password=dayi123
secret/auth created
# secret ,
[root@master01 configmap]# kubectl get secrets auth -o yaml
apiVersion: v1
data:
password: ZGF5aTEyMw==
username: YWRtaW4=
kind: Secret
metadata:
creationTimestamp: "2019-01-29T09:24:28Z"
name: auth
namespace: default
resourceVersion: "2799717"
selfLink: /api/v1/namespaces/default/secrets/auth
uid: ad5b869d-23a7-11e9-9f5c-000c298d15e0
type: Opaque
명령 을 사용 하여 만 들 때 도"from-file"명령 을 사용 하여 파일 에서 직접 불 러 올 수 있 습 니 다.인증서 파일 을 기반 으로 SSL/TLS 통신 에 사용 할 Secret 대상 을 만 들 려 면'kbectl create secret tles-cert-key='명령 을 사용 하여 만들어 야 합 니 다.
#
[root@master01 volumes]# openssl genrsa -out tls.key 2048
[root@master01 volumes]# openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Shanghai/L=Shanghai/O/dev/CN=www.dayi123.com -days 736
# secret
[root@master01 volumes]# kubectl create secret tls test-ssl --key=tls.key --cert=tls.crt
secret/test-ssl created
2)자원 목록 을 정의 하 는 방식 으로 생 성
자원 목록 을 통 해 secret 자원 대상 을 정의 할 때 표준 apiVersion,kind,metadata 필드 를 정의 하 는 것 외 에 다음 과 같은 필드 를 정의 해 야 합 니 다.
data:"kev:value"형식의 데 이 터 는 일반적으로 민감 한 데이터 이 며,데이터 형식 은 base 64 로 인 코딩 된 수 입 니 다. 사용자 가 미리 인 코딩 해 야 합 니 다.
stringData:명문 형식 으로 정 의 된"key:value"데 이 터 는 Secret 대상 을 만 들 때 자동 으로 인 코딩 됩 니 다. 데이터 필드 에 저장 합 니 다."kubectl apply"명령 으로 만 들 면 설명 정보 에서 이 정 보 를 출력 할 수 있 습 니 다.
type:Secret 데 이 터 를 처리 하 는 데 편리 하도록 제공 하 는 유형 표지
# secret ,password
[root@master01 volumes]# cat test-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: test-secret
data:
password: ZGF5aTEyMwo=
stringData:
username: admin
type: Opaque
3)시 크 릿 사용
Secret 자원 대상 의 사용 방법 은 configmap 자원 의 사용 방법 과 대체적으로 일치 하 며 환경 변수 로 주입 할 수도 있 고 볼 륨 을 저장 하 는 형식 으로 마 운 트 할 수도 있 지만 환경 변수 로 사용 하 는 것 을 권장 하지 않 습 니 다.
pod 에서 secret 를 메모리 볼 륨 으로 마 운 트 할 때 유형 과 표 지 를 Secret 및 secretName 으로 바 꿔 야 하 는 것 을 제외 하고 다른 용법 은 configmap 메모리 볼 륨 의 용법 과 거의 유사 합 니 다.
# nginx pod , nginx-test nginx
[root@master01 volumes]# cat test-nginx-secret-vol.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-nginx-secret
spec:
containers:
- name: secret-nginx
image: nginx:1.12
volumeMounts:
- name: nginxcert
mountPath: /etc/nginx/certs
readOnly: true
volumes:
- name: nginxcert
secret:
secretName: test-ssl
4)imagePullSecret 자원 대상 의 사용
imagePull Secret 자원 은 kubelet 이 인증 이 필요 한 개인 창고 에서 인증 을 완료 하고 미 러 를 가 져 오 는 데 도움 을 줄 수 있 습 니 다.imagePull Secret 를 사용 하 는 방식 은 두 가지 가 있 습 니 다.docker-registry 형식의 Secret 대상 을 만들어 야 합 니 다.하 나 는 pod 자원 을 정의 할 때'imagePull Secret'필드 를 통 해 명확 하 게 제시 해 야 합 니 다.다른 하 나 는 이 를 특정 ServiceAccount 대상 에 추가 하 는 것 이다.
docker-registry 형식의 Secret 대상 을 만 들 때 다음 명령 형식 으로 만 듭 니 다.
kubectl create secret docker-registry --docker-user= --docker-password= --docker-email=
다음 과 같이 아 리 클 라 우 드 인증 docker-registry 를 만 들 고 pod 자원 을 만들어 아 리 클 라 우 드 에 미 러 를 가 져 옵 니 다.
# docker-registry
[root@master01 volumes]# kubectl create secret docker-registry aliyun-registry --docker-username=dayi123 --docker-password=dayi123 [email protected]
# pod , docker-registry
[root@master01 volumes]# cat docker-pull-ali.yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-imagepull-ail
spec:
imagePullSecrets:
- name: aliyun-registry
containers:
- name: test-busybox
image: registry.cn-hangzhou.aliyuncs.com/dayi123/busybox:v1.1