- stateless 한 서비스 : 실제 pod가 배포된 시스템에 정보를 저장해서 사용하지 않는 웹 (예:web)

 

kubectl scale --replicas=3 rs/foo

  • rs의 name이 foo를 3개로 증가

kubectl scale --replicas=3 -f foo.yaml

  • foo.yaml 명세서를 이용하여 3개를 생성

kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

  • 현재 2개이면 3개로 증가

--replicas=0 를 하면 3개 모두 종료된다.
- 서비스를 일시적으로 종료하고 싶을때 사용한다

'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글

pod 삭제  (0) 2020.12.01
pod 에 내부 명령 실행과 connect  (0) 2020.12.01
Service  (0) 2020.12.01
Object Template (--dry run 사용하기)  (0) 2020.12.01
Deployment  (0) 2020.12.01
  • 외부에서 내부 Pod로의 연결 가능 (targetPort)
  • Pod의 Label과 Service의 Selector 맵핑으로 연결
  • 내부 DNS 에 자동 등록

  • Pod는 2.x.x.x 대역
  • Service는 1.x.x.x.x 의 고정아이피
  • Client -> Service -> [Load Balancer(L4 스위치 기능수행)] -> pod
  • 하위 객체에 Lable을 달아서 상위객체(service)에서 Selector로 연결
  • DNS 또한 Pod 형태로 띄워져 있음
  • Service 객체를 만들면 DNS쪽에 객체가 생성

service의 yaml 명세서 확인

apiVersion: v1 
kind: Service 
metadata: 
name: test-svc 
spec: 
ports: 
-port: 80 (서비스 포트 80) 
targetPort: 8080 (pod 안에 expose가 8080 포트 : Service 객체는 80으로 요청오면 8080으로 전달해 줌) 
selector: 
run:test

Endpoint Controller

  • 서비스 객체를 만들면 LB 기능을 한다.
  • 그러려면 pod 안에 컨테이너 포트/타겟 포트의 조합을 알아야 한다.
  • 즉 엔드포인트 라는 하위 리소스가 자동으로 만들어 짐

Service Types

- 4가지의 서비스타입이 존재
1.ClusterIP

  • 사설IP 내부통신만 가능
  • 하나의 노드에 부하될 수 있는 문제점이 있음 

2.NodePort

  • ClusterIP + HostPort  서비스 객체를 생성하면 내부적인 iptables 룰셋, DNS 룰셋 등등 [내부 - 외부]간 통신 가능하도록 설정. 누가? Kube-proxy가 한다.
  • 외부에서 내부 pod를 접근하려면 HostPort가 필요
  • 1,2는 온프레미스 환경에서 k8s 구축시 사용
  • 서비스의 iptables를 바탕으로 End Point 를 갖고 노드에 분산시킴
  • 인바운드 리퀘스트를 분산시킴 

3.LoadBalancer

  • NodePort + LB 연동 추가
  • 클라우드 환경에서 k8s 구축시 사용 

4.ExternalName

  • CNAME 레코드
  • 1, 2, 3은 외부 -> 내부pod 접근하기 위한 방법
  • 4은 내부pod -> 외부 서비스를 접근하기 위한 방법

서비스 객체 생성하기

- kubectl expose deployment nginx --port=80 --target-port=8000 : deployment 의 service 객체 생성 

1) --port=80 : 서비스 객체 포트 명시
2) --target-port=8000 : pod안의 Container 포트 명시

 

- 1번째로 ClustIP 타입의 svc 생성 후 확인

root@ip-172-31-4-27:~# kubectl get svc 
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE 
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   5h2m 
root@ip-172-31-4-27:~# kubectl get ep 
NAME         ENDPOINTS          AGE 
kubernetes   172.31.4.27:6443   5h3m 

1) pod IP : 172.31.4.27
2) api-server port :  6443

 

- 2번째로 NodePort 타입으로 Service 실행

