Hello Node Kubernetes

본 포스팅은 Qwiklabs 의 Kubernetes in the Google Cloud 를 기반으로 하고 있습니다. 이번 시간에 실습해 볼 것들: Create a Node.js server. Create a Docker container image. Create a container cluster. Create a Kubernetes pod. Scale up your services. 위의 그림에서 보면 GKE 와 GCR 그리고 k8s 의 관계를 설명해주고 있다. GCP 안에서의 관계는 저런식이지만 GCR 이 DockerHub 로 대체될 수 있고, GKE 가 AWS 로 대체 될 수 있을것 같다. Node.js app 아래와 같이 server.js 를 생성한다. var http = require('http'); var handleRequest = function(request, response) { response.writeHead(200); response.end("Hello World!"); } var www = http.createServer(handleRequest); www.listen(8080); Docker containe

k8s cronjob 제한

원문 : https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations Cron Job 은 job을 시간에 맞춰서 생성한다. Cronjob object는 하나의 crontab 파일. crontab 파일(리눅스에서의 cron 포맷으로 생성된) 이 정기적으로 job을 실행시키는 것 Cron Job 제한 스케쥴된 시간당 하나의 job object 생성 두개나 혹은 생성 자체가 안될수 있다. 작업 자체가 멱등해야한다.(idempotent), 즉 여러번 작업해도 같은 결과물이 나오게 해야한다. startingDeadlineSeconds 을 크게 설정하고 concurrencyPolicy 를 Allow 로 설정하면, job 은 항상 적어도 한번만 실행된다. Cronjob controller 가 이전 스케쥴된 시간에서 현재시간까지 missed 된 스케쥴을 체크하는데 100 개가 넘으면 job 을 시작하지 않고 아래와 같은 메시지를 보여준다. Cannot determine if job needs to be started. Too many missed start time (> 100). Set or decrease .spec.startingDeadlineSeconds or check clock skew.

Introduction to Docker

본 포스팅은 Qwiklabs 의 Kubernetes in the Google Cloud 를 기반으로 하고 있습니다. Docker Image & Build, Run 기본적으로 도커이미지 형태로 올리는 것이 기반이 되어야 한다. 일단 도커 이미지를 생성하기 위해서는 Dockerfile 을 생성해야 한다. # Use an official Node runtime as the parent image FROM node:6 # Set the working directory in the container to /app WORKDIR /app # Copy the current directory contents into the container at /app ADD . /app # Make the container's port 80 available to the outside world EXPOSE 80 # Run app.js using node when the container launches CMD ["node", "app.js"] From 부분에서 기존의 부모 이미지를 가져와서 활용 할 수가 있다. node 나 python 같은 언어나 혹은 특정환경이 세팅된 도커 이미지를 활용할 수 있을것 같다. 이럴 경우, 이미지를 삭제할 때 자식 이미지를 먼저 삭제 해줘야 부모 이미지를 삭제 할 수 있다. 도커 이미지 빌드 : Usage: docker build [OPTIONS] PATH | URL | - > docker build -t node-app:0.1 .

2018 회고

