공부/Kubernetes 28

ubuntu에 특정 k8s, crio 버전 설치하기

회사에서는 centOS를 사용하는데, 개인 서버에서는 우분투를 깔아놔서 설치법이 조금 달라서 애먹었다. 게다가 docker가 아닌 crio라서 조금 더 힘들었음 설치 버전 ubuntu 18.04 kubernetes 1.19.4 crio 1.19.2 아래 명령어를 통해 자신의 OS 버전 확인 가능 cat /etc/os-release 설치 순서(공통) swap 파티션 비활성화 sudo swapoff -a vi /etc/fstab /etc/fstab 파일의 swap 관련 부분을 주석처리 한다. /swapfile ~ 부분 # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier fo..

공부/Kubernetes 2022.01.03

k8s QoS Class

개념 k8s에서 pod에는 QoS Class라는 것이 있다. Qos는 Quality of Service의 약자로서 서비스 품질이라는 뜻이며, k8s에서 pod의 스케줄링과 제거 우선순위를 판단하는데 사용되는 값이다. 종류는 세 가지뿐이다. - Guaranteed - Burstable - Best-Effort 동작 방식 노드에 가용 리소스가 부족해지면 누군가는 희생되어야 한다. 이 때, k8s 스케줄러는 QoS Class를 보고 어떤 pod를 희생시킬지 판단한다. kubelet은 Best-Effort를 가장 먼저 종료 시키고, Best-Effort가 없다면 Burstable을 강제 종료 시킨다. 간단히 설명하면 위와 같지만 정확히 설명하자면, QoS Class를 보고 판단하다기 보다는 QoS Class에 ..

공부/Kubernetes 2022.01.03

secret 생성 시 주의사항

redis 관련 업무를 하다가 환경변수를 secretKeyRef을 이용할 상황이 생겼다. env: - name: REDIS_PASSWORD valueFrom: secretKeyRef: name: redis-secret key: redis-password 그런데 아무리 제대로 해봐도 에러가 나는 것이다. 열심히 구글링 한 결과, 원인은 개행문자였다. 아래 두 시크릿을 만들어보자. apiVersion: v1 kind: Secret metadata: name: sample-secret type: Opaque stringData: sample-key: | sample-value --- apiVersion: v1 kind: Secret metadata: name: sample-secret2 type: Opaque..

공부/Kubernetes 2021.11.17

k8s 공식문서 contribution 메인 브랜치에 merge!!

사실 main 브랜치에는 진작에 병합 됐었다. 그런데 github contributor에서 내 이름을 찾을 수 없었다ㅠㅠ 찾아보니 상위 100명의 기여자만 보여준다고 한다. 심지어는 날짜를 내가 commit한 날짜로 좁혀도 안나오는데, 전체 상위 100명 기준으로 그 기간사이에 다시 재정렬 하는 것이기 때문에 난 나오지가 않는다고 한다.. 즉, 그 기간내의 상위 100명이 아니라 전체 상위 100명의 그 기간 내의 순위다... 그래서 시무룩했는데 공식문서 맨 아래에 해당 페이지의 최신 업데이트 내역이 남아있었다. 그리고 떡하니 내 커밋 로그가 링크로 연결되어있다!! https://github.com/kubernetes/website/commit/4a275f1426edcc1a6041484a611457e8c..

공부/Kubernetes 2021.10.22

첫 PR 성공적으로 merge!!

이 글에서 이어진다. 추석 연휴 전에 날린 PR이 우여곡절 끝에 merge 되었다. 그 와중에 사소한 이슈가 좀 있었다. 가장 먼저 알게 된 것은 assign은 어지간하면 내가 하는 게 아니라는 것! 어차피 봇이 알아서 리뷰어를 할당해주고 하기때문에 난 그냥 PR만 올리면 된 거였다. 아무튼 그래서 빨리 될 줄 알았는데.. 내가 main 브랜치로 merge로 요청을 한 게 문제가 됐다. 한국어 작업을 하는 브랜치로 targe branch를 변경해달라고 하셨다. 너무 친절히 알려주셔서 정말 감사했다. 그런데 서지훈님께서 "혹시 이런 현상~"이라고 말씀해주신대로 문제가 발생했다. 내가 main 브랜치에서 분기를 쳐서 작업을 했다 보니, 한국어 브랜치로 merge 하는데 문제가 생긴 것이다. 어찌저찌 한국어 ..

공부/Kubernetes 2021.09.24

첫 PR 날려봤다

NFS 관련 공식문서를 읽다가 예시를 보기 위해 링크를 눌렀는데 잘못된 링크였다. 확인해보니 master 브랜치인데 링크는 main 브랜치로 되어있던 것이 문제였다. 링크를 고쳐달라고 문의를 보내려고했는데, 그런 방식이 아니라 kubernetes/website라는 github 프로젝트로 관리되는 거였다. 그래서 깃헙 코드를 직접 확인해보니 {{}}를 통해 파라미터로 브랜치를 받고있었다. 그래서 처음에는 이 파라미터를 넘겨주는 값을 main에서 master로 바꾸면 되겠다 싶었지만, 도대체 어디서 넘겨주는지를 알 수가 없었다. 그런데 다행히 똑같은 이슈의 PR들이 이미 있었다. 답변이 말하기로는 파라미터 자체는 해당 프로젝트의 default 브랜치 값을 자동적으로 주어서 문제가 없다고 한다. 그 프로젝트의..

공부/Kubernetes 2021.09.16

Kubernetes Pod-to-Service 통신 매커니즘

k8s에서 가장 까다로운 부분 중 하나는 네트워크라고 생각한다. 이미 구글링 하면 여러 다른 사이트에서 이 글보다 훨씬 쉽고 자세하게 설명해준 글들이 많다. 그래서 나는 굳이 모든 통신의 경우를 다 정리하진 않는 대신, pod-to-service의 통신과정과 실제 환경에서 룰을 확인해볼 것이다. pod-to-service를 알면 그 밑단의 pod-to-pod 혹은 다른 노드 간의 pod-to-pod 통신도 쉽게 이해할 수 있기 때문이다. 구조 위 그림은 node X의 pod A가 service를 통해 node Y의 pod B로 통신하는 과정을 보여주고 있다. 이 시나리오에 따라 차례차례 설명하도록 하겠다. ① pod A가 DNS 서비스로 콜 pod A가 서비스(DNS)로 콜을 보내면, 각 컨테이너의 /e..

공부/Kubernetes 2021.09.15

docker image 경량화 build 하기

지금도 도커/쿠버네티스의 초보지만 더 초보였던 시절, 이미지도 그저 생각없이 아래 비스무리하게 했다. COPY . . RUN go build 그러다보니 이미지의 크기가 정말 상상도 못하게 컸다. 1.19 기가가 말이 되는가? 이유는 쓸데없는 바이너리나 파일들이 이미지에 포함되어있기 때문이다. 어떻게하면 실행에만 필요한 파일들을 포함시킬 수 있을까? operator-sdk에서 기본적으로 만들어주는 dockerfile에서 그 해답을 찾을 수 있었다. 핵심은 빌드와 실행을 분리하는 것이다 전체 dockerfile은 아래와 같다. # 1. 빌드전용 이미지 FROM golang:1.15 as builder WORKDIR /go/src # 2. 필요한 패키지 다운로드 COPY go.mod go.mod COPY go..

공부/Kubernetes 2021.09.10

Kubernetes operator 메커니즘

operator-sdk를 통해 두 세개의 operator 개발은 해봤지만, 내부 동작원리는 어떻게 되는지는 정확히 알기가 어려웠다. 그래서 호기심에 찾아보다가 아주 잘 정리된 글을 찾아서 내 나름대로 정리할겸 공유한다. 원 출처는 아래 블로그이다. https://ssup2.github.io/programming/Kubernetes_Kubebuilder/ Kubernetes Kubebuilder를 이용한 Operator 개발 Memcached 예제를 통해서 Kubebuilder와 Controller를 분석한다. ssup2.github.io 0. CRD와 Operator 먼저 간단하게 쿠버네티스에서 operator의 역할이 무엇인지 짚고 넘어가자. 아주 간단히 설명하자면 operator는 특정 리소스(오브젝..

공부/Kubernetes 2021.08.31

Kubernetes Audit (감사로그)

k8s에는 audit이라는 기능이 있다. 한국어로는 감사로그라고 한다. 오늘은 이 audit에 대해 써본다. 공식 문서는 아래 링크에서 확인할 수 있다. https://kubernetes.io/docs/tasks/debug-application-cluster/audit/ 1. Audit이란? k8s에서는 어떤 작업을 하든 반드시 kube-apiserver를 거쳐야한다. 그리고 이 kube-apiserver에 요청을 보낼 때는 HTTP API를 통해 이루어진다. audit이란 kube-apiserver를 오가는 API를 로깅하는 것이다. 기본적으로 auidt 로그는 event라는 객체의 구조로 아래와 같은 정보들을 담을 수 있다. 콜을 날린 클라이언트가 누구인지 언제 날렸는지 어떤 리소스에 대한 것인지 H..

공부/Kubernetes 2021.08.09