이야기박스

CNCF, Kubernetes Forum Seoul 2019 본문

Hobby/각종 후기

CNCF, Kubernetes Forum Seoul 2019

박스님 2019. 12. 9. 16:32
반응형

CNCF에서 주관하는 Kubernetes Forum Seoul, 2019를 다녀왔습니다.

무려 150$이나 하는 비싼 포럼이기 때문에 더 집중해서 듣고 오게 된 것 같습니다 ㅎㅎ

포럼은 용산, 드래곤시티 호텔에서 열렸습니다.

현장 분위기

등록을 하고나면 바로 옆에서 등록증에 붙일 수 있는 스티커가 준비되어 있습니다.
커뮤니케이션을 위한 스티커, 성 정체성을 존중하는 젠더 스티커가 있었습니다.

키노트 이후에 간단한 다과를 할 수 있는 공간이 있었습니다. 각종 쿠버네티스 부스를 보면서 즐길 수 있었습니다 ㅎㅎ

 

아래는 제가 들은 트랙에 대한 가벼운 정리입니다.

Track 1. How To Debug The Pod Which Is Hard To Debug 

발표자: 카카오 이어형

 

방법 1. Ephemeral Container

디버깅용 임시 컨테이너

https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/20190212-ephemeral-containers.md

 

kubernetes/enhancements

Features tracking repo for Kubernetes releases. Contribute to kubernetes/enhancements development by creating an account on GitHub.

github.com

 

방법 2. Network Namespace

 

 

방법 3. Debuging Tool 이용

Scratch-Debuger

 

kubernetes-retired/contrib

[EOL] This is a place for various components in the Kubernetes ecosystem that aren't part of the Kubernetes core. - kubernetes-retired/contrib

github.com

Insert busybox binary into the POD based on scratch image

 

 

Track 2. 쿠버네티스 테스트 간극 좁히기

발표자: ii.coop, Hippie Hacker

 

https://github.com/cncf/apisnoop

 

cncf/apisnoop

⭕️Snooping on the Kubernetes OpenAPI communications - cncf/apisnoop

github.com

https://github.com/cncf/k8s-conformance

 

cncf/k8s-conformance

🧪CNCF K8s Conformance Working Group. Contribute to cncf/k8s-conformance development by creating an account on GitHub.

github.com

 

Track 3. 쿠버네티스에서 레거시 RESTful API를 위해 gRPC 서비스 실행

발표자: Buzzvil, Sungwon Lee & Hoseong Hwang

 

새로운 서비스 (gRPC) + 레거시(json)의 동시 서비스가 필요

istio의 envoy가 json과 gRPC의 transcoding 지원

 

## Envoy yaml

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: example-transcoder
  namespace: example-namespace
spec:
  workloadLabels:
 ...
filters:
 - listenerMatch:
     listenerType: SIDECAR_INBOUND
 filterName: envoy.grpc_json_transcoder
 filterType: HTTP
 filterConfig:
   proto_descriptor: “path/to/bin”
   match_incoming_request_route: True
   auto_mapping: False
   services:
   - buzzvil.calendar.v1.CalendarApi

 

## Proto & Json 관리
패키지 단위로 관리 --> CI 파이프라인 구성

 

## 배포 - Helm

istion가 TCP 프로토콜을 사용하기 때문에, TCP 설정이 필요

 

EnvoyFilter.yaml

 

Track 4. etcd의 비밀 레시피

발표자: 라인플러스 손준호

 

## etcd란?

쿠버네티스의 분산 key-value 저장소

  • configuration information
  • resources object's
  • cni rules
  • user Define CRDs

raft algorithm를 사용.

Leader는 Follower들에게 주기적으로 heartbeat 체크를 보냄. 만약 이 heartbeat에서 타임아웃이 발생하면 새로운 리더 선출 발생

 

## etcd 운영

etcd가 필요한 이유? k8s 쿠버네티스가 커지고 오브젝트 호출이 빈번해지면 튜닝이 필요

 

Case 1. database space exceeded

$ kc apply -f deployment/app.yaml
etcdserver: mvcc: database space exceeded 

etcd read only

