공부/Kubernetes 28

Kubernetes 사용을 편리하게 해주는 툴

k9s 원래는 일일히 kubectl 명령어 치는 것을, 한 번의 키입력으로 가능하게끔 해주는 툴 정말 편하다 설치 방법 K9S_VERSION=v0.26.7 curl -sL https://github.com/derailed/k9s/releases/download/${K9S_VERSION}/k9s_Linux_x86_64.tar.gz | sudo tar xfz - -C /usr/local/bin k9s 사용법 k9s kubectx 다루는 k8s 클러스터가 많을 때 컨텍스트 변경을 쉽게 해주는 툴 ~/.kube/config에 여러 클러스터를 기술하고, kubectx로 변경한다. 설치 방법 wget https://github.com/ahmetb/kubectx/releases/download/v0.9.4/kubec..

공부/Kubernetes 2023.02.20

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

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

Kubernetes Local PV

개념 rook-ceph 같은 모듈을 사용하지 않고, k8s 클러스터를 구성하는 노드들의 로컬 스토리지를 볼륨으로서 이용하는 방법이 있다. 바로 LocalPV이다. HostPath와 LocalPV를 헷갈릴 수 있는데, 둘의 가장 큰 차이점은 쿠버네티스 스케줄러가 PV가 어느 노드에 속한지를 알고있다는 것이다. HostPath의 경우에는 pod가 재기동 될 때, 다른 노드에 스케줄링이 될수 있기 때문에 정상 동작을 보장할 수 없다. 하지만 LocalPV는 쿠버네티스 스케줄러가 PV의 위치를 고려해서 pod의 스케줄링을 해준다. 역으로 생각하면 pod가 특정 노드에 뜨도록 강제할 수도 있다는 것이다. 물론 NodeSelector를 사용하는 방법도 있지만, statefulset 같이 pod를 개별적으로 설정하기..

공부/Kubernetes 2022.03.07

ingress nginx controller port(tcp) based routing

Ingress는 기본적으로 L7 레이어 즉, http기반의 라우팅을 해준다. 아래 yaml 예시 처럼 path 하나가 이미 특정 서비스의 "포트"까지 바인딩 되어있다. ... spec: rules: - http: paths: - path: /togomi/ backend: serviceName: my-service servicePort: 11037 ... 하지만 port를 직접 명시하길 원하는 경우가 있을 수도 있다. 나의 경우에는 redis-cli를 이용해 클러스터링을 하는데에 필요했다. 깊게 따져보면 redis-cli의 잘못이긴 하지만, 옵션으로 넘겨주는 호스트 형식이 반드시 {IP}:{PORT}여서 L7 라우팅으로는 할 수 없었다. 아무튼 port based routing을 해보자. TCP routi..

공부/Kubernetes 2022.02.24

k8s dockerhub imagePullSecrets 만들기 및 적용

아래와 같은 에러로 dockerhub에서 이미지를 받아오는데 실패하는 때가 있다. toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit dockerhub는 IP기반으로(정확하진 않음) pull limit을 제한 한다. 정책은 아래와 같다. 로그인하지 않거나 따로 결제를 하지 않은 계정은 6시간에 200회 제한이 있다. 어쨌든 지불한 계정이 있다고 가정하고, 로그인을 해보자. 단순하게 docker 자체만 이용하는거면 docker login 명령어를 통해서 하면 되지만, k8s의 ..

공부/Kubernetes 2022.02.08