API resource - pod

문주은·2022년 8월 18일
0

kubernetes object = API resource

1. pod 생성 순서

1) kubectl api-resources : api resource 확인

2) nodepadd++에서 yaml 코드 작성

apiVersion: v1
kind: Pod
metadata:
  name: mynode-pod
  labels:
    app: myapp
spec:
  containers:
  - image: juliy9812/mynode:1.0
    name: mynode-container
    ports: 
    - containerPort: 8000

3) yamlint.com에서 검증

  • valid 인증 확인

4) vi mynode.yaml

  • nodepadd에서 작성한 yaml 코드 입력

5) kubectl apply
kubectl apply -f mynode.yaml : yaml 코드 적용

6) 할당된 ip 확인
kubectl get pod -o wide : 생성된 pod 확인

  • status가 RUNNING이 되고 ip가 할당된지 확인,
  • 몇번 node에 스케줄링된지 확인

7) check
curl 할당받은ip : 8000

  • curl 결과 값으로 docker image에 해당하는 값이 나와야함
  • 다른 node1,2에서도 같은 값이 나오는지 확인
  • 그이유는 앞전 게시물(k8s architecture)에서 pod ip는 cluster에 포함된 모든 노드에서 조회 가능하기 때문
  • 하지만 외부에서 연결 불가능 ex) window server

8) 외부 server에서 연결 작업

  • kubectl api-resources에서 service 확인 후 kind: service로 작성
  • 외부 server에서도 연결하기 위해서 yaml 코드 작성
    (외부에서 연결을 허용하려면 service object를 생성하여 pod와 연결)
apiVersion: v1
kind: Service
metadata:
  name: mynode-svc
spec:
  selector:
    app: myapp
  ports:
  - port: 8800
    targetPort: 8000
  externalIPs:
  - 192.168.56.101
  • yamlint.com에서 검증
  • vi mynode-svc.yaml
  • kubectl apply -f mynode-svc.yaml
  • kubectl get pod,svc -o wide : pod, svc 모두 확인 가능
  • service/mynode-svc 외부ip(external ip) 확인
  • 외부환경(windows)에서 curl 외부ip:8800 을 통해 같은 값이 나오는지 확인

2. 예제 실습1

2-1. 실습 예제 문제

[ 주제 ] nginx pod 생성

1) CentOS 기반으로 생성

  • nginx:1.23-alpine 이미지를 이용하여 pod(pod명: nginx-pod)를 생성하고 Service(서비스명: nginx-svc)에 연결하세요.
  • 생성 후 podIP와 service clusterIP를 이용해 curl test 수행해 보세요
  • nginx Pod내에 있는 container에 index.html을 복사하여 초기 화면을 변경하세요
    ~] # vi index.html # html 코드 제공
    ~] # kubectl cp index.html nginx-pod:/usr/share/nginx/html/index.html

2) GKE를 이용하여 public IP를 받아서 생성

[ 결과 ]

Welcome to nginx! 에서 검정색 index.html 화면으로 변경

2-1. 실습 예제 정답

### nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - image: nginx:1.23-alpine
    name: mynginx-container
    ports: 
    - containerPort: 8002

### nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    app: nginx
  ports:
  - port: 9000
    targetPort: 8002
  externalIPs:
  - 192.168.56.102

예제 실습2

apiVersion: v1
kind: Pod
metadata:
  name: mongo-pod
  labels:
    app: hi-mongo
spec:
  containers:
  - image: mongo:4.0
    name: mongodb-container
    ports: 
    - containerPort: 27017
    
apiVersion: v1
kind: Service
metadata:
  name: monbo-svc
spec:
  selector:
    app: hi-mongo
  ports:
  - port: 37017
    targetPort: 27017
  externalIPs:
  - 192.168.56.102

예제 실습3

mysql db 와 연동

apiVersion: v1
kind: Pod
metadata:
  name: mydb-pod
  labels:
    app: mydb57
spec:
  containers:
  - image: mysql:5.7
    name: mydb-container
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: k8s-pass#
    ports: 
    - containerPort: 3306

예제 실습4

apiVersion: v1
kind: Pod
metadata:
  name: goapp-pod
  labels:
    app: hi-goapp
spec:
  containers:
  - name: goapp-container
    image: juliy9812/goapp:1.0
    ports: 
    - containerPort: 9090

---

apiVersion: v1
kind: Service
metadata:
  name: goapp-svc
spec:
  selector:
    app: hi-goapp
  ports:
  - port: 9090
    targetPort: 9090
  type: LoadBalancer
profile
Data Engineer

0개의 댓글