개발자 배치;클라우드 네이티브 스택 섹션 1

최초 출시: 2020년 2월 13일https://darnahsan.medium.com/dev-to-deploy-cloud-native-stack-part-1-8a5a7d99792d
이 글은 내가 이전에 Ultronex에 관한 글을 토대로 쓴 것이다. Ultronex는 Elixir로 다시 쓴 게으른 로봇이다.이 글은 API, 역방향 에이전트, 용기 모니터, 로그 관리 솔루션을 포함한 간단한 슬랙 bot을 저렴한 Hetzner VPS에서 클라우드 네이티브 기술인 Terraform, Packer, Ansible, Docker로 확장하는 방법을 소개할 것이다.최초의 게시물을 보면, Ultronex가 개발을 위해 용기로 포장되어 있다는 것을 알 수 있을 것이다. 이것은 내가 로컬에서 개발한 코드를 클라우드로 옮기는 데 도움을 주고, 수동 배치가 어떤 불쾌한 사고를 가져올지 걱정할 필요가 없다.응용 프로그램의 구성 요소와 어떻게 이루어졌는지, 그리고 docker compose를 어떻게 사용하는지 소개할 것입니다.다음 부분에서Terraform, Packer, Ansible를 사용하여 클라우드 서비스를 제공하는 방법을 보여 드리겠습니다.

미국 석유 학회


내가 bot에 추가한 첫 번째 일은 건강 검사를 감시하는 API이다.
Request: curl -v http://localhost:8080/ultronex/heartbeat

Response: {"msg":"I don't have a heart but I am alive!"}

status: 200
slack 로봇으로서 slack에 메시지를 보낼 수 없다면 무슨 좋은 점이 있습니까? 따라서 API 단점 지원을 추가하여 slack에 MSG를 보낼 수 있습니다.
Password protected endpoint

Request: curl --request POST \
  --url http://localhost:8080/ultronex/slack \
  --header 'Accept: */*' \
  --header 'Accept-Encoding: gzip, deflate' \
  --header 'Authorization: Basic username:password' \
  --header 'Cache-Control: no-cache' \
  --header 'Connection: keep-alive' \
  --header 'Content-Length: 81' \
  --header 'Content-Type: application/json' \
  --header 'Host: localhost:8080' 
  --header 'cache-control: no-cache' \
  --data '{"msg": {\n   "channel": "U08MG2700",\n   "text": "test",\n   "payload": "testing",\n "title": "Hola"\n   \n}\n   \n}'

Response: {
    "id": "e21f9216-43b4-45d9-978b-de94da273654",
    "msg": {
        "channel": "U08MG27P0",
        "text": "test",
        "title": "Hola"
    },
    "status": "triggered"
}

status: 200
시간의 추이에 따라 나는 추적 패턴과 수신, 처리, 응답의 메시지 수량을 이해하기 위해 더 많은 단점을 추가했다.
Password protected endpoint

Request: curl -v -H"Authorization: Basic username:password" http://localhost:8080/ultronex/stats

Response: {"uptime":"2019-10-16 16:01:05.571045Z","total_msg_count":90075,"total_attachments_downloaded":64992,"replied_msg_count":32,"forwarded_msg_count":14}

status: 200

Password protected endpoint

Request: curl -v -H"Authorization: Basic username:password" http://localhost:8080/ultronex/track

Response: {"stark":"U08MG273O"}

status: 200
최근에, 나는 메시지량 증가로 인한 웹 소켓 종료와 속도 제한의 느슨한 오류를 추적하기 위해 단점을 추가했다
Password protected endpoint

Request: curl -v -H"Authorization: Basic username:password" http://localhost:8080/ultronex/external

Response: {"errors":{"Slack error : remote closed":12}}

status: 200

도메인 이름 서버


나는 freedns.afraid.org에서 무료 DNS를 사용하여 API를 클라우드로 가져갔다.이것은 무료 DNS를 받을 수 있고, IP 주소를 더 이상 기억하지 않아도 클라우드 서버를 가리킬 수 있는 엉뚱한 서비스이다.IP를 선택한 도메인 이름과 동기화하려면 그들이 제공하는cron 스크립트를 추가하십시오.
sleep 40 ; wget — no-check-certificate -O — https://freedns.afraid.org/dynamic/update.php?<token> >> /tmp/freedns.log 2>&1 &