2018 회고 2018년 내게 많은 격변의 일들이 있었던 해인 것 같다. 매월 어떤 것을 했는지 적어보려 했지만 사실 그건 12월이 된 시점에 잘 기억이 나지 않을것 같고 분기별로 한번 회고를 해보았다. 1사분기 달콤커피의 로봇커피 서비스 비트를 런칭했다. 하드웨어 개발도 포함된 영역이라서 내가 개발하진 않았지만 결국 서비스 전체 개발을 영향을 미치기 때문에 쉽지 않았던 것 같다. 인천공항 제2터미널에 우선 런칭하고, 시연회도 갖고, 차차 하나씩 오픈해가면서 필요한 것들을 만들어 나갔던 시간이었던 것 같다. 회사가 스타트업은 아니지만, 그 안에서 준 스타트업처럼 일해볼 수 있는 기회였고, 그 안에서 여러가지 정치적 상황과 마주했던 것 같다. 개발적인 리소스를 만드는 것 뿐만 아니라, 사람을 뽑고, 프로세스를 만들고, 문화를 정착시키려고 노력했던 것 같다. 아내가 둘째를 가졌다. 2사분기 고도화가 계속 진행이 되었고, 여러가지 운영적인 측면이 고려되었다. 서비스를 어떻게 운영할 것인가에 대한 생각과 그 안에서 개발팀이 어떻게 일해야하는가, 그리고 그 일한것을 어떻게 보여줄 것인가에 대한 고민이 많았던 것 같다. 프로젝트 일에 대해서 그만두라는 애기가 많이 나왔다. 정치적인 상황이 작용하는 느낌이 들었다. 같은 회사

타다 후기, 승차거부 아니되오~

타다를 탔다. 1만원 할인이라서 탔다. 처음에는 코엑스에서 분당으로 오는 길에 타고 싶었는데 콜을 했는데, 7분 4분 을 기다려도 차가 움직이지를 않았다. 모랄까.. 승차거부를 당한 느낌이었고, 추운 날이어서 취소를 하고 버스를 타고 집에 왔다. 아직은 뭔가 서비스가 설 익은걸까? 베타인가? 차량이 별로 없는 건가? 하는 생각이 들었다. 두번째 기회가 왔다. 분당에서 홍대는 조금 먼데 가는 길에 지하철을 타고 가니 올 때는 빨리 오고 싶었다. 다시 2호선을 타고 신분당선을 타고 마을버스를 타고 집에 와서 아들과 놀아 줄 자신이 없었다. 홍대 한빛미디어 근처에서 타다를 불렀다. 4분 만에 온다는 것과 위치를 보고 곧 오겠지라는 생각이 들었는데 점점 멀어지고 있었다. 첫번째 승차거부 아닌 승차거부를 당했던 일이 생각이 났다. 다행이도 홍대 인근에는 일방통행이 많아서 회전교차로까지 가서 돌아왔다. 차가 많은 곳이라서 기사분이 내려서 문을 열어주시기 전에 내가 올라탔다. 뭔가 택시에 비해서 친절한 느낌이었고, 처음 탄다고 웰컴킷을 주셨다. 늦은 밤이라서 불을 꺼 주셨고, 한강을 지나서 집으로 잠이 들면서 올 수 있었다. 택시에 비해서 확실히 말이 없는데, 너무 말이 없어서 내가 질문을 할 뻔했다. 가장 좋았던 것은 불편했던 담배 냄새를 맡지 않아서 좋았다. 30대가 되면서 차를 운전하기 시작했고, 차를 운전하기 시작하면서 어느 순간부터 한강의 야경을 보기란 쉽지 않았다. 운전하면서 야경이나 옆을 본다는 건 굉장히 위험한데, 타다를 타고 오면서 한강의 야경을 오랜만에 볼 수 있었다. 타다를 타고 오면서 든 생각은 택시는 빠르게 이동하기 위한 수단이라는 생각이 많이 들었고, 우버나 카풀은 택시가 안 잡힐 때의 대안 혹은 해외여행 갔을 때 사용할 수 있는 대안이라고 생각을 많이 했다. 그런데 타다를 타고나서 드는 느낌은 시간과 공간을 내가 돈으로 샀다는

서비스종료

