끄적끄적 인턴생활 (2020)

클라우드 네이티브의 모든 것 (samsung techtonic 2020)

jellylucy 2021. 12. 28. 13:11

 

 

클라우드 중심의 오픈소스 SW 생태계 변화

출처 입력

1. IT 인프라 현대화와 DevOps 중심으로 오픈소스 사용확대

 

(1) IT infrastucture modernization : 퍼블릭 클라우드 전환

ex) docker, ansible

 

(2) Application Development

ex) React, Vue.js, Eclipse

 

(3)DevOps

ex)git, Jenkins

 

2. 클라우드 네이티브 프로젝트

 

(1)성장

CNCF (Cloud Native Computing Foundation)

: 클라우드 컴퓨팅 모델의 장점을 모두 활용하는 애플리케이션을 개발하고 실행하기 위한 접근 방식

 

클라우드 환경에서 애플리케이션을 배포하고 작은 서비스를 패키징하는 기술로

리눅스 컨데이너가 각광받고 있는데 이 세계는 다양한 기술이 섞여 복잡하다.

이런 문제를 클라우드 네이티브 오픈소스 기술로 해결하는데 (ex, kubernetes Prometheus)

CNCF가 추진하고 관리한다.

 

(2)클라우드 네이티브 핵심기술 : 컨테이너

기업들의 컨테이너 기술 적용은 도커, 쿠버네티스 중심으로 증가하고 있다.

 

Container Runtime & Container Orchestration : docker, kubernetes

kubernetes는 다양하게 만들어진 docker이미지들을 관리하는 docker아래에 있다고 보면된다

(모든것들을 컨트롤하기 위한 플랫폼의 플랫폼)

(그아래 세부적인 기능들을 연결할 수 있게 만들어짐)

|

|

세부적인 기능

Machine Learning : Kubeflow, Tensorflow, pytorch

Monitoring : Prometheus

Serverless : kn

Service Mesh : envoy

 

3. 클라우드 네이티브 프로젝트로 아키텍쳐 구성하기

(1)클라우드 네이티브 Trail Map 참고하기

대표사진 삭제

사진 설명을 입력하세요.

 

(2) 클라우드 네이티브 프로젝트로 아키텍처 구성

: 클라우드 네이티브 프로젝트를 이용한 서비스 아키텍처링

 

 

 

1. Client

2. Application

3. Persistence

4. Monitoring

 

수많은 docker 이미지 돌아다니기때문에 kubernetes 필요

 

 

4. 클라우드 네이티브 개발자의 기술적용 사례

 

(1) 클라우드 네이티브 오픈소스 SW 적용사례 ㅣ HAProxy

HAProxy 는 하드웨어 L4/L7을 대체할 수 있는 소프트웨어

기술서비스의 Kubernetes node에 앞 단에 위치한 HAProxy 의 부하와 에러상황을 실시간 모니터링이 필요

 

HAProxy + Prometheus + Grafana 를 이용하여 자체 로깅 시스템의 문자열에 대한 실시간 모니터링 구성

 

HAProxy Frontend 영역 통계 페이지

 

 
 

-> HAProxy http_request_total을 Promethous Metrics로 연결하여 확인한 시각화 Graph

 

->HAProxy http total request, 4xx response total을 Grafana로 시각화 구현

 

 

 
 

(2)클라우드 네이티브 오픈소스 적용사례 2

: Kubernetes + Docker +Springboot application

 

기술서비스에서 고객의 문의가 서비스 사이트에서 등록되면 자동으로 내부 Jira에 이슈로 등록하는 기능 필요

(1) Ticket 서비스에 등록된 새로운 문의에 대한 조회

public ArrayList<Map> retrieveOpenTickets() throws Exception {
customHttpEntity.setHttpEntity(MediaType.APPLICATION_JSON, userId, token, null);
ResponseEntity response = restTemplate.exchange(openTicketUrl, HttpMethod.GET,
customHttpEntity.getHttpEntity(), String.class);
 

Open ticket 값 저장

try {
tickets = mapper.readValue(response.getBody().toString(), new
TypeReference<Map<String, Object>>() {});
} catch (IOException e) {
e.printStackTrace();
throw new Exception();
}
ArrayList<Map> openTicketLists = (ArrayList<Map>) tickets.get("results");
return openTicketLists;
 

(2) 생성된 Ticket 정보를 바탕으로 Jira로 이슈 생성

@Override
public String createIssue(String projectKey, Long issueType, String assignee, Article article) {
int existIssueCount = searchJql(jql).claim().getTotal();
if (existIssueCount == 0) {
IssueRestClient issueClient = restClient.getIssueClient();
IssueInput newIssue = new IssueInputBuilder(projectKey, issueType, "[문의] " +
article.getSubject()).setAssigneeName(assignee)
.setComponentsNames(Arrays.asList(article.getField()))
.setFieldValue("customfield_10604", (String) String.valueOf(article.getZen_id()))
.setFieldValue("customfield_11832", ((String) article.getEmail().split("@")[0]))
.setDescription(addPrefixToDescription(article)).build();
BasicIssue basicIssue = issueClient.createIssue(newIssue).claim();
Issue issue = issueClient.getIssue(basicIssue.getKey()).claim();
 

(3)Jira 로 생성된 애플리케이션을 도커이미지로 빌드 후 실행

 

 

 

 

*쿠버네티싀 클리스터 구성 시 이것만은 주의하자

쿠버네티스 구성 방법 Kubeadm, kops, kubespray

 

 

 

5. 클라우드 네이티브 생태계에 기여하기

: CNCF Landscape에 속한 클라우드 네이티브 프로젝트 중 기여할 프로젝트 선정하기

 

컨트리뷰터가 되기 위해 준비하기

-Linux Foundation 가입

-github 계정 연결하기

-CLA 서명 제출하기

github에서 fork한뒤 merge하기 !

클라우드 네이티브 컨퍼런스 / 포럼 참가하기