brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jul 19. 2021

쿠버1탄-26. 쿠버네티스 - 클러스터 관리1

다음은 쿠버네티스 스터디 자료를 참고해  정리한 내용입니다.


<1> 테스트 환경 -도메인 없이 kops로 aws쿠버설치

<2> 관리 대상 - CPU, 메모리,네임스페이스,Pod

<3> 메트릭 수집해보자

<4> 네임스페이스 ns 생성

<5> 동일한 ns1에  동일한 pod1 생성하면?   있다고 나옴

<6>  ns1 파드pod1 Shell 실행으로 확인

<7> 삭제 

<8> 다음 과정



<1>  테스트 환경 -도메인 없이 kops로 aws쿠버설치


1

https://brunch.co.kr/@topasvga/1681


2

키를 복사해서 접속하자

master node의 api 서버에서 실행하기 위함


ssh -i ~/.ssh/id_rsa ubuntu@api.seo55.cndk.k8s

Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1047-aws x86_64)


3

별도 터미널에서 모니터링

watch -d 'kubectl get ns,no,po,svc,deploy,rs,ing,ep -o wide'



<2> 관리 대상 - CPU, 메모리,네임스페이스,Pod


1

https://youtu.be/lvVUQHO-NHY



<3> 메트릭 수집해보자


1

오토스케일링을 위해서는 서버 정보확인을 위한 메트릭 서버가 필요하다.


2

구성

우선 metrics-server 부터 생성해보자


3

메트릭 서버 생성



4

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.0/components.yaml -O metric-server.yaml


5

http도 접근 가능하도록 변경

sed -i'' -r -e "/- --secure-port=443/a\        - --kubelet-insecure-tls" metric-server.yaml


생성

kubectl apply -f metric-server.yaml

serviceaccount/metrics-server created

clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created

clusterrole.rbac.authorization.k8s.io/system:metrics-server created

rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created

clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created

clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created

service/metrics-server created

deployment.apps/metrics-server created

apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created


6

name space의 kube-system에 있는것중 metrics-server 확인

kubectl get all -n kube-system -l k8s-app=metrics-server


NAME                                 READY   STATUS    RESTARTS   AGE

pod/metrics-server-c5f5f4c85-zgrgq   0/1     Running   0          8s


NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE

service/metrics-server   ClusterIP   100.65.219.78   <none>        443/TCP   8s


NAME                             READY   UP-TO-DATE   AVAILABLE   AGE

deployment.apps/metrics-server   0/1     1            0           8s


NAME                                       DESIRED   CURRENT   READY   AGE

replicaset.apps/metrics-server-c5f5f4c85   1         1         0       8s


7

name space의 kube-system에 있는것 전체 확인

kubectl get all -n kube-system



8

pod만 확인

kubectl get pod -n kube-system -l k8s-app=metrics-server


NAME                             READY   STATUS    RESTARTS   AGE

metrics-server-c5f5f4c85-zgrgq   0/1     Running   0          15s


9

서비스 확인

kubectl get svc -n kube-system -l k8s-app=metrics-server


NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE

metrics-server   ClusterIP   100.65.219.78   <none>        443/TCP   19s


10

kubectl get apiservices |egrep '(AVAILABLE|metrics)'


NAME                                   SERVICE                      AVAILABLE   AGE

v1beta1.metrics.k8s.io                 kube-system/metrics-server   True        4m56s


11

kubectl top node


NAME                                               CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%

ip-172-20-39-212.ap-southeast-1.compute.internal   59m          2%     1079Mi          28%

ip-172-20-40-2.ap-southeast-1.compute.internal     319m         15%    1438Mi          38%

ip-172-20-58-149.ap-southeast-1.compute.internal   69m          3%     1094Mi          28%



<4>  네임스페이스 ns 생성


네임스페이스간 접근, 서비스들간의 접근 등 확인해 보도록 실습하자.


1

cat << EOF >  ns1.yaml

apiVersion: v1

kind: Namespace

metadata:

  name: ns1

EOF


2

cat << EOF >  ns2.yaml

apiVersion: v1

kind: Namespace

metadata:

  name: ns2

EOF


3

2개 yaml 파일 실행 같이 시키기


kubectl apply -f ns1.yaml,ns2.yaml

namespace/ns1 created

namespace/ns2 created


3

