Kubernetes의 이해

  1. Cluster: 컨테이너화된 애플리케이션을 실행하기 위한 노드 집합이다. 클러스터는 하나 이상의 클러스터 마스터 노드워커 노드로 구성된다. 마스터는 노드에서 애플리케이션들을 스케쥴링하며 워커는 마스터에서 받은 task를 처리한다.

    1. 노드란?: 클러스터에서 pod를 실행시킬 워커 역할을 한다. 가상 또는 물리 머신일 수 있다.

    Untitled

  2. Namespace: 네임스페이스는 클러스터 리소스를 논리적으로 나누는 단위. Namespace 별로 리소스가 구분되어 있다.

    Untitled

  3. Pod: Kubernetes에서 가장 작은 단위. 클러스터에서 실행 중인 프로세스라고 생각하면 된다.

  4. Service: Pod를 네트워크로 노출시키는 컴포넌트

    1. ClusterIP**:** 이것은 기본 ServiceType이며 클러스터의 다른 포드가 액세스할 수 있는 내부 IP를 노출시킴. 클러스터 내부에서만 통신이 가능하다.
    2. NodePort**:** 정적 포트(NodePort)에서 각 노드의 IP로 노출. <NodeIP>:<NodePort>를 요청하여 클러스터 외부에서 NodePort 서비스에 연결할 수 있다.
    3. LoadBalancer**:** 자신만의 고유한 IP 주소를 갖고 외부에서 액세스가 가능하게 해준다. Cloud kubernetes cluster의 경우, 자동으로 ip가 할당된다.
  5. Deployment: 애플리케이션의 업데이트와 배포를 더욱 편하기 만들기 위해 Pod 및 ReplicaSet에 대한 선언적 업데이트를 제공하는 컴포넌트. Deployment를 통해 원하는 상태를 정의하여 한번에 여러 개의 Pod를 배포한다.

  6. Replicas: 고가용성을 제공하기 위한 Pod의 복사본.

  7. Configmap: 파일을 pod에서 사용할 수 있도록 관리해주는 컴포넌트.

  8. Volume: Pod에 마운트할 수 있는 스토리지

실습 후 아래 그림을 다시 보면 이해가 될 것입니다.

Untitled

kubectl로 nginx 설치해보기

nginx란?

<aside> 💡 웹 서버의 일종. 리버스 프록시, 로드 밸런서, 캐싱 등 많은 역할을 함

</aside>

각자 이름으로 된 Namespace로 만들어보자.

NAMESPACE="**<이름>"**
kubectl create ns $NAMESPACE

nginx 화면에 보여줄 문구를 작성한다.

CONTENT="hello, world!"

각자 폴더에서 아래 명령어를 통해 Deployment, configmap, service 한번에 생성

kubectl apply -n $NAMESPACE -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-html
data:
  index.html: |
    <html>
    <body>
    <h1>$CONTENT</h1>
    </body>
    </html>
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
      - name: html
        configMap:
          name: nginx-html
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
EOF