root@ip-172-31-4-27:~# kubectl expose deployment hwk --port 80 --name web-hwk --type NodePort 
service/web-hwk exposed 
root@ip-172-31-4-27:~# kubectl get svc 
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE 
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        5h16m 
web-hwk      NodePort    10.107.229.55   <none>        80:32472/TCP   4s 해당 IP:PORT로 로 접근한다는 것은 SVC로 접근 한다는 뜻 
root@ip-172-31-4-27:~# kubectl get ep 
NAME         ENDPOINTS          AGE 
kubernetes   172.31.4.27:6443   5h16m 
web-hwk      192.168.82.6:80    13s 해당 IP:PORT로 접근하는것은 pod로 직접 접근한다는 뜻 
root@ip-172-31-4-27:~# kubectl get po hwk-66fdbfb65d-smrz5 -o wide 
NAME                   READY   STATUS    RESTARTS   AGE    IP             NODE               NOMINATED NODE   READINESS GATES 
hwk-66fdbfb65d-smrz5   1/1     Running   0          103m   192.168.82.6   ip-172-31-13-180   <none>           <none> 

- 실제 AWS EC2 public IP : 32472 로 접근이 가능하다.
- 순서 : 
1) 10.107.229.55:32472 요청
2) SVC는 -> 192.168.82.6:80 의 pod로 접근

'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글

pod 에 내부 명령 실행과 connect  (0) 2020.12.01
pod 확장 (scale out)  (0) 2020.12.01
Object Template (--dry run 사용하기)  (0) 2020.12.01
Deployment  (0) 2020.12.01
ReplicaSet  (0) 2020.12.01

실행은 안되고 -> yaml 명세서만 얻기위해서 --dry-run을 사용

디플로이먼트 특징 -> 리플리카셋 생성 -> 파드생성 -> 컨테이너 생성 (nginx 도커 이미지를 활용하여 nginx 실행)

 

'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글

pod 확장 (scale out)  (0) 2020.12.01
Service  (0) 2020.12.01
Deployment  (0) 2020.12.01
ReplicaSet  (0) 2020.12.01
Kubectl를 이용한 기본 제어  (0) 2020.12.01

deployment create

  • deployment 는 rs를 사용하여 pod를 생성
  • pod 안에 컨테이너를 갖고 있음
  • DESIRED : 1 -> 1개를 띄워야 한다
  • CURRENT : 1 -> 현재 1개 띄워져 있다

각 컨트롤러 간 상하위 구조

deployment (최상위 컨트롤러)
  ㄴreplicaSet (하위 컨트롤러)
    ㄴpod
       ㄴcontatiner

- 상위 컨트롤러 -> 하위컨트롤러는 matchLabels를 갖고 연결
- template :

  • 복제하기 위한 정보
  • RS에서는 DESIRED에 맞게 복제를 수행
  • 이때 template 정보를 갖고 수행
  • 그안에 containers 정보도 있음

pod의 lable 값을 확인 명령어

root@ip-172-31-4-27:~# kubectl get po nginx-6799fc88d8-v9m2z --show-labels  
NAME                     READY   STATUS    RESTARTS   AGE     LABELS 
nginx-6799fc88d8-v9m2z   1/1     Running   0          7m46s   app=nginx,pod-template-hash=6799fc88d8 

-o wide 옵션 주면 selector 정보 확인

root@ip-172-31-4-27:~# kubectl get rs nginx-6799fc88d8 -o wide 
NAME               DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES   SELECTOR 
nginx-6799fc88d8   1         1         1       8m25s   nginx        nginx    app=nginx,pod-template-hash=6799fc88d8 
  • RS에서 pod를 컨텍하기 위해서 SELECTOR -> LABELS가 매치되어 있는것을 확인 할 수 있다.
  • 두 값이 일치하는것은 매우 중요한 내용이다.

상위객체와 하위객체간에 LABLES와 SELECTOR를 통해 연결되어 있는 것을 확인

'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글

Service  (0) 2020.12.01
Object Template (--dry run 사용하기)  (0) 2020.12.01
ReplicaSet  (0) 2020.12.01
Kubectl를 이용한 기본 제어  (0) 2020.12.01
k8s 구성요소와 Deployment Controller  (0) 2020.12.01
  • Pod 유지 관리하는 컨트롤러
  • 정해진 수만큼 Pod 실행되도록 제어
  • Node 장애시 다른 Node에서 Pod를 다시 실행
  • matchExpression 기반 라벨 셀렉터를 사용할 수 있음