SSL


현재 시대에 도메인을 가지면 HTTPS에 없는 웹 서비스가 범죄다.LetsEncrypt를 사용하여 DNS에 무료 인증서를 얻는 것은 매우 간단합니다. 명령 한 줄만 있으면 다음 절차를 따라 컴퓨터에 인증서가 있어야 합니다.
certbot certonly — standalone

컨테이너 모니터링


docker 모니터링에 사용되는 도구가 많을 것입니다. 그 중 일부는 유행하는 소스 오픈 도구입니다. 예를 들어grafana와prometheus입니다. 그러나 소스 오픈에 가까운 도구는 없습니다. weavework scope그것은 당신의 모든 용기와 그것이 어떻게 연결되는지 보여줄 뿐만 아니라.또한 이들과 호스트에 대한 지표를 제공합니다.

마법은 여기에 그치지 않는다. 일단 창고가 생겨서 그것을 실행하면 웹 컨트롤러에서 하나의 용기를 제어할 수 있다.디버깅에 사용할 용기를 입력할 수 있으며, 그것을 멈추거나, 심지어는 멈출 수도 있습니다.

로그 관리


클라우드에 들어가면 로그 관리가 매우 중요해진다. 특히 현재 이렇게 많은 구성 요소가 실행 중일 때 서버에 가서 로그를 추적하는 것은 매우 번거롭다.두 개의 가장 유행하는 로그 관리 창고는 ELK(Elasticsearch,Logstash,Kibana)와 EFK(Elasticsearch,Fluentd,Kibana)이다.Elasticsearch는 자원 집약형일 수 있습니다. 여러 개의 계기판을 피하기 위한 해결 방안이 필요합니다. 우연히 또 다른 알려지지 않은 도구Loki를 발견했습니다.Loki는 Grafana 에서 온 도구입니다.Promtail의 다른 도구를 사용하여Grafana에 로그를 전송합니다. 로그를 유동적으로 전송하고 조회할 수 있습니다.


역방향 에이전트


API에서 로그 관리자에 이르기까지 용기 모니터에 이르기까지 모든 서비스가 있으면DNS에 연결하려면 라우팅 트래픽에 리버스 프록시를 사용해야 합니다.역 에이전트에 대해 저는 HAProxy을 오픈 소스 코드로 선택했고 다른 사람들이 없는 많은 기능을 가지고 있습니다. 예를 들어 건강검진,DDoS 보호, 통계 페이지와promethues에 부합되는 통계 도출기api를 내장했습니다.리버스 에이전트는 모든 전송 요청을 HTTP에서 HTTPS로 리디렉션하고 모든 서비스의 정상 운행 시간을 감시할 수 있습니다.모든 응용 프로그램의 불필요한 데이터를 차단할 수 있습니다.

Prometheus 호환되는 통계api를 통해 대량의 통계 데이터를Grafana에 쉽게 연결하고 성능을 상세히 파악할 수 있다.

현재 이 모든 것은 1vCPu와 2GB 또는 램만 있는 Hetzner CX11에서 실행되고 있다.API에서의 서비스 속도는 43rpm에 가깝고 최고치가 80rpm에 달한다. 이것은 slack bot이 응용 프로그램에서 처리하는 분당 200msg에 가까운 속도를 포함하지 않는다. 이 모든 속도는 18%의 CPU 사용률보다 낮다.

다음 부분에서 저는 Hetzner에서 어떻게 실례를 설정하고 프로그래밍 방식으로 이미지를 구축하여 수동으로 클라우드를 설정하는 실례를 피하는지 소개할 것입니다.Hetzner와Scaleway에서 이렇게 할 수 있도록 terraform과 패키지 코드를 공유할 것입니다. 그리고 왜 제가Scaleway에서 Hetzner로 전환하는 것을 선택했는지.
이 섹션의 모든 코드는 다음 웹 사이트에서 사용할 수 있습니다.

https://github.com/ahsandar/ultronex


좋은 웹페이지 즐겨찾기