configapp-c ~~~ pod로 접속하여 환경변수 설정 내용 확인 해보기configmap]# kubectl exec -it configapp-c9bb7b748-zdqn7 -- bash를 통해 pod에 접속env 명령어를 통해 pod 내의 환경설정 내역 확인 가능
# vi configmap-wordpress.yaml apiVersion: v1 kind: ConfigMap metadata: name: config-wordpress namespace: default data: MYSQL_ROOT_HOST: '%' => 누구나 접근할 수 있도록 % 사용 MYSQL_ROOT_PASSWORD: kosa0401 MYSQL_DATABASE: wordpress MYSQL_USER: wpuser MYSQL_PASSWORD: wppass
=> MYSQL_~~~는 도커이미지에서 사용된 변수명을 그대로 사용해야 함
# vi mysql-pod-svc.yaml apiVersion: v1 kind: Pod metadata: name: mysql-pod labels: app: mysql-pod spec: containers: - name: mysql-container image: mysql:5.7 envFrom: => ' MYSQL_ROOT_PASSWORD: kosa0401 MYSQL_DATABASE: wordpress MYSQL_USER: wpuser MYSQL_PASSWORD: wppass ' => 위와 같은 환경 변수 내용을 그대로 가져오는 환경변수 필드 - configMapRef: name: config-wordpress ports: - containerPort: 3306 --- apiVersion: v1 kind: Service metadata: name: mysql-svc spec: type: ClusterIP selector: app: mysql-pod ports: - protocol: TCP port: 3306 targetPort: 3306
# vi wordpress-pod-svc.yaml apiVersion: v1 kind: Pod metadata: name: wordpress-pod labels: app: wordpress-pod spec: containers: - name: wordpress-container image: wordpress env: => env 다음에 나오는 name은 변수명 - name: WORDPRESS_DB_HOST value: mysql-svc:3306 => - name: WORDPRESS_DB_HOST=mysql-svc:3306와 같은 의미 - name: WORDPRESS_DB_USER valueFrom: configMapKeyRef: name: config-wordpress key: MYSQL_USER - name: WORDPRESS_DB_PASSWORD valueFrom: configMapKeyRef: name: config-wordpress key: MYSQL_PASSWORD => configmap에서 MYSQL_PASSWORD라는 이름의 키를 찾아서 해당 키의 값을 WORDPRESS_DB_PASSWORD로 사용할 것이라는 의미 - name: WORDPRESS_DB_NAME valueFrom: configMapKeyRef: name: config-wordpress key: MYSQL_DATABASE ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: wordpress-svc spec: type: LoadBalancer externalIPs: - 192.168.2.0 selector: app: wordpress-pod ports: - protocol: TCP port: 80 targetPort: 80
쿠버네티스의 클러스터 하나를 여러 개의 논리적 단위로 나눠 사용하는 것(워크스페이스의 역할)
네임스페이스 생성 후 해당 네임스페이스를 default로 지정할 수 있음
네임스페이스 개념도
--- namespace
kubectl get namespaces => 현재 존재하는 네임스페이스 확인 kubectl config get-contexts kubernetes-admin@kubernetes NAMESPACE가 비어 있음 kubectl config set-context kubernetes-admin@kubernetes --namespace=kube-system kubectl config get-contexts kubernetes-admin@kubernetes kubectl config set-context kubernetes-admin@kubernetes --namespace=default kubectl create namespace test-namespace => test-namespace라는 이름의 namespace를 생성 kubectl get namespace kubectl set-context kubernetes-admin@kubernetes --namespace=test-namespace => 직접 만든 namespace를 default namespace로 설정하는 명령어 kubectl config set-context kubernetes-admin@kubernetes --namespace=default
특정 namespace 확인kubectl run nginx-pod1 --image=nginx -n test-namespace 로 test-namespace에 nginx 이미지 생성default namespace를 test-namespace로 변경default가 test-namespace로 변경된 것 확인아무 서비스(여기서는 로드밸런서) 생성하고 namespace 확인하기namespace를 따로 지정하지 않아도 test-namespace로 들어간 것 확인
--- ResourceQuota
# vi sample-resourcequota.yaml apiVersion: v1 kind: ResourceQuota metadata: name: sample-resourcequota namespace: default => 기입된 네임스페이스는 ResourceQuota에 따라 리소스 사용량에 제한을 받게 됨 spec: hard: count/pods: 5 => pod가 5개를 초과할 수 없도록 지정
# kubectl apply -f sample-resourcequota.yaml my-ns 네임스페이스에 apply된 리소스쿼터 확인 # kubectl describe resourcequotas sample-resourcequota # kubectl run pod new-nginx --image=nginx pod가 다섯 개를 초과하려고 하면 애러 발생
새로운 파드를 생성하려고 했지만, request, limits 용량을 별도로 지정하지 않으면 생성되지 않음..
따라서 이 부분을 넣어주고 apply해야 함
--- LimitRange
vi sample-limitrange-container.yaml apiVersion: v1 kind: LimitRange metadata: name: sample-limitrange-container namespace: => namespace를 입력하지 않으면 현재 default로 설정되어 있는 my-ns로 자동 지정됨 spec: limits: - type: Container default: => 여기서의 default는 limit을 의미 memory: 512Mi cpu: 500m defaultRequest: => 직접 정하지 않은 경우 최소 용량, 최소 확보 용량 memory: 256Mi cpu: 250m max: => max와 min은 사용자가 정해줘야 하는 용량, max가 limit(상한선) memory: 1024Mi cpu: 1000m min: => min이 하한선 requests를 의미 memory: 128Mi cpu: 125m maxLimitRequestRatio: => Requests와 Limit의 차이 허용 비율이 2배, 오버 커밋을 피할 수 있음 => 위의 default와 defaultRequest 필드의 차이 의미 memory: 2 cpu: 2
# vi sample-pod.yaml apiVersion: v1 kind: Pod metadata: name: sample-pod-limitrange spec: containers: - name: nginx-container image: nginx:1.16