rs 조회
rs describe 조회
deployments, replica set, pod 조회

'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글

Service  (0) 2020.12.01
Object Template (--dry run 사용하기)  (0) 2020.12.01
Deployment  (0) 2020.12.01
Kubectl를 이용한 기본 제어  (0) 2020.12.01
k8s 구성요소와 Deployment Controller  (0) 2020.12.01

k8s 디버깅 3단계

  • kubectl get po
  • kubectl describe po {pod name}
  • kubectl get events

Yaml 명세서 기본

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
  - image: nginx
    name: hwk
  nodeSelector:
    disktype: ssd

주의사항 :

  • : 다음에는 무조건 공백 문자
  • 들여쓰기가 매우 중요하며 tab 을 사용해서는 안됨

create pod 수행 결과 

kubectl get event

root@master1:~# kubectl get event
LAST SEEN   TYPE     REASON      OBJECT      MESSAGE
2m30s       Normal   Scheduled   pod/mypod   Successfully assigned default/mypod to ip-172-31-4-27
2m30s       Normal   Pulling     pod/mypod   Pulling image "nginx"
2m26s       Normal   Pulled      pod/mypod   Successfully pulled image "nginx" in 3.59835338s
2m26s       Normal   Created     pod/mypod   Created container hwk
2m26s       Normal   Started     pod/mypod   Started container hwk

kubectl describe pod {pod name}

root@master1:~# kubectl describe pod mypod 
Name:         mypod
Namespace:    default
Priority:     0
Node:         ip-172-31-4-27/172.31.4.27
Start Time:   Tue, 01 Dec 2020 12:48:27 +0000
Labels:       <none>
Status:       Running
IP:           192.168.51.203
IPs:
  IP:  192.168.51.203
Containers:

bash 자동 완성기능 설정

root@ip-172-31-4-27:~# source <(kubectl completion bash)
                              # kubectl api-탭치면 자동완성이 되는것을 확인 할 수 있다

bashrc와 bash_profile에 적용하면 재 접속 후에도 사용할 수 있다
root@ip-172-31-4-27:~# echo "source <(kubectl completion bash)" >> ~/.bashrc
root@ip-172-31-4-27:~# echo "source <(kubectl completion bash)" >> ~/.bash_profile
root@ip-172-31-4-27:~# echo "source <(kubectl completion bash)" >> ~ubuntu/.bash_profile
root@ip-172-31-4-27:~# echo "source <(kubectl completion bash)" >> ~ubuntu/.bashrc
root@ip-172-31-4-27:~# echo "source <(kubeadm completion bash)" >> ~/.bash_profile
root@ip-172-31-4-27:~# echo "source <(kubeadm completion bash)" >> ~/.bashrc

 

'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글

Service  (0) 2020.12.01
Object Template (--dry run 사용하기)  (0) 2020.12.01
Deployment  (0) 2020.12.01
ReplicaSet  (0) 2020.12.01
k8s 구성요소와 Deployment Controller  (0) 2020.12.01

Master node(k8s 4인방) 와 Worker node

Cluster 구성요소 (참조 : kubernetes in action)
k8s 설치 이후 구성요소 확인

 

Deployment Controller 기반

Deployment 기반 배포란?
- 가장 범용으로 사용 
- Deployment 라는 상위 기반을 생성
- 하위 컨트롤러를 하나 더 소유 (Replica Set 컨트롤러) 
- Replica Set 은 Pod를 버전 별로 관리
- 예를 들어 Node에 문제가 발생한 경우, Pod를 재배포 하면 된다

 

 

'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글

Service  (0) 2020.12.01
Object Template (--dry run 사용하기)  (0) 2020.12.01
Deployment  (0) 2020.12.01
ReplicaSet  (0) 2020.12.01
Kubectl를 이용한 기본 제어  (0) 2020.12.01

+ Recent posts