[kubernetes, ncp] 쿠버네티스 최초 설치 및 기본 설정 (1) :: . . . (tistory.com)
(해당 내용은 NCP classic 환경 관련입니다)
프로젝트 구조를 크게
dev, ops namespace 로 구성하고, 각 namespace 안에 api 서비스 및 애플리케이션(파드)이 동작하게 만들 예정이다.
api 애플리케이션은 서비스를 통해 워커노드 1, 2 에서 동작한다.
이후 nginx-ingress-controller를 통해 외부와 연결할 수 있도록 한다.
이번에는 namespace, deployment, service 설정을 하고 pod가 동작하는 것까지 확인한다.
1. namespace 설정
namespace란 쿠버네티스 내에서 논리적인 분리 단위이다. (Cloud VPC 같은 개념이라고 생각하면 편할 듯 하다)
운영 환경별로 namespace를 생성하여 (dev, stg, prd) 관리한다.
또한, 기본 메모리 요청량 및 기본 메모리 상한을 설정할 수도 있다.
(원래는 운영 환경별로 따로 cluster를 구성하는게 맞는 방법같지만, 비용적인 측면을 생각해 한 cluster에 여러개의 namespace를 구성해 동작하도록 한다)
dev-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev-namespace
kubectl apply -f dev-namespace.yaml
2. deployment 설정
deployment는 replicaset을 통해 애플리케이션을 배포하고 업데이트, 관리하기 위한 상위 리소스이다.
deployment를 생성하면 replicaset이 생성되고, 이 replicaset에 의해 파드가 생성되고 관리된다.
dev-api-deployment.yaml
metadata - namespace와 spec - template - metadata - labels를 통해 namespace와 어떤 노드에 생성할 것인지를 설정
(해당 label은 node에 추가해줘야 한다)
(명령어는 kubectl label nodes <노드명> <label명>)
apiVersion: apps/v1
kind: Deployment
metadata:
name: dev-api-deployment
namespace: dev-namespace
labels:
app: dev-api-deployment
spec:
replicas: 2
selector:
matchLabels:
env: dev-node
template:
metadata:
labels:
env: dev-node
app: dev-api-pod
spec:
containers:
- name: <도커 이미지 명>
image: <도커 이미지>
imagePullPolicy: Always
imagePullSecrets: # 외부 저장소에서 이미지를 pull하는 경우
- name: docker-registry-login
kubectl apply -f dev-api-deployment.yaml
deployment가 생성되고 해당 deployment에서 replicaset, pod를 생성한 것을 볼 수 있다.
조금 더 자세히 보면
각 노드에 잘 할당됐다
3. Service 설정
서비스는 파드에서 실행중인 애플리케이션을 외부로 노출하는 방법이다.
Service의 타입에는
- ClusterIP: 클러스터 내부에서만 접근
- NodePort: 포트 번호를 통해 외부 접근
- Load Balancer: 외부 LB 연결
- ExternalName: kube-dns로 DNS 이용
이 있다.
앞으로 Nginx-Ingress-Controller를 사용해 이 Controller가 도메인에 따라 지금 생성한 Service로 연결하여
Service가 각 파드가 생성되어 있는 노드로 request를 보내는 식으로 구성할 것이다.
dev-api-service.yaml
deployment와 마찬가지로 어떤 namespace에 적용할 것인지를 작성한다
apiVersion: v1
kind: Service
metadata:
name: dev-api-service
namespace: dev-namespace
spec:
ports:
- port: 9001
targetPort: 8080
selector:
env: dev-node
kubectl apply -f dev-api-service.yaml
끝!
다음으로 nginx-ingress-controller를 설정하고, 서버 공인IP와 포트를 통해 해당 서비스에 접근한다.
[kubernetes, ncp] 쿠버네티스 nginx ingress controller 설정 및 배포 (3) :: . . . (tistory.com)
'개발 > 데브옵스' 카테고리의 다른 글
[kubernetes, ncp] 쿠버네티스 ArgoCD 적용하기 - (5) (0) | 2022.07.14 |
---|---|
[kubernetes, ncp] 쿠버네티스 파드간 통신을 위한 Subnet 구성 - (4) (0) | 2022.07.13 |
[kubernetes, ncp] 쿠버네티스 nginx ingress controller 설정 및 배포 (3) (0) | 2022.06.29 |
[kubernetes, ncp] 쿠버네티스 최초 설치 및 기본 설정 (1) (0) | 2022.06.28 |