==> k8s object 변경, 생성이 불가능해 짐

 

원인, 과도한 revision history

Solution. etcdctl compaction, defragment 필요

export PEERS="http://10.127.111.53:2379,http://10.127.114.99:2379,http://10.127.114.96:2379"
export ETCDCTL_API=3
# get revision
$ rev=$(etcdctl endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o
'[0-9]*')
# compaction
$ etcdctl compact $rev
compacted revision 518729
# defragment(resize high watermark)
$ etcdctl --endpoints ${PEERS} defrag
Finished defragmenting etcd member[http://10.127.111.53:2379] 

 

Case 2. etcd의 member 노드가 fault tolerance 이상 죽었다.

$ etcdctl --endpoints ${PEER} -w table endpoint status
Failed to get the status of endpoint http://kube-master001-gt1-dev:2379 (context deadline exceeded)
Failed to get the status of endpoint http://kube-master002-gt1-dev:2379 (context deadline exceeded)
...
| http://kube-master003-gt1-dev:2379 | f63e6c37ebc0b45c | 3.2.22 | 7.6 MB | false | 35 | 91982333 |

etcd fail, kubectl 조회 불가

 

원인, etcd의 quorum을 잃어 버리면 raft consensus가 불가능 하므로 append entry, leader election 요청이 불가능함

member node를 다시 살려줘야 함. 하지만 member node가 살아나지 않는다면?

 

Solution. etcd backup을 가지고 restore

 

Case 3. etcd의 응답이 느려지고 endpoint status의 Raft term이 계속 증가한다

etcd high latency

 

원인

  • 다른 네트워크안에 etcd member가 있어서 latency가 느린경우
  • 혹은 disk i/o가 느려서 entry read 성능이 느린경우

Solution

  • Disk를 SSD로 바꿈
  • heartbeat interval, election timeout을 조정

 

Track 5. 부스 구경

Cloud , APM 홍보가 주를 이루고 있음

 

Track 6. 데이터를 지오 파티셔닝(Geo-Partitioning) 하고 싶다면

발표자: Planetscale Deepthi Sigireddi, Jiten Vaidya

 

 

Track 7. 쿠버네티스, 데이터 플랫폼 아키텍처 재구성

발표자: devsisters 오승용

 

데브시스터즈는 별도의 하둡 구성 없이 AWS S3만 사용.

 

데이터플랫폼을 yarn과 같은 데이터에 특화된 오케스트레이션에서 k8s로 옮겨가는 것에 어떠한 이점이 있을까?

 

Benefit 1. 구성이 쉽다

 

이렇게 복잡한 프로세스가 helm install & airflow operator 등록하면 끝남

 

Benefit 2. 분석이 쉽고 효율적으로 됨

많은 사용자가 사용하면서 비용이 많이 발생하게 됨

쿠버네티스를 사용하여 비용 최적화

 

Spark On K8S

 

JupyterHub을 통한 Spark 실행

 

Benefit 3. Access Controls

  • pod/node level access control 가능
  • group/roles/namespace 관리

 

스파크를 쿠버네티스에 쉽게 옮기지 못하는 이유

  • Doesn't support dynamic allocation
  • Pod Templating

 

하지만 옮길만한 가치가 있다.

  • 초기 구성 비용이 상대적으로 적음
  • 스파크 3.0 로드맵

 

Track 8. 오픈 스택을 통한 클러스터 API 구조 이해

발표자: SKT 이재상, 김에스더

 

Deep Dive to Cluster API

 

Deep Dive to Cluster API

Kubernetes is a popular open source container orchestration platform to manage cloud-native applications cross cluster of hosts. It can be…

itnext.io

CAPO (Cluster API Provider OpenStack)

OpenStack을 이용하여 VM을 생성하여 Kubernetes Cluster로 구성한다. 별도의 CRDs(OpenStackMachine, OpenStackCluster와 Controller가 있다.

 

YAML files

  • cluster.yaml ; 클러스터 전반전인 설정
  • machinedeploy.yaml
  • controlplane.yaml ; 마스터 노드에 대한 설정
  • provider-compobent.yaml

 

 

소감

반응형