Cluster: 컨테이너화된
애플리케이션을 실행하기 위한 노드 집합이다. 클러스터는 하나 이상의 클러스터 마스터 노드
와 워커 노드
로 구성된다. 마스터는 노드에서 애플리케이션들을 스케쥴링하며 워커는 마스터에서 받은 task를 처리한다.
Namespace: 네임스페이스는 클러스터 리소스를 논리적으로 나누는 단위. Namespace 별로 리소스가 구분되어 있다.
Pod: Kubernetes에서 가장 작은 단위. 클러스터에서 실행 중인 프로세스라고 생각하면 된다.
Service: Pod를 네트워크로 노출시키는 컴포넌트
<NodeIP>:<NodePort>
를 요청하여 클러스터 외부에서
NodePort 서비스에 연결할 수 있다.자신만의 고유한 IP 주소
를 갖고 외부에서 액세스가 가능하게 해준다. Cloud kubernetes cluster의 경우, 자동으로 ip가 할당된다.Deployment: 애플리케이션의 업데이트와 배포를 더욱 편하기 만들기 위해 Pod 및 ReplicaSet에 대한 선언적 업데이트를 제공하는 컴포넌트. Deployment를 통해 원하는 상태를 정의하여 한번에 여러 개의 Pod를 배포한다.
Replicas: 고가용성을 제공하기 위한 Pod의 복사본.
Configmap: 파일을 pod에서 사용할 수 있도록 관리해주는 컴포넌트.
Volume: Pod에 마운트할 수 있는 스토리지
실습 후 아래 그림을 다시 보면 이해가 될 것입니다.
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