Kubernetes에서 웹진을 사용하는 방법 Ubuntu 20.04의 전제 조건에서 신속하게 개발

Kubernetes에서 웹진을 사용하는 방법 Ubuntu 20.04의 전제 조건에서 신속하게 개발

2022-06-01 last update

19 minutes reading System Tools Ubuntu Development Deployment Kubernetes
저자는 Tech Education FundWrite for DOnations 계획의 일부로 기부를 받았다.

소개


Kubernetes에서 마이크로서비스를 구축하는 응용 프로그램 개발자들은 두 가지 주요 문제에 자주 부딪히는데 이 두 가지 문제는 그들의 속도를 느리게 한다.
  • 느린 피드백 회로.코드 변경이 완료되면 테스트를 위해 Kubernetes에 배치해야 합니다.이것은 용기를 구축하고 용기 등록표로 전송하며 Kubernetes에 배치해야 합니다.이것은 매번 코드가 교체될 때마다 분을 증가시킬 것이다.
  • 로컬 메모리 및 CPU가 부족합니다.개발자는 로컬에서 minikube 또는 같은 버전으로 Kubernetes를 실행함으로써 피드백 순환을 가속화하려고 합니다.그러나 자원이 부족한 응용 프로그램은 곧 로컬에서 사용할 수 있는 계산과 메모리를 초과할 것이다.
  • Telepresence은 클라우드 컴퓨터 계산의 기초 프로젝트로 Kubernetes에서 신속하고 효율적인 개발에 사용된다.네트워크 팩시밀리를 사용하면 로컬에서 서비스를 실행할 수 있고 클라우드에서 응용 프로그램의 나머지 부분을 실행할 수 있습니다.넷진은 Kubernetes 클러스터와 로컬 워크스테이션 간에 양방향 네트워크 연결을 만듭니다.이렇게 하면 로컬에서 실행되는 서비스는 집단의 서비스와 통신할 수 있고, 반대로도 마찬가지입니다.이것은 집단적인 계산과 메모리 자원을 사용할 수 있지만, 매번 변경할 때마다 완전한 배치 주기를 겪을 필요는 없습니다.
    이 강좌에서는 Kubernetes 클러스터를 사용하도록 Ubuntu 20.04를 실행하는 로컬 컴퓨터에 네트워크를 구성합니다.클러스터의 트래픽을 차단하고 로컬 환경으로 리디렉션합니다.

    선결 조건


    이 강좌를 완성하려면 다음이 필요합니다.

  • Kubernetes 클러스터 (예: DigitalOcean Kubernetes)우리는 강좌에서 Digital Ocean Kubernetes를 사용할 것입니다. 그러나 기존의 Kubernetes 집단(로컬 또는 클라우드)을 사용할 수도 있습니다.

  • kubectl installed locally 및 Kubernetes 클러스터에 연결하도록 구성

  • 노드의 로컬 개발 환경.js.How to Install Node.js and Create a Local Development Environment에 따라 조작할 수 있습니다.
  • 1단계 - 네트워킹 설치


    이 단계에서 네트워크를 설치하고 Kubernetes 그룹에 연결합니다.우선 kubectl을 구성하고 로컬 워크스테이션에서 Kubernetes 클러스터에 연결할 수 있는지 확인합니다.get services 명령을 사용하여 클러스터의 상태를 확인합니다.
    1. kubectl get services
    출력은 다음과 같이 사용자 클러스터의 IP 주소를 나열합니다.
    Output
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 116m
    다음으로, 당신은 로컬에 네트워크 팩시밀리를 설치할 것입니다.임장감은 바이너리 파일이다.curl을 사용하여 Linux의 최신 바이너리 파일 다운로드 (약 50MB):
    1. sudo curl -fL https://app.getambassador.io/download/tel2/linux/amd64/latest/telepresence -o /usr/local/bin/telepresence
    그런 다음 chmod을 사용하여 바이너리 파일을 실행할 수 있습니다.
    1. sudo chmod a+x /usr/local/bin/telepresence
    현재 로컬에 웹캠이 설치되어 있으며 Kubernetes 클러스터에 연결하여 제대로 작동하는지 확인할 수 있습니다.
    1. telepresence connect
    다음 출력이 표시됩니다.
    Output
    Launching Telepresence Daemon ... Connected to context default (https://<cluster public IP>)
    네트워크가 연결되지 않으면 kubectl 구성을 확인하십시오.status 명령을 사용하여 Kubernetes API 서버에 연결하여 원격 구현이 제대로 작동하는지 확인합니다.
    1. telepresence status
    다음 출력을 볼 수 있습니다.Telepresence Proxy: ON은 그룹에 접근할 수 있도록 설정된 에이전트를 원격으로 보여줍니다.
    Output
    Root Daemon: Running Version : v2.1.4 (api 3) Primary DNS : "" Fallback DNS: "" User Daemon: Running Version : v2.1.4 (api 3) Ambassador Cloud : Logged out Status : Connected Kubernetes server : https://7c10e553-10d1-4fee-9b7d-1ccbce4cdd34.k8s.on Kubernetes context: <your_kubernetes_context> Telepresence proxy: ON (networking to the cluster is enabled) Intercepts : 0 total Connected Context: do-tor1-k8s-bg-telepresence (https://bee66877-1b07-4bb1-8c8f-4fd62e416865.k8s.on) Proxy: ON (networking to the cluster is enabled) Intercepts: 0 total
    서버에서 telepresence connect을 사용할 때, 네트워크는 ambassador이라는 이름 공간을 만들고 데이터 관리자를 실행합니다.클라이언트에서 NetS를 설정하여 로컬에서 원격 서버에 액세스할 수 있도록 합니다.이것은 로컬 서비스에 대한 접근을 수동으로 설정할 필요가 없다는 것을 의미합니다.원격 서비스에 액세스할 때 DNS는 특정 IP 주소로 확인됩니다.자세한 내용은 Telepresence architecture documentation을 참조하십시오.
    이제 노트북에서 Kubernetes 클러스터가 실행되는 것처럼 로컬 워크스테이션에서 원격 Kubernetes 클러스터에 연결할 수 있습니다.다음은 예시 프로그램을 시험적으로 사용할 것입니다.

    단계 2 - 예제 노드를 추가합니다.js 응용 프로그램


    이 단계에서, 당신은 간단한 노드를 사용할 것입니다.js 응용 프로그램은 Kubernetes 집단에서 실행되는 복잡한 서비스를 시뮬레이션합니다.DockerHub에서 이 파일에 접근해서 로컬에서 이 파일을 만들지 않고 집단으로 배치할 것입니다.파일 이름은 kubectl port-forward이며 텍스트 문자열을 반환합니다.
    var http = require('http');
    
    var handleRequest = function(request, response) {
      console.log('Received request for URL: ' + request.url);
      response.writeHead(200, {'Content-Type': 'text/plain'});
      response.write('Hello, Node!');
      response.end();
    };
    
    http.createServer(handleRequest).listen(9001);
    console.log('Use curl <hostname>:9001 to access this server...');
    
    hello-node 명령을 사용하여 kubectl create deployment이라는 배포를 만듭니다.
    1. kubectl create deployment hello-node --image=docommunity/hello-node:1.0
    다음 출력이 표시됩니다.
    Output
    deployment.apps/hello-node created
    hello node 명령을 사용하여 배포가 수행되었는지 확인하고 현재 클러스터에서 애플리케이션이 실행 중:
    1. kubectl get pod
    출력은 get pod 상태 READY을 표시합니다.
    Output
    NAME READY STATUS RESTARTS AGE hello-node-86b49779bf-9zqvn 1/1 Running 0 11s
    1/1 명령을 사용하여 포트 expose deployment의 애플리케이션을 사용할 수 있습니다.
    1. kubectl expose deployment hello-node --type=LoadBalancer --port=9001
    출력은 다음과 같습니다.
    Output
    service/hello-node exposed
    9001 명령을 사용하여 로드 밸런스가 실행 중인지 확인합니다.
    1. kubectl get svc
    출력은 다음과 같습니다.
    Output
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.245.75.48 <pending> 9001:30682/TCP 4s kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 6d
    로드 밸런스가 지원되지 않는 로컬 Kubernetes를 사용하는 경우 kubectl get svc의 외부 IP 값은 LoadBalancer으로 영구적으로 표시됩니다.이 강좌로 말하자면, 이것은 매우 좋다.Digital Ocean Kubernetes를 사용하는 경우 지연 시간 후에 외부 IP 값이 IP 주소로 표시됩니다.
    다음은 <pending> 액세스 로드 밸런서를 사용하여 응용 프로그램이 실행 중인지 확인합니다.
    1. curl <ip-address>:9001
    로드 밸런서를 실행하지 않으면 curl을 사용하여 직접 서비스에 액세스할 수 있습니다.
    1. curl <servicename>.<namespace>:9001
    출력은 다음과 같습니다.
    Output
    Hello, Node!
    그런 다음 curl 명령을 사용하여 클러스터에 네트워킹을 연결합니다.
    1. telepresence connect
    이렇게 하면 로컬 서비스에 액세스하는 것처럼 모든 원격 서비스에 액세스할 수 있으므로 이름별로 서비스에 액세스할 수 있습니다.
    1. curl hello-node.default:9001
    IP를 통해 서비스에 액세스할 때와 동일한 응답을 받게 됩니다.
    Output
    Hello, Node!
    이 서비스는 클러스터에서 시작되고 실행되므로 원격으로 액세스할 수 있습니다.telepresence connect 애플리케이션을 변경하려면 다음 단계를 수행해야 합니다.
  • 응용 프로그램을 수정합니다.
  • 컨테이너 이미지 재구성
  • 을 용기 등록표로 보냅니다.
  • 을 Kubernetes에 배포합니다.
  • 이것은 많은 절차가 필요하다.도구(예: Skaffold)를 사용하여 수동 작업을 줄일 수 있습니다.그러나 이 절차 자체는 돌아갈 수 없다.
    이제 용기 이미지를 구축하거나 등록표로 보내거나 Kubernetes에 배치할 필요 없이 hello-node.js의 다른 버전을 구축하고 네트워크를 사용하여 테스트할 것입니다.

    3단계 - 새 버전의 서비스를 로컬에서 실행


    이 단계에서 로컬 컴퓨터에 있는 기존 hello-node app 응용 프로그램을 수정합니다.그런 다음 네트워크 팩시밀리를 사용하여 트래픽을 네트워크 팩시밀리가 있는 로컬 버전으로 라우팅합니다.캡처하면 집단에 사용할 데이터를 가져오고 로컬 버전으로 다시 라우팅하여 개발 환경에서 계속 작업할 수 있도록 합니다.
    예제 응용 프로그램 수정 버전이 포함된 새 파일을 만듭니다.
    1. nano hello-node-v2.js
    새 파일에 다음 코드를 추가합니다.
    hello-node-v2.회사 명
    var http = require('http');
    
    var handleRequest = function(request, response) {
      console.log('Received request for URL: ' + request.url);
      response.writeHead(200, {'Content-Type': 'text/plain'});
      response.write('Hello, Node V2!');
      response.end();
    };
    
    http.createServer(handleRequest).listen(9001);
    
    파일을 저장하고 종료합니다.
    노드를 사용하여 서비스를 시작합니다.
    1. node hello-node-v2.js
    서비스가 계속 실행되고 새 터미널 창을 열고 서비스에 액세스하려면 다음과 같이 하십시오.
    1. curl <ip_address>:9001
    출력은 다음과 같습니다.
    Output
    Hello, Node V2!
    단, 이 서비스는 로컬에서만 실행됩니다.원격 서버에 액세스하려고 하면 현재 hello-node의 버전 1을 실행하고 있습니다.이 문제를 해결하기 위해서, 모든 흐름 그룹의 hello-node 서비스의 데이터 루트를 이 서비스의 로컬 버전으로 차단하는 것을 사용합니다.hello-node 명령을 사용하여 간격을 설정합니다.
    1. telepresence intercept hello-node --port 9001
    출력은 다음과 같습니다.
    Output
    Using deployment hello-node intercepted Intercept name : hello-node State : ACTIVE Destination : 127.0.0.1:9001 Volume Mount Error: sshfs is not installed on your local machine Intercepting : all TCP connections
    intercept 명령을 사용하여 절단이 제대로 설정되었는지 확인합니다.
    1. telepresence status
    출력은 다음과 같습니다.
    Output
    Root Daemon: Running Version : v2.1.4 (api 3) Primary DNS : "" Fallback DNS: "" User Daemon: Running Version : v2.1.4 (api 3) Ambassador Cloud : Logged out Status : Connected Kubernetes server : https://7c10e553-10d1-4fee-9b7d-1ccbce4cdd34.k8s.on Kubernetes context: <your_kubernetes_context> Telepresence proxy: ON (networking to the cluster is enabled) Intercepts : 1 total hello-node: user@context
    이제 앞서 설명한 대로 status을 사용하여 원격 서비스에 액세스합니다.
    1. curl <ip-address>:9001
    출력은 다음과 같습니다.
    Output
    Hello, Node V2!
    현재, 그룹에 전송된 모든 메시지는 로컬 서비스로 다시 지정됩니다.이것은 개발 단계에서 매우 유용합니다. 코드의 모든 단독 변경에 대해 배치 순환 (구축, 전송, 배치) 을 피할 수 있기 때문입니다.

    결론


    이 강좌에서는 로컬 컴퓨터에 네트워크 팩시밀리를 설치하고 로컬 환경에서 코드를 변경하는 방법을 보여 줍니다. 변경할 때마다 Kubernetes에 배치할 필요가 없습니다.인터넷에 대한 더 많은 강좌와 정보는 Telepresence documentation을 참조하십시오.