다음은 쿠버네티스 스터디 자료를 참고해 정리한 내용입니다.
<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
<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
감사합니다.