Kubernetes 첫 deploy 성공하기

### 참조 링크
-  [# Ingress Controllers](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/)
- [# Managing Workloads](https://kubernetes.io/docs/concepts/workloads/management/)

## 쿠버네티스 설치
- 작년에 구매한 sq-nano 가 놀고 있다. 
	- https://voramall.com/product/v-raptor-sq-nano/12/
- 구매하면 제공되는 자습서를 보고 [[sq-nano에 Kubernetes 설치하기]]
- 이럴 필요가 없었다. 나는 k8s에 배포하는 법을 알고 싶었을 뿐
	- 도커 데스크탑에서 k8s 활성화. 로컬 설치 끝
## 쿠버네티스의 리소스?
- 파드 : 컨테이너의 실행 방법을 정의
- 레플리카셋 : 동일 스펙의 파드를 여러 개 생성하고 관리
- 디플로이먼트 : 레플리카세트의 리비전을 관리
- 서비스 : 파드 집합에 접근하기 위한 경로 정의
- 인그레스 : 서비스를 클러스터 외부로 노출
## 매니페스트 파일 작성하기
- 파일 형식은 yaml 을 사용한다. 
- 앞서 리소스가 매니페스트의 kind 속성의 값이 된다. 
	- Deployment, Service, Ingress 만 기억하면 된다. 
### 매니페스트 파일의 실행
```
$ kubectl apply -f [파일명].yaml
```
### Deployment
- 디플로이먼트, 레플라카셋, 파드의 관계를 이해하면 파일 작성은 그리 어렵지 않다.

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp
spec:
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: greeting:1.1
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 8080
```
### Service
- service 의 주 기능은 라우팅 이라고 생각하면 된다. 아래 설정에서 port to targetPort
- port는 ingress 에서 넘어오는 포트, targetPort는 pod의 containerPort를 적어주면 된다.
```
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  selector:
    app: webapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
```
### Ingress
- Ingress는 외부에서 쿠버네티스 안쪽에 접근하기 위한 입구(진입점)이라고 생각하면 된다.
- Service에서 유형을 바꿔주면 외부 노출을 시켜줄 수 있지만 ingress라는 것을 사용하면 관리가 더 편리하다. 
- Ingress를 사용하려면 쿠버네티스에 Ingress controller를 먼저 설정해야한다. 클라우드 서비스마다 적절한 ingress controller를 제공해주고 있으니 클라우드 서비스를 사용하는 경우 해당 클라우드의 가이드를 따르자. 
- 여기서는 ingress-nginx 로 세팅한다. 
```
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/cloud/deploy.yaml

$ kubectl get all -n ingress-nginx
```
- 다음으로 Ingress 매니페스트
```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec:
  ingressClassName: nginx
  rules:
  - host: local.ohhoonim.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: webapp-service
            port: 
              number: 80
```

댓글

이 블로그의 인기 게시물

Session 대신 JWT를 사용하는 이유

VSCode에서의 VIM 단축키와 키보드 구매 가이드

우분투에서 테스트링크(testlink)와 맨티스(mantis)로 테스팅 서버 구성하기