Windows 10의 로컬 Kubernetes 클러스터에서 반응 앱 실행

Click here for Original Post

전제 조건


  • Docker Desktop
  • WSL2 backend

  • 이 블로그에서는 Docker Desktop의 설치 프로세스와 WSL2 backend을 활성화하는 방법을 다루지 않습니다. 독자가 주어진 리소스에서 자체적으로 프로세스를 파악할 수 있다고 가정합니다. 향후 블로그에 충분한 수요가 있는 경우 이러한 주제를 자세히 다룰 수 있습니다.

    설치 후 Docker Desktop에서 Linux Containers Backend을 실행 중인지 확인하십시오.

    미니큐브 시작



    minikube은 로컬 호스트(이 경우 Windows)에서 개발하기 위해 로컬 kubernetes 클러스터를 설정합니다.

    로컬 도커 이미지를 사용하고 도커 레지스트리로 푸시할 필요성을 우회한 다음 kubernetes에 배포하는 동안 동일하게 지정하므로 --insecure-registry=10.0.0.0/24이 사용됩니다.

    10.0.0.0/24입니까? 점검
  • CIDR notation and subnets
  • Minikube enabling insecure registries

  • 다음 명령을 실행하여 powershell(가급적 admin powershell)에서 로컬 kubernetes 클러스터를 시작합니다.

    minikube start --insecure-registry="10.0.0.0/24"
    


    샘플 출력

    ❯ minikube start --insecure-registry="10.0.0.0/24"
    
    * minikube v1.18.1 on Microsoft Windows 10 Pro 10.0.21332 Build 21332
    * Using the docker driver based on existing profile
    * Starting control plane node minikube in cluster minikube
    * Restarting existing docker container for "minikube" ...
    * Preparing Kubernetes v1.20.2 on Docker 20.10.3 ...
    * Verifying Kubernetes components...
      - Using image kubernetesui/dashboard:v2.1.0
      - Using image kubernetesui/metrics-scraper:v1.0.4
      - Using image gcr.io/k8s-minikube/storage-provisioner:v4
    * Enabled addons: storage-provisioner, dashboard, default-storageclass
    * Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
    


    반응 앱 만들기



    Windows 환경에 nodenpm이 설치되어 있는지 확인

    ❯ node -v
    v15.11.0
    
    ❯ npm -v
    7.6.3
    


    그런 다음 npx create-react-app test-react-app을 사용하여 테스트 반응 애플리케이션을 만듭니다.

    ❯ npx create-react-app test-react-app
    Need to install the following packages:
      create-react-app
    Ok to proceed? (y) y
    
    Creating a new React app in D:\work\test-react-app.
    
    Installing packages. This might take a couple of minutes.
    Installing react, react-dom, and react-scripts with cra-template...
    
    yarn add v1.22.4
    [1/4] Resolving packages...
    [2/4] Fetching packages...
    


    마지막으로 앱이 예상대로 실행되는지 확인합니다.

    Minikube 도커 로컬 환경 구성



    다음 명령을 실행하여 로컬 도커 이미지를 사용하여 더 쉽게 개발을 반복할 수 있도록 로컬 구성을 설정합니다.

    노트
    이것은 다음 명령을 실행하는 powershell 터미널에 로컬로 유지됩니다.

    & minikube -p minikube docker-env | Invoke-Expression
    


    궁금한 사람은 minikube docker-env을 실행하여 실행되는 실제 명령을 확인하십시오.

    ❯ minikube docker-env
    $Env:DOCKER_TLS_VERIFY = "1"
    $Env:DOCKER_HOST = "tcp://127.0.0.1:52175"
    $Env:DOCKER_CERT_PATH = "C:\Users\Naren\.minikube\certs"
    $Env:MINIKUBE_ACTIVE_DOCKERD = "minikube"
    # To point your shell to minikube's docker-daemon, run:
    # & minikube -p minikube docker-env | Invoke-Expression
    


    반응 애플리케이션을 도커화합니다.



    반응 앱의 도커 이미지를 만드는 가장 간단한 방법은 애플리케이션 폴더의 루트(git의 경우 저장소)에 다음 파일을 추가하는 것입니다.



    도커파일

    FROM node:10-alpine as build-step
    
    RUN mkdir /app
    WORKDIR /app
    COPY package.json /app
    RUN npm install
    COPY . /app
    RUN npm run build
    
    FROM nginx:1.17.1-alpine
    COPY --from=build-step /app/build /usr/share/nginx/html
    


    .dockerignore

    /node_modules
    /build
    .git
    *.md
    .gitignore
    




    도커 이미지 빌드



    docker build -t test-react-app .
    




    빌드된 이미지 확인



    ❯ docker images test-react-app
    REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
    test-react-app   latest    e81a494ead2b   About a minute ago   21.1MB
    


    쿠버네티스 배포



    쿠버네티스 클러스터에 리액트 앱을 배포하려면 deploymentservice 리소스가 필요합니다. 두 사양을 yaml으로 분리하여 단일 --- 파일에 결합할 수 있습니다.
  • Never로 표시된 imagePullPolicy 속성을 관찰하십시오. 이는 image이라는 test-react-app을 가져오기 위해 docker 레지스트리를 보지 않음을 나타냅니다.
  • 또한 service이라는 가장 간단한 NodePort을 사용하여 kubernetes 클러스터의 노드 포트를 애플리케이션 포트
  • 에 매핑합니다.



    배포.yaml

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: test-react-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: test-react-app
      template:
        metadata:
          labels:
            app: test-react-app
        spec:
          containers:
            - name: test-react-app
              image: test-react-app
              imagePullPolicy: Never
              ports:
                - containerPort: 80
          restartPolicy: Always
    
    ---
    
    kind: Service
    apiVersion: v1
    metadata:
      name: test-react-app
    spec:
      type: NodePort
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
          nodePort: 32000
      selector:
        app: test-react-app
    
    




    배포
    kubectl apply -f <yaml>을 사용하여 배포와 서비스를 모두 배포합니다.

    kubectl apply -f .\deployment.yaml
    


    샘플 출력

    ❯ kubectl apply -f .\deployment.yaml
    deployment.apps/test-react-app created
    service/test-react-app created
    




    실행 중인 포드 확인
    kubectl get pods을 사용하여 실행 중인 포드가 있는지 확인합니다.

    ❯ kubectl get pods
    NAME                             READY   STATUS    RESTARTS   AGE
    test-react-app-9bf9cbcdb-h9zvj   1/1     Running   0          12s
    


    반응 앱에 액세스




    서비스 URL 찾기
    minikube을 사용하여 배포된 반응 애플리케이션의 서비스 URL을 찾습니다.

    minikube service test-react-app --url
    


    샘플 출력

    ❯ minikube service test-react-app --url
    🏃  Starting tunnel for service test-react-app.
    |-----------|----------------|-------------|------------------------|
    | NAMESPACE |      NAME      | TARGET PORT |          URL           |
    |-----------|----------------|-------------|------------------------|
    | default   | test-react-app |             | http://127.0.0.1:62352 |
    |-----------|----------------|-------------|------------------------|
    http://127.0.0.1:62352
    ❗  Because you are using a Docker driver on windows, the terminal needs to be open to run it.
    




    브라우저에서 앱 열기




    로컬 Kubernetes 대시보드



    그동안 우리는 kubernetes 로컬 대시보드에서 kubectl 명령 실행의 효과를 볼 수 있습니다.

    minikube dashboard
    


    샘플 출력

    ❯ minikube dashboard
    🔌  Enabling dashboard ...
        ▪ Using image kubernetesui/dashboard:v2.1.0
        ▪ Using image kubernetesui/metrics-scraper:v1.0.4
    🤔  Verifying dashboard health ...
    🚀  Launching proxy ...
    🤔  Verifying proxy health ...
    🎉  Opening http://127.0.0.1:56135/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
    


    새 탭에서 대시보드를 엽니다.


    대청소



    다음 명령을 사용하여 deploymentservice을 정리합니다.

    kubectl delete -f .\deployment.yaml
    

    minikube(로컬 k8s 클러스터)을 닫고 삭제합니다.

    minikube stop
    minikube delete
    

    좋은 웹페이지 즐겨찾기