Path 서비스 종료 푸시를 받았다. 꽤 많은 서비스들이 하루에도 많이 모르는 사이에 종료 되고 있는데. 좋아했던 Path 의 서비스 종료 푸시는 마음을 아프게 했다. 꽤 오랫동안 사용했던 것 같다. 페이스북이 지금 보다 작았을 때, 나는 좀 더 친밀한 관계에 있는 사람들끼리 사진 공유를 하고 싶은 마음에 Path 를 사용했고(실제로 친구 명수 제한이 있었다.) 결혼하기 전 그러니까 4년정도 전까지 엄마와 아내와 함께 썼었다. 지금은 너무나도 흔하지만, 카메라 필터의 기능이 매우 마음에 들었고, 바로 찍어서 올린다는 것도 좋았다. 그런 좋았던 부분들은 다른 앱 들에게 따라 잡혔고, 더 이상 차별화가 되지 못했고, 꽤 많은 사람들이 페이스북을 주로 쓰기 시작하면서 자연스럽게 Path 와 나 역시 멀어져 갔다. 그럼에도 불구하고, 좋았던 순간들을 찍었던 사진들이 있는 제 2의 싸이월드 같은 곳이라서 앱을 지우지는 않았다. 가끔 지난날이 보고 싶을 때 들어가서 보곤 했

Rust 기본 문법

변수 변수는 불변성 가변성 변수는 mut 를 추가 let mut x = 5; 상수 상수는 mut 을 쓸수 없음. 불변성 그 자체 const 유형(데이터 타입)을 선언해야한다. 상수표현식으로만 설정, 실행시간에 설정될 수 없다. const MAX_POINTS: u32 = 100_000; Shadowing 같은 변수 이름을 써서 가리는 것 let x = 1; let x = x+1; mut 사용과의 차이점 변경이후 변수가 불변성을 가지느냐 유형(데이터 타입)을 변경 할 수 있으면서, 같은 변수명을 유지 mut 을 이용더라도 유형 변경을 해서 값을 대입 시킬 수는 없다. 데이터 타입 러스트는 타입이 고정된 언어 스칼라 타입 : 하나의 값으로 표현되는 타입 정수형 8비트 : i8(가장좋은 선택, 가장 빠르다), u8 16비트 : i16, u16 32비트 : i32, u32

Rust Cargo

cargo 명령어 정리 프로젝트 생성 cargo new —bin <app> ├── Cargo.lock ├── Cargo.toml └── src └── main.rs 1 directory, 3 files 빌드 및 실행 cargo build: 컴파일 cargo run : 바로 실행 cargo check : 문법체크 cargo clean : 컴파일 정리 cargo new : 프로젝트 생성 cargo init : 프로젝트 생성(이미 존재하는 디렉토리에 생성 가능) cargo test : tests 실행 cargo bench : 벤치마크 실행 cargo update : 의존성 업데이트 cargo search : crates 검색 $ cargo search web Updating registry `https://github.com/rust-lang/crates.io-index` web = "0.0.2" # ... cargo-web = "0.6.16" # A Cargo subcommand for the client-side Web actix-web-requestid = "0.1.2&q

면접자가 하면 절대 안되는 말

면접자로도 참여하기도 하고 면접관으로도 참여하는 짬이 되었다.(애매한) 그런데 면접관으로 참여하면서 느낀 것중 하나는 면접자 스스로 절대 하면 안되는 말이 있다. 그건 바로 스스로 연봉을 낮추는 것이다. 스스로 연봉을 낮춰지는 어떤 행위나 말을 하는게 아니라, 실제로 연봉을 낮게 받아도 된다고 말하는 경우들을 많이 봐왔다. 어떤 처우협의가 별도의 단계가 없는(사실 처우협의 단계가 있는 회사를 지원하시기를 추천한다.) 경우 더 그런데 면접과정에서 현재 연봉과 희망연봉(내규에 따름..?) 을 애기하는 과정에서 지원자가 스스로 연봉을 어떤 사유에서 낮게 받아도 된다고 애기해버리는 경우가 있다. 개발자의 경우, 어떤 기술이나 언어를 사용해보지 않았거나 연차가 덜 쌓였다고 생각해서 그렇게 말하는 경우가 있더라. 뭐 SNS 상에서는 후배개발자를 위해서 내가 제대로 대우를 받아야한다는 말도 있지만(그건 둘째치고),