티스토리 뷰
7탄!! 쿠버네티스에 pod 올리자! pod? 뭐에요?
9탄!! 쿠버네티스 오토스케일링(kubernetes autoscaling)
# 부록!! 쿠버네티스 장애 처리5탄부록!! 쿠버네티스 장애 처리
#기타 참고하기
헬름챠트로 올리기[샘플]11) 쿠버네티스 가상스토리지(Ceph) 설치
K8S Namespace 생성
Cluster 란, 물리 또는 가상 머신들이 묶여서 하나의 시스템처럼 동작하는 집합을 의미합니다.
물리 클러스터 안에서 논리적으로 하나의 시스템처럼 동작하는 집합을 Namespace 라고 합니다.
간단하게 테스트 해보기 위해 powershell 에서 진행 해봅니다.
1. dev.yaml 생성
apiVersion: v1
kind: Namespace
metadata:
name: dev
kubectl apply -f dev.yaml
또는........ 아래와 같이...참 쉿죠잉~
kubectl create namespace dev kubectl create namespace stg kubectl create namespace prd |
------------------------------------------------------------------------------------------------------------------------------
3. Namespace 확인
kubectl get namespace
kubectl get namespace
사용자가 쿠버네티스를 사용할때는 명령어를 입력하고 이 명령어를 입력받은 apiserver가 해당 명령어를 수행한다.
기본적인 명령어 형식은 kubectl [COMMAND] [TYPE] {NAME] {FLAGS] 이다.
- COMMAND : create, get, describe 와 같은 operation 종류
- TYPE : pods, nodes 등의 타입 ( https://kubernetes.io/docs/reference/kubectl/overview/#resource-types 참고 )
- NAME : 특정 리소스의 이름 선언
- FLAGS : 추가적인 옵션 선언
******************
네임스페이스에 대한 메모리 및 CPU 쿼터 구성
이 페이지는 네임스페이스에서 실행 중인 모든 컨테이너가 사용할 수 있는 총 메모리 및 CPU 양에 대한 쿼터를 설정하는 방법을 보여준다. 리소스쿼터(ResourceQuota) 오브젝트에 쿼터를 지정한다.
버전 확인을 위해서, 다음 커맨드를 실행 kubectl version.
클러스터의 각 노드에는 최소 1GiB의 메모리가 있어야 한다.
네임스페이스 생성
이 연습에서 생성한 리소스가 클러스터의 나머지와 격리되도록 네임스페이스를 생성한다.
kubectl create namespace quota-mem-cpu-example
kubectl create namespace quota-mem-cpu-example
리소스쿼터 생성
다음은 리소스쿼터 오브젝트의 구성 파일이다.
quota-mem-cpu.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
리소스쿼터를 생성한다.
kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu.yaml --namespace=quota-mem-cpu-example |
리소스쿼터에 대한 자세한 정보를 본다.
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml |
리소스쿼터는 이러한 요구 사항을 quota-mem-cpu-example 네임스페이스에 배치한다.
- 모든 컨테이너에는 메모리 요청량(request), 메모리 상한(limit), CPU 요청량 및 CPU 상한이 있어야 한다.
- 모든 컨테이너에 대한 총 메모리 요청량은 1GiB를 초과하지 않아야 한다.
- 모든 컨테이너에 대한 총 메모리 상한은 2GiB를 초과하지 않아야 한다.
- 모든 컨테이너에 대한 총 CPU 요청량은 1 cpu를 초과해서는 안된다.
- 모든 컨테이너에 대한 총 CPU 상한은 2 cpu를 초과해서는 안된다.
파드 생성
파드의 구성 파일은 다음과 같다.
quota-mem-cpu-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo
spec:
containers:
- name: quota-mem-cpu-demo-ctr
image: nginx
resources:
limits:
memory: "800Mi"
cpu: "800m"
requests:
memory: "600Mi"
cpu: "400m"
파드를 생성한다.
kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu-pod.yaml --namespace=quota-mem-cpu-example |
파드의 컨테이너가 실행 중인지 확인한다.
kubectl get pod quota-mem-cpu-demo --namespace=quota-mem-cpu-example |
다시 한 번, 리소스쿼터에 대한 자세한 정보를 본다.
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml |
출력 결과는 쿼터와 사용된 쿼터를 함께 보여준다. 파드의 메모리와 CPU 요청량 및 상한이 쿼터를 초과하지 않은 것을 볼 수 있다.
status:
hard:
limits.cpu: "2"
limits.memory: 2Gi
requests.cpu: "1"
requests.memory: 1Gi
used:
limits.cpu: 800m
limits.memory: 800Mi
requests.cpu: 400m
requests.memory: 600Mi
두 번째 파드 생성 시도
다음은 두 번째 파드의 구성 파일이다.
quota-mem-cpu-pod-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo-2
spec:
containers:
- name: quota-mem-cpu-demo-2-ctr
image: redis
resources:
limits:
memory: "1Gi"
cpu: "800m"
requests:
memory: "700Mi"
cpu: "400m"
구성 파일에서, 파드의 메모리 요청량이 700MiB임을 알 수 있다. 사용된 메모리 요청량과 이 새 메모리 요청량의 합계가 메모리 요청량 쿼터를 초과한다. 600MiB + 700MiB > 1GiB
파드 생성을 시도한다.
kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu-pod-2.yaml --namespace=quota-mem-cpu-example |
두 번째 파드는 생성되지 않는다. 출력 결과는 두 번째 파드를 생성하면 메모리 요청량의 총 합계가 메모리 요청량 쿼터를 초과함을 보여준다.
Error from server (Forbidden): error when creating "examples/admin/resource/quota-mem-cpu-pod-2.yaml": pods "quota-mem-cpu-demo-2" is forbidden: exceeded quota: mem-cpu-demo, requested: requests.memory=700Mi,used: requests.memory=600Mi, limited: requests.memory=1Gi |
토론
이 연습에서 보았듯이, 리소스쿼터를 사용하여 네임스페이스에서 실행 중인 모든 컨테이너에 대한 메모리 요청량의 총 합계를 제한할 수 있다. 메모리 상한, CPU 요청량 및 CPU 상한의 총 합계를 제한할 수도 있다.
모든 컨테이너에 대한 합계 대신 개별 컨테이너를 제한하려면, 리밋레인지(LimitRange)를 사용한다.
정리
네임스페이스를 삭제한다.
kubectl delete namespace quota-mem-cpu-example |
***************
내가 생성한. 파드
아 귀찮아 나중에 정리 하자 ㅠㅠ
Examples:
# List all pods in ps output format.
kubectl get pods
# List all pods in ps output format with more information (such as node name).
kubectl get pods -o wide
# List a single replication controller with specified NAME in ps output format.
kubectl get replicationcontroller web
# List deployments in JSON output format, in the "v1" version of the "apps" API group:
kubectl get deployments.v1.apps -o json
# List a single pod in JSON output format.
kubectl get -o json pod web-pod-13je7
# List a pod identified by type and name specified in "pod.yaml" in JSON output format.
kubectl get -f pod.yaml -o json
# List resources from a directory with kustomization.yaml - e.g. dir/kustomization.yaml.
kubectl get -k dir/
# Return only the phase value of the specified pod.
kubectl get -o template pod/web-pod-13je7 --template={{.status.phase}}
# List resource information in custom columns.
kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image
# List all replication controllers and services together in ps output format.
kubectl get rc,services
# List one or more resources by their type and names.
kubectl get rc/web service/frontend pods/web-pod-13je7
Options:
-A, --all-namespaces=false: If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.
--allow-missing-template-keys=true: If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
--chunk-size=500: Return large lists in chunks rather than all at once. Pass 0 to disable. This flag is beta and may change in the future.
--field-selector='': Selector (field query) to filter on, supports '=', '==', and '!='.(e.g. --field-selector key1=value1,key2=value2). The server only supports a limited number of field queries per type.
-f, --filename=[]: Filename, directory, or URL to files identifying the resource to get from a server.
--ignore-not-found=false: If the requested object does not exist the command will return exit code 0.
-k, --kustomize='': Process the kustomization directory. This flag can't be used together with -f or -R.
-L, --label-columns=[]: Accepts a comma separated list of labels that are going to be presented as columns. Names are case-sensitive. You can also use multiple flag options like -L label1 -L label2...
--no-headers=false: When using the default or custom-column output format, don't print headers (default print headers).
-o, --output='': Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].
--output-watch-events=false: Output watch event objects when --watch or --watch-only is used. Existing objects are output as initial ADDED events.
--raw='': Raw URI to request from the server. Uses the transport specified by the kubeconfig file.
-R, --recursive=false: Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests organized within the same directory.
-l, --selector='': Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
--server-print=true: If true, have the server return the appropriate table output. Supports extension APIs and CRDs.
--show-kind=false: If present, list the resource type for the requested object(s).
--show-labels=false: When printing, show all labels as the last column (default hide labels column)
--sort-by='': If non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. '{.metadata.name}'). The field in the API resource specified by this JSONPath expression must be an integer or a string.
--template='': Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
-w, --watch=false: After listing/getting the requested object, watch for changes. Uninitialized objects are excluded if no object name is provided.
--watch-only=false: Watch for changes to the requested object(s), without listing/getting first.
Usage:
kubectl get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options]
Use "kubectl options" for a list of global command-line options (applies to all commands).
PS C:\Users\root> kubectl get pods -o wide --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
docker compose-78f95d4f8c-pxcxp 1/1 Running 0 3h 10.1.0.6 docker-desktop <none> <none>
docker compose-api-6ffb89dc58-fn55k 1/1 Running 0 3h 192.168.65.3 docker-desktop <none> <none>
kube-system coredns-5644d7b6d9-4kx6g 1/1 Running 0 3h1m 10.1.0.2 docker-desktop <none> <none>
kube-system coredns-5644d7b6d9-hww77 1/1 Running 0 3h1m 10.1.0.3 docker-desktop <none> <none>
kube-system etcd-docker-desktop 1/1 Running 0 3h 192.168.65.3 docker-desktop <none> <none>
kube-system kube-apiserver-docker-desktop 1/1 Running 0 3h 192.168.65.3 docker-desktop <none> <none>
kube-system kube-controller-manager-docker-desktop 1/1 Running 0 3h 192.168.65.3 docker-desktop <none> <none>
kube-system kube-proxy-qfx2w 1/1 Running 0 3h1m 192.168.65.3 docker-desktop <none> <none>
kube-system kube-scheduler-docker-desktop 1/1 Running 0 3h 192.168.65.3 docker-desktop <none> <none>
kube-system storage-provisioner 1/1 Running 0 3h 10.1.0.4 docker-desktop <none> <none>
kube-system vpnkit-controller 1/1 Running 0 3h 10.1.0.5 docker-desktop <none> <none>
kubernetes-dashboard dashboard-metrics-scraper-c79c65bb7-z5qlx 1/1 Running 0 40m 10.1.0.9 docker-desktop <none> <none>
kubernetes-dashboard kubernetes-dashboard-55fd8c78bd-227fh 1/1 Running 0 40m 10.1.0.10 docker-desktop <none> <none>
quota-mem-cpu-example quota-mem-cpu-demo 1/1 Running 0 12m 10.1.0.11 docker-desktop <none> <none>
PS C:\Users\root> kubectl get pods --field-selector=spec.nodeName=prd
No resources found in default namespace.
PS C:\Users\root> kubectl get pods --field-selector=spec.nodeName=prd kubectl describe pods^C
PS C:\Users\root> kubectl describe pods
PS C:\Users\root> kubectl logs
error: expected 'logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]'.
POD or TYPE/NAME is a required argument for the logs command
See 'kubectl logs -h' for help and examples
PS C:\Users\root> kubectl.exe get pod
No resources found in default namespace.
PS C:\Users\root> kubectl.exe get pod --namespace=prd
No resources found in prd namespace.
PS C:\Users\root> kubectl.exe get pods --namespace=prd
No resources found in prd namespace.
PS C:\Users\root>
PS C:\Users\root> kubectl get namespace
NAME STATUS AGE
default Active 3h6m
dev Active 28m
docker Active 3h4m
kube-node-lease Active 3h6m
kube-public Active 3h6m
kube-system Active 3h6m
kubernetes-dashboard Active 44m
metallb-system Active 174m
prd Active 26m
quota-mem-cpu-example Active 19m
stg Active 27m
PS C:\Users\root> notepad.exe podsample.yaml
PS C:\Users\root> kubectl apply -f podsample.yaml -n prd.3
error: error parsing podsample.yaml: error converting YAML to JSON: yaml: mapping values are not allowed in this context
PS C:\Users\root> ^C
PS C:\Users\root>
PS C:\Users\root> kubectl apply -f podsample.yaml -n prd3
error: error parsing podsample.yaml: error converting YAML to JSON: yaml: mapping values are not allowed in this context
PS C:\Users\root> .^C
PS C:\Users\root> kubectl apply -f podsample.yaml -n prd
error: error parsing podsample.yaml: error converting YAML to JSON: yaml: mapping values are not allowed in this context
PS C:\Users\root> notepad.exe podsample.yaml
PS C:\Users\root> kubectl apply -f podsample.yaml -n prd
error: error parsing podsample.yaml: error converting YAML to JSON: yaml: line 10: mapping values are not allowed in this context
PS C:\Users\root> kubectl apply -f podsample.yaml -n prd
pod/springboot-web created
PS C:\Users\root> kubectl get namespace
NAME STATUS AGE
default Active 3h15m
dev Active 38m
docker Active 3h14m
kube-node-lease Active 3h15m
kube-public Active 3h15m
kube-system Active 3h15m
kubernetes-dashboard Active 54m
metallb-system Active 3h4m
prd Active 36m
quota-mem-cpu-example Active 29m
stg Active 37m
PS C:\Users\root> kubectl get pod
No resources found in default namespace.
PS C:\Users\root> kubectl get pod -n prd
NAME READY STATUS RESTARTS AGE
springboot-web 1/1 Running 0 51s
PS C:\Users\root> kubectl get pod -n kube-sample
No resources found in kube-sample namespace.
PS C:\Users\root>
PS C:\Users\root> kubectl get pod -n prd
NAME READY STATUS RESTARTS AGE
springboot-web 1/1 Running 0 103s
PS C:\Users\root> kubectl get pod -n prd
NAME READY STATUS RESTARTS AGE
springboot-web 1/1 Running 0 2m28s
PS C:\Users\root> notepad.exe Dockerfile
PS C:\Users\root> docker build -t 1223yys/springboot-web:0.1.6
"docker build" requires exactly 1 argument.
See 'docker build --help'.
Usage: docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile
PS C:\Users\root>
PS C:\Users\root> 출처: https://coding-start.tistory.com/308 [코딩스타트]ku^C
PS C:\Users\root> .\kube-state-metrics\^C
PS C:\Users\root> kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
docker-desktop Ready master 3h20m v1.16.6-beta.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=docker-desktop,kubernetes.io/os=linux,node-role.kubernetes.io/master=
PS C:\Users\root> kubectl get pods -o wide
No resources found in default namespace.
PS C:\Users\root> kubectl get pods -o wide
No resources found in default namespace.
PS C:\Users\root> kubectl get pods -o wide -n=all
No resources found in all namespace.
PS C:\Users\root> kubectl logs
error: expected 'logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]'.
POD or TYPE/NAME is a required argument for the logs command
See 'kubectl logs -h' for help and examples
PS C:\Users\root>
PS C:\Users\root>
PS C:\Users\root> kubectl.exe logs
error: expected 'logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]'.
POD or TYPE/NAME is a required argument for the logs command
See 'kubectl logs -h' for help and examples
PS C:\Users\root> kubectl exec -it /bin/bash
error: you must specify at least one command for the container
PS C:\Users\root> kubectl get pod -n prd
NAME READY STATUS RESTARTS AGE
springboot-web 1/1 Running 0 7m22s
PS C:\Users\root> kubectl exec -it springboot-web /bin/bash
Error from server (NotFound): pods "springboot-web" not found
PS C:\Users\root> kubectl exec -it springboot-web -n prd /bin/bash
root@springboot-web:/#
root@springboot-web:/# ps
PID TTY TIME CMD
31 pts/0 00:00:00 bash
37 pts/0 00:00:00 ps
root@springboot-web:/# ls
app bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@springboot-web:/# ls 0-al
ls: cannot access '0-al': No such file or directory
root@springboot-web:/# ls -al
total 76
drwxr-xr-x 1 root root 4096 Jul 9 15:52 .
drwxr-xr-x 1 root root 4096 Jul 9 15:52 ..
-rwxr-xr-x 1 root root 0 Jul 9 15:52 .dockerenv
drwxr-xr-x 1 root root 4096 Nov 19 2019 app
drwxr-xr-x 1 root root 4096 Oct 17 2019 bin
drwxr-xr-x 2 root root 4096 Sep 8 2019 boot
drwxr-xr-x 5 root root 360 Jul 9 15:52 dev
drwxr-xr-x 1 root root 4096 Jul 9 15:52 etc
drwxr-xr-x 2 root root 4096 Sep 8 2019 home
drwxr-xr-x 1 root root 4096 Oct 14 2019 lib
drwxr-xr-x 2 root root 4096 Oct 14 2019 lib64
drwxr-xr-x 2 root root 4096 Oct 14 2019 media
drwxr-xr-x 2 root root 4096 Oct 14 2019 mnt
drwxr-xr-x 2 root root 4096 Oct 14 2019 opt
dr-xr-xr-x 196 root root 0 Jul 9 15:52 proc
drwx------ 1 root root 4096 Oct 18 2019 root
drwxr-xr-x 1 root root 4096 Jul 9 15:52 run
drwxr-xr-x 1 root root 4096 Oct 17 2019 sbin
drwxr-xr-x 2 root root 4096 Oct 14 2019 srv
dr-xr-xr-x 12 root root 0 Jul 9 15:52 sys
drwxrwxrwt 5 root root 4096 Jul 9 15:52 tmp
drwxr-xr-x 1 root root 4096 Oct 14 2019 usr
drwxr-xr-x 1 root root 4096 Oct 14 2019 var
root@springboot-web:/#
deployments.v1.appsdeployments.v1.apps |
'3. 쿠버네티스의 모든것' 카테고리의 다른 글
8탄!! K8S 대시보드 설치 (0) | 2020.06.25 |
---|---|
elasticsearch.yaml 테스트중 (0) | 2020.06.25 |
1) 마이크로 쿠버네티스 설치 해보기 (0) | 2020.04.16 |
11탄!! 쿠버네티스 용어 정리 (0) | 2020.04.07 |
nosql VS NEW sql 차이 (0) | 2020.04.06 |
- Total
- Today
- Yesterday
- 코로나19
- ubuntu
- 쿠버네티스
- 커널
- startup 에러
- CVE 취약점 점검
- 트리이스
- directory copy 후 startup 에러
- 오라클
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- 테라폼
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- 우분투
- 5.4.0.1072
- K8s
- [오라클 튜닝] instance 튜닝2
- 스토리지 클레스
- 설치하기(HP-UX)
- 앤시블
- MSA
- (InstantClient) 설치하기(HP-UX)
- [오라클 튜닝] sql 튜닝
- 여러서버 컨트롤
- pod 상태
- 튜닝
- 오라클 홈디렉토리 copy 후 startup 에러
- Oracle
- 키알리
- 버쳐박스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |