[펌] buildah

scribbling 2018. 5. 18. 10:59



https://github.com/projectatomic/buildah



docker image 배포할 때, 특정 layer 를 추가/삭제할 수 있다고 한다. 레드햇에서 많이 미는 중인듯 하다.


간단한 예는 다음과 같다. 



https://fedoramagazine.org/daemon-less-container-management-buildah/


https://opensource.com/article/18/5/containers-buildah




Posted by '김용환'
,


grafana 웹에서 버전을 확인하고 싶다면..


datasources 메뉴의 맨 마지막 라인을 버전을 확인할 수 있다. 앗.. 불편..








Posted by '김용환'
,



해외에서는 부동산 계약할 때 아래 Net Lease에 대한 다양한 옵션을 사용하고 있다고 한다.


재미있는 것은 우리나라 오피스 건물에서도 Absolute Triple Net으로 계약을 진행하고 있다. 즉 건물을 건설사가 짓고 나서, 건물을 특정 펀드사에 판다. 특정 펀드사는 리스크를 줄이기 위해 건설사와 특정 기간 동안 (10년, 20년, 30년 등)Absoulte Triple Net 계약(완전 책임 임차)을 맺는 계약을 맺는다. 




http://mirrorhawaii.koreatimes.com/article/20070724/395200



1. Single Net Lease-세입자가 자신의 기본 rent 이외에 재산세만 지불한다. 이 외에 다른 모든 비용은 landlord가 부담한다.


2. Double Net Lease - 세입자가 자신의 rent 이외에 재산세 화재보험을 부담한다. 다른 운용비용은 건물 owner가 pay 한다.


3. Triple Net Lease - Net lease 중에서 가장 많이 쓰이는 lease의 형태이다. 세입자가 기본 rent 이외에 재산세, 보험, 수리 유지비 등등 모든 제반 비용을 부담한다. 만약 사려는 건물의 모든 lease가 triple net이라면 멀리 떨어진 곳에서도 운영이 가능하므로 편안한 마음으로 건물을 구입할 수 있다.


4. Absolute Triple Net Lease(Bond Lease) - 임대인이 지붕 건물 structure 등에 대하여 모든 책임을 지고 수리 보수를 한다. Rent 이외에 모든 제반비용(재산세, 화재보험, maintenance fee)도 tenant가 지불함은 물론이다. 




Posted by '김용환'
,




Intellij 2017.3 이전 버전에서는 Thread/Future쪽 디버깅 지원을 하지 않았는데..


2017.3 이후 버전부터 Thread/Future쪽 디버깅 지원한다. (디폴트임, 아주 완벽하지는 않지만. 그러저럭 쓸만하다!!)


https://blog.jetbrains.com/idea/2017/12/intellij-idea-2017-3-debugger-improvements/

Posted by '김용환'
,



스파크에서 파일을 읽어 첫 번째 field의 값을 long으로 변환하는 코드가 있다고 하자.


val users = sc.textFile("users.txt").map{ line =>

 val fields = line.split(",")

 (fields(0).toLong, User(fields(1), fields(2)))

}


이전 예를 실행하고 난 후 


users.collect 호출 후 EOFException:Cannot seek after EOF 또는 java.lang.NumberFormatException: For input string: "" 에러가 발생하면 fields(0).toLong 대신 fields(0).toInt로 변경하면 에러가 발생하지 않을 수 있다. 


잘 보면. 

users.take(10) 할 때는 에러가 발생하지 않는데..

users.collect를 호출할 때 에러가 발생할 수 있다.




변환 문제 또는 원시 소스 이슈이다. 



이를 해결하기 위해서는 2가지 방법이 있다.


첫번째 원시 소스 이슈를 해결한다.  


두번째 첫 번째 방법은 사실, 대용량에서 자주 발생할 수 있어서 Try를 최대한 사용해 Option을 사용하는 것이 좋다. 


scala> def parseLong(s: String): Option[Int] = Try(s.toInt).toOption

parseLong: (s: String)Option[Int]


scala> parseLong("")

res24: Option[Int] = None





원시 파일이 문제가 없는지 살펴본다. 공백 라인이 있어도 안된다.






Posted by '김용환'
,


System.currentTimeMillis()와 동일한 쉘 커맨드는 다음과 같다.


date +%s



Posted by '김용환'
,


쉘 커맨드에서 0부터 100까지의 특정 값을 랜덤하게 얻고 싶다면. awk를 이용해 쉽게 해결할 수 있다. 


awk -v min=0 -v max=100 'BEGIN{ srand(); print int(min+rand()*(max-min+1))}'




