k8s 노트 6(kubernetes 용기 설정)

13257 단어 docker&k8s
1.ConfigMap 설정 관리 프로그램 사용
       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

좋은 웹페이지 즐겨찾기