분류 전체보기 72

k8s client-go leader election 코드 메커니즘 분석

개념 leader election이란 말 그대로 리더를 선출하는 것으로, CS에서 자주 쓰이는 개념이다. kubernetes go client에서는 이러한 leader election 기능을 제공한다. 아래는 k8s go client가 사용하는 leader election 방식에 대한 간단한 그림이다. 특정 리소스(그림 상에서 Lock)에 대해서 소유권이 자신에게 있다고 작성하는 사람이 leader이다. 일단 leader가 되면 leader는 주기적으로(그림 상에서 leaseDuration) 자신이 아직도 리더임을 갱신한다.(그림 상에서 lastObservedTime) leader가 되지 못한 나머지는 주기적으로 그 리소스를 확인하다가, 한 주기가 지났는데도 리더가 갱신을 못했을 시 소유권이 자신에게 있..

공부/Kubernetes 2022.11.09

kubectl에서 user token 사용하기 (keycloak oidc)

kubectl에서 --token 옵션은 service account 토큰만 가능하다. 하지만 만약 k8s가 oidc 연동 중이라면 kubectl로 user token도 사용할 수 있다. 방법은 service account 토큰 사용법과는 조금 다르다. 1. kube-apiserver.yaml 확인 apiVersion: v1 kind: Pod metadata: ... spec: containers: - command: ... - --oidc-issuer-url=https://{KEYCLOAK 주소}/auth/realms/{REALM 이름} - --oidc-client-id=my-client - --oidc-username-claim=preferred_username - --oidc-username-pref..

공부/Kubernetes 2022.10.10

k8s client-go custom resource 생성(post 사용 시 주의점)

k8s client go에서 custom resource를 생성하기 위해서는 abspath()와 post()를 사용해야 한다. k8s client go도 내부적으로는 kube-apiserver에게 REST api 콜을 보내는 것이므로, kube-apiserver의 규칙에 따라야 한다. kongPlugin이라는 custom resource 생성 시 아래와 같이 하면 된다. kongPlugin := &KongPlugin{ TypeMeta: metav1.TypeMeta{// 1 APIVersion: "/", Kind: "KongPlugin", }, ObjectMeta: metav1.ObjectMeta{ Name: "kongplugin-sample", Namespace: "", }, ...}} body, err..

공부/Go 2022.09.15

kubernetes 환경에서 Postgres streaming replication 설정

이전 글에서 이어진다. https://togomi.tistory.com/76 kubernetes 환경에서 Postgres migration 백업 & 복원 들어가기에 앞서.. 이 글은 k8s 환경에서 postgres의 데이터를 migration 하는 방법입니다. 이하의 글은 수동으로 하는 방법이며, 쉘 스크립트를 이용해 자동으로 하고 싶다면 아래 github을 참고해주세 togomi.tistory.com 이전에는 파일을 통해 스냅샷 백업/복원이었다면, 이번에는 postgres의 streaming replication 기능을 이용한 실시간 sync이다. 1. 원본 postgres에서 replication 유저 생성 원본 postgres 내부로 접속 kubectl -n {네임스페이스} exec -it {POD..

공부/Kubernetes 2022.08.18

kubernetes 환경에서 Postgres migration 백업 & 복원

들어가기에 앞서.. 이 글은 k8s 환경에서 postgres의 데이터를 migration 하는 방법입니다. 이하의 글은 수동으로 하는 방법이며, 쉘 스크립트를 이용해 자동으로 하고 싶다면 아래 github을 참고해주세요. https://github.com/aldlfkahs/postgres-migration GitHub - aldlfkahs/postgres-migration: Automate postgres(timescaledb) backup & restore Automate postgres(timescaledb) backup & restore. Contribute to aldlfkahs/postgres-migration development by creating an account on GitHub. g..

공부/Kubernetes 2022.08.17

k8s kubelet forbidden sysctl: not whitelisted 에러 해결

kafkaconnect의 커널 파라미터 설정을 하는데 kubelet에 의해 다음과 같은 에러가 발생했다. forbidden sysctl: "net.ipv4.tcp_retries2" not whitelisted kubelet은 default로 몇몇 sysctl은 허용하지만, 위험한 sysctl은 막는다. 따라서 kubelet 설정에 해당 sysctl을 허용해주어야 한다. 1. Kubelet 설정 파일 위치 찾기 systemctl status kubelet 위 명령어를 치면 아래와같이 나온다 /var/lib/kubelet/config.yaml에 위치하는 것을 알 수 있다. 2. allowedUnsafeSysctls 추가 해당 파일을 연 후 아래와 같이 수정한다. apiVersion: kubelet.confi..

공부/Kubernetes 2022.07.18

Bash를 이용해 여러 파일의 내용을 치환하기

변수 명이 변경되거나 URL 주소가 바뀌는 등, 여러 파일에서 참조하는 값의 이름이 변경되는 경우가 있다. 보통 sed를 이용하면 바꿀 수 있지만 하위 디렉토리까지 재귀적으로는 할 수없다. 하지만 grep과 sed를 같이용하면 recursive하게 하위 디렉토리의 파일까지 내용을 바꿀 수 있다. grep -rl 기존문자열 . | xargs sed -i 's/기존문자열/수정후문자열/g' 이렇게 하면 해당 디렉토리부터 하위 디렉토리까지 모든 파일을 탐색하며 {기존문자열} → {수정후문자열}로 바꾼다. 만약 특정 확장자인 파일의 내용만 치환하고 싶으면 아래와 같이 --include 옵션을 쓰면된다. grep -rl 기존문자열 --include \*.go | xargs sed -i 's/기존문자열/수정후문자열/..

공부/Linux 2022.07.15

Go API server template + Dockerfile & yaml

예전에 만들어둔 Golang API 서버 템플릿을 공유한다. https://github.com/aldlfkahs/go-api-server-template GitHub - aldlfkahs/go-api-server-template Contribute to aldlfkahs/go-api-server-template development by creating an account on GitHub. github.com 간략한 코드 설명은 아래와 같다. func main() { mux := http.NewServeMux() mux.HandleFunc("/test", serveTest) mux.HandleFunc("/hello", serveHello) klog.Info("Starting Go test api ser..

공부/Go 2022.07.09