Posted by '김용환'
,




"일론 머스크, 미래의 설계자"를 읽으면서.. 



p311

대부분의 사람들은 그러한 종류의 압력을 받으면 두려움을 느낍니다. 그래서 잘못된 결정을 내리죠. 하지만 일론은 극도로 이성적 태도를 취합니다.

여전히 장기적 관점에서 명확한 결정을 내릴 수 있습니다. 상황이 어려울수록 더욱 이성적으로 결정을 내리죠. 일론이 직접 겪은 일을 본 사람들은 누구라도 그를 존경하게 됩니다.

고난을 이겨내는 일론의 능력은 정말 최고입니다.




p455

테슬라가 경쟁사와 다른 점은 타협하지 않고 자사의 비전을 향해 기꺼이 돌진하고 머스크가 제시하는 기준에 맞추어 온전히 목표에 몰입하는 것이다.




p486

머스크는 무엇보다 자기 기업을 중심으로 말하고 싶어하고 아무리 충성스러운 중역이라도 자기 생각이나 바람과 다른 방향으로 의견을 타진하면 매정하게 대한다.

"일론은 말도 안 될 정도로 일하기 힘든 상사이지만 대부분은 열정이 넘치기 때문이에요. "




p495

일론은 스티브 잡스처럼 소비자 감성을 지녔고, 빌 게이츠처럼 자기 전문 밖에서 훌륭한 인재를 발굴하는 능력을 지녔어요.



p510

머스크는 늘 고통을 달고 살았다. 학교 다닐 때는 또래에게 괴롭힘을 당했고 가정에서는 아버지에게 정신적으로 괴롭힘을 당했다. 그리고 비인간적일 만큼 오랫동안 일하고 계속해서 사업을 벼랑 끝까지 몰고 가며 자신을 학대했다. 전 후 사정을 고려하면 머스크에게는 일과 사생활의 균형을 맞춰어야 하는 개념 자체가 무의미한 것이다.




Posted by '김용환'
,


배포 방식도 간단히 deployment/release로 표현되기도 하지만.. 사실 많은 전략이 있다.



보통 웹 서비스에서 많이 사용되는 방식을 소개하면.. 다음과 같다. 




1) 롤링 업데이트 (rolling update), 또는 Ramped 라고도 한다.


일반적인 배포를 의미하는데, 


단순하게 한 대씩 재시작한다. 만약 코드 변경에 따른 side effect가 발생할 수 있다. 


하지만 롤백이 가능하다는 점, 관리가 편하다는 점에서 많이 사용되었다.


한 대만 배포해서 살펴볼 수도 있다.





2) 블루-그린(Blue-Green)


https://martinfowler.com/bliki/BlueGreenDeployment.html


예전 배포물을 블루(blue), 신규 배포물을 그린(green)이라고 해서 붙여진 이름이다. 


새로운 배포물을 배포하고 모든 연결을 새로운 배포물만 보게 한다. 코드 변경에 따른 side effect가 없다.


그러자 장애가 발생하면 크게 영향을 준다.




2) 카나리 (Canary)


1대 또는 특정 user에게만 미리 배포했다가 잘되면 전체 배포하는 방식이다.






수정한 코드가 워낙 많이 바뀌어서 좀 불안할 때 사용하는 방식이다. 


단순히 1대만 배포하는 경우도 있고. zookeeper/storage를 이용해 특정 user에게만 배포하는 형태를 가질 수 있다. 




3) A/B 테스트


카나리 배포와 비슷하지만 A/B 테스팅만을 위한 것이다. 






그림 출처 : https://martinfowler.com/


참조 

네이버에서의 SRE 경험.

https://martinfowler.com/

http://container-solutions.com/kubernetes-deployment-strategies/



Posted by '김용환'
,


단순 cpu 부하 올리기(부제 모니터링 확인)


metric을 제대로 가져오는지, 제대로 metric threshold에 따라 메시지가 오는 지 확인할 때 dd 커맨드를 사용하면 좋다. dd는 이런 용도는 아니지만, 부하 생성기로도 쓰기도 한다.



$ dd if=/dev/urandom | gzip --best >> /dev/null &

(top으로 자원 사용량 확인)


$ kill %1



$ dd if=/dev/urandom | gzip --best >> /dev/null &

$ dd if=/dev/urandom | gzip --best >> /dev/null &

$ dd if=/dev/urandom | gzip --best >> /dev/null &


$ kill %1

$ kill %2

$ kill %3



Posted by '김용환'
,