Fly ai 4기 4주차 day 18 : Kubernetes

이성원·2024년 1월 12일
0
post-thumbnail

1. minikube 설치

서버를 많이 사용 못하는 상황이라 minikube로 실습을 진행한다.

#미니쿠베 설치
curl -LO https://storage.googleapis.com/minikube/releases/v1.22.0/minikube-linux-amd64 

sudo install minikube-linux-amd64 /usr/local/bin/minikube 
 

2. Kubectl 설치

kubectl 은 kubernetes cluster (server) 에 요청을 간편하게 보내기 위해서 널리 사용되는 client 툴이다.

curl -LO https://dl.k8s.io/release/v1.22.1/bin/linux/amd64/kubectl 

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl 

3. Minikube 시작하기

minikube start --driver=docker 

kubectl get pod -n kube-system 


위에 사진처럼 나오면 잘 시작된 것이다.

4. pod 생성

Pod(파드)는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이다.

간단한 Pod 의 예시

vi pod.yaml 

vi 에디터로 연 후에 아래 형식처럼 입력

apiVersion: v1 # kubernetes resource 의 API Version 
kind: Pod # kubernetes resource name 
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함 
  name: counter 
spec: # 메인 파트 : resource 의 desired state 를 명시 
  containers: 
  - name: count # container 의 이름 
    image: busybox # container 의 image 
    args: [/bin/sh, -c, 'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done'] # 해당 image 의 entrypoint 의 args 로 입력하고 싶은 부분 

pod.yaml 적용

kubectl apply -f pod.yaml

kubectl get pod

위 사진처럼 나오면 pod가 잘 생성된 것이다.

5. Deployment

  • Deployment(디플로이먼트)는 Pod와 Replicaset에 대한 관리를 제공하는 단위이다.

  • 관리라는 의미는 Self-healing, Scaling, Rollout(무중단 업데이트) 과 같은 기능을 포함한다

  • 조금 어렵다면 Deployment 는 Pod을 감싼 개념이라고 생각할 수 있다.

    • Pod 을 Deployment 로 배포함으로써 여러 개로 복제된 Pod, 여러 버전의 Pod 을 안전하게 관리할 수 있습니다.

Deployment 생성

vi deployment.yaml

vi에디터로 deployment.yaml 만든 후 아래 값 입력

apiVersion: apps/v1 # kubernetes resource 의 API Version 
kind: Deployment # kubernetes resource name 
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함 
  name: nginx-deployment 
  labels: 
    app: nginx 
spec: # 메인 파트 : resource 의 desired state 를 명시 
  replicas: 3 # 동일한 template 의 pod 을 3 개 복제본으로 생성합니다. 
  selector: 
    matchLabels: 
      app: nginx 
  template: # Pod 의 template 을 의미합니다. 
    metadata: 
      labels: 
        app: nginx 
    spec: 
      containers: 
      - name: nginx # container 의 이름 
        image: nginx:1.14.2 # container 의 image 
        ports: 
        - containerPort: 80 # container 의 내부 Port 

deployment.yaml 적용

kubectl apply -f deployment.yaml

kubectl get deployment


위 사진처럼 나오면 잘 적용된 것이다.

6. 서비스 생성

ip 확인 명령어

kubectl get pod -o wide

crul 명령어로 minikube 서버로 연결

curl -X GET [pod i] -vvv


ssh 서버에서 우분투가 만들어졌기때문에 80번 포트로 설정된 pod에서는 연결이 안 됨

minikube ssh

minikube를 ssh로 변경한 후에는 잘 되는 모습이다.

service를 이용하여 연결

vi service.yaml 

vi에디터로 service.yaml 만든 후 아래 코드 작성

apiVersion: v1 
kind: Service 
metadata: 
  name: my-nginx 
  labels: 
    run: my-nginx 
spec: 
  type: NodePort # Service 의 Type 을 명시하는 부분입니다. 자세한 설명은 추후 말씀드리겠습니다. 
  ports: 
  - port: 80 
    protocol: TCP 
  selector: # 아래 label 을 가진 Pod 을 매핑하는 부분입니다. 
    app: nginx

서비스 적용

kubectl apply -f service.yaml

kubectl get service

80번포트로 연결되었다.

curl -X GET $(minikube ip):<PORT>

위 명령어를 쓰면 ssh 포트로 이동하지 않아도 잘 작동이 되는 모습이다.

profile
개발자

0개의 댓글

관련 채용 정보