kubectl get namespaces ns1 ns2

NAME   STATUS   AGE

ns1    Active   17s

ns2    Active   17s


kubectl get ns ns1 ns2


4

watch -d 'kubectl get all -n ns1 -owide; echo; kubectl get all -n ns2 -owide'


5

pod와 서비스 같이 생성

curl -s -O https://raw.githubusercontent.com/gasida/DKOS/main/7/ns1-svc-pod.yaml

curl -s -O https://raw.githubusercontent.com/gasida/DKOS/main/7/ns2-svc-pod.yaml



kubectl apply -f ns1-svc-pod.yaml

kubectl apply -f ns2-svc-pod.yaml


6

클러스터와 포트를 통해 질의해보자


ns1 pod

curl 100.65.130.128:9001

Hostname: pod2

IP: 127.0.0.1

IP: ::1

IP: 100.111.183.36

IP: fe80::fc11:f1ff:fe70:73f1

RemoteAddr: 100.124.116.128:64860

GET / HTTP/1.1

Host: 100.65.130.128:9001

User-Agent: curl/7.68.0

Accept: */*


ns2 pod)]

curl  100.64.225.170:9002

Hello Kubernetes bootcamp! | Running on: pod1 | v=1





<5> 동일한 ns1에  동일한 pod1 생성하면?   있다고 나옴


kubectl run pod1 --image nginx -n ns1

Error from server (AlreadyExists): pods "pod1" already exists



<6>  ns1 파드pod1 Shell 실행으로 확인


1

kubectl get all -n ns1 -owide; echo; kubectl get all -n ns2 -owide                                                        


ns1  

NAME       READY   STATUS    RESTARTS   AGE   IP    NODE    NOMINATED NODE   READINESS GATES

pod/pod1   1/1     Running   0          71m   100.108.82.244   ip-172-20-43-172.ap-northeast-1.compute.internal   <none>           <none>

pod/pod2   1/1     Running   0          71m   100.111.183.36   ip-172-20-46-12.ap-northeast-1.compute.internal    <none>           <none>


NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE   SELECTOR

service/svc-web   ClusterIP   100.65.130.128   <none>        9001/TCP   71m   app=webpod


ns2

pod/pod1   1/1     Running   0          69m   100.108.82.245   ip-172-20-43-172.ap-northeast-1.compute.internal   <none>           <none>

pod/pod2   1/1     Running   0          69m   100.111.183.35   ip-172-20-46-12.ap-northeast-1.compute.internal    <none>           <none>


NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE   SELECTOR

service/svc-web2   ClusterIP   100.64.225.170   <none>        9002/TCP   69m   app=webpod2


2

ns1 파드pod1 Shell 실행

kubectl exec -it pod1 -n ns1 -- bash


# curl 아래 접속 시 되고, 안되고 차이는 왜 때문이죠?


3

curl svc-web2:9002  

x

ns1 pod에서 ns2 pod 통신 안됨.


4

curl svc-web2.ns2:9002

o

Hello Kubernetes bootcamp! | Running on: pod2 | v=1

ns1 pod에서 ns2 pod 통신이 됨.  네임스페이스 ns2 추가시 가능해짐


5

curl svc-web2.ns2.svc.cluster.local:9002

o

Hello Kubernetes bootcamp! | Running on: pod1 | v=1


6

이유?

CoreDNS 는 서비스에 대해서 A 레코드(FQDN) 생성되어 가능해진것이다.

<service-name>.<namespace-name>.svc.cluster.local


7

pod 메트릭 수집으로 사양 확인


kubectl top pod

NAME                    CPU(cores)   MEMORY(bytes)

dp-v1-cdd8dc687-7pnrh   1m           2Mi

dp-v1-cdd8dc687-t6kpv   1m           2Mi

dp-v1-cdd8dc687-x9vrs   1m           2Mi

dp-v2-785f69bd6-6xnfs   1m           2Mi

dp-v2-785f69bd6-8z2qg   1m           2Mi

dp-v2-785f69bd6-fmq4c   1m           2Mi



kubectl top pod -n ns1 --use-protocol-buffers=true



<7> 삭제 


kubectl delete ns ns1 ns2



<8> 다음 과정


https://brunch.co.kr/@topasvga/1725



https://brunch.co.kr/@topasvga/1656


감사합니다.



        


        

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari