Kubernetes 25

[Kubernetes] Kubernetes Study: "기본 오브젝트 - Pod"

Prologue 본 포스트는 인프런 쿠버네티스 스터디 그룹에서 진행하는 스터디 자료의 일환으로 작성하였습니다. 기본적으론 [대세는 쿠버네티스] 강의를 보고 내용을 정리합니다. 그리고 제 경험이나 이해를 곁들여 포스트를 작성했습니다. 그동안 공식 문서나 블로그 포스트, CKA 강의 등 다양한 경로로 쿠버네티스를 익혀왔지만, 한국어로 잘 정리된 강좌를 한번 듣고 깔끔하게 다듬어보는 시간을 가지면 좋겠다는 생각이 들었습니다. 강의와는 조금 다를 수 있지만, 쿠버네티스 공식 문서를 보고 내용을 정리해보겠습니다. 이번 포스트에선 "기본 오브젝트 - Pod"를 다뤄봅니다. Kubernetes Object 공식 문서에 따르면 쿠버네티스 오브젝트는 쿠버네티스 시스템에서 영속성을 가지는 오브젝트이며, 쿠버네티스는 클러스..

IT/Kubernetes 2021.06.27

[Kubernetes] 깔끔하게 kubeadm reset 하기

Prologue 클러스터를 잘못 구축했을 때, 이거 저거 생각할 필요 없이 클러스터를 날려버리고 싶었습니다. 단순히 kubeadm을 이용해 배포하는 단계부터 다시 시작하고 싶었기 때문입니다. 예전에 찾아둔 방법인데, 이제야 공유합니다. kubeadm을 이용해 클러스터를 구축했을 때 사용할 수 있는 방법이니 참고해주세요! Docker Reset # Docker 초기화 $ docker rm -f `docker ps -aq` $ docker volume rm `docker volume ls -q` $ sudo umount /var/lib/docker/volumes $ sudo rm -rf /var/lib/docker/ $ sudo systemctl restart docker kubeadm Reset # kub..

IT/Kubernetes 2021.06.22

[Kubernetes] kubeadm을 이용해 Kubernetes 클러스터를 구축해보자

프롤로그 지난 포스트 "[containerd] containerd를 CRI 런타임으로 하는 Kubernetes 클러스터를 구축해보자" 에 이어서 이번엔 Kubernetes 클러스터를 구축해보겠습니다. 본 포스트에선 이미 CRI 런타임이 설치되어 있다고 가정하고 kubeadm을 이용해 클러스터를 구축합니다. 만약 CRI 런타임이 설치되어 있지 않다면, 위 포스트를 참고하여 CRI 런타임부터 설치해주세요! 추가로, 이 포스트는 개발 환경에서 사용하기 위해 간단하게 구축하는 방법을 소개합니다. 실제 프로덕션 환경에서 사용하셔서는 안 됩니다! 추가에 추가로, 가장 간단하게 로컬에 Kubernetes 클러스터를 구축하는 방법은 minikube를 사용하시거나 docker for mac 등을 사용하셔서 해당 프로그램..

IT/Kubernetes 2021.06.21

[containerd] containerd를 CRI 런타임으로 하는 Kubernetes 클러스터를 구축해보자

Prologue 사내에서 테스트 용도로 사용할 쿠버네티스 클러스터가 필요해서 급하게 VM을 만들고 구축을 하려던 참이었습니다. 이전에 올렸던 글에서 소개드린 것처럼, 1.20 릴리즈부터는 Docker가 Deprecated 되었다는 것이 생각나서, 이참에 containerd로 클러스터를 구축해보자는 생각이 들어 이렇게 진행하게 되었습니다. 본 포스트에서는 Ubuntu 18.04 위에서 containerd를 설치합니다. Kubernetes 클러스터 구축 과정은 별도의 포스트로 다룰 예정이니 참고해주세요! 그리 어렵지 않으니 쉽게 따라하실 수 있습니다. Kubernetes 클러스터 구축 과정을 다룬 포스트가 올라왔습니다. 여기를 참조해주세요! containerd 설치를 위한 사전 작업 우선 containerd..

IT/containerd 2021.06.19

[Kubernetes] Helm Chart 만들기

Prologue 일반적으로 Kubernetes Manifest 파일은 정적인 형태입니다. 따라서 데이터를 수정하기 위해선 파일 자체를 수정해야 합니다. 잘 관리를 한다면야 큰 어려움은 없겠지만, 문제는 CI/CD 등 자동화된 파이프라인을 구축해서 애플리케이션 라이프사이클을 관리할 때 발생합니다. 보통 애플리케이션 이미지를 새로 빌드하게 되면, 빌드 넘버가 변경됩니다. 이렇게 되면 새로운 이미지를 사용하기 위해 Kubernetes Manifest의 Image도 변경되어야 합니다. 하지만 Kubernetes Manifest를 살펴보면, 이를 변경하기 쉽지 않다는 것을 깨닫게 됩니다. Image Tag가 별도로 존재하지 않고 Image 이름에 붙어있기 때문입니다. 이를 자동화 파이프라인에서 변경하려면, sed..

IT/Kubernetes 2021.06.18

[Kubernetes] kubectx를 활용해서 멀티 클러스터를 관리하자

Prologue 사내에서 사용하던 클러스터가 1개라 그동안은 멀티 클러스터 관리에 그다지 관심을 두지 않았습니다. 하지만 개발용 클러스터와 실사용 클러스터를 분리하고 제 로컬에 있는 데스크탑 클러스터까지 사용하게 되다보니 이제는 멀티 클러스터 관리의 필요성을 절실히 느끼게 됐는데요. 로컬에서 작업을 할 때 빈번히 클러스터의 전환이 필요했고 더불어 네임스페이스의 전환도 필요했습니다. 매번 -n blahblahblah 를 타이핑하는 건 수고로운 일이니까요. 오늘 포스트에서는 kubectx를 이용한 클러스터 간 전환을 간편하게 만들어보는 작업을 해보겠습니다. kubectx kubectx는 클러스터 간의 전환을 쉽고 빠르게 할 수 있게 해주는 플러그인입니다. v0.9.0 이전까지는 bash를 이용해 구현되었고,..

IT/Kubernetes 2021.06.13

[DevOps] ArgoCD Best Practice

Prologue 최근 들어, 팀 내부의 CI/CD 파이프라인을 구축하기 위해 다양한 오픈 소스 툴을 살펴보고 있습니다. ArgoCD는 CD 쪽 파트를 담당하는 훌륭한 도구입니다. 하지만 이런 도구를 활용할 때 어떻게 하면 더 효율적으로 사용할 수 있는지는 좀 더 공부가 필요한 상황입니다. 특히 오늘 포스트에서 소개하는 내용이 그러한데요. 얼마전까지는 애플리케이션의 소스 코드 레포지토리에 ArgoCD가 이용할 매니페스트 파일도 함께 관리했습니다. 하지만, 경험적으로 알게 된 사실은, 이렇게 하게 되니 매니페스트 파일만 수정했을 뿐인데도 CI가 자동으로 발생하는 상황이 벌어졌습니다...🥲 이러한 상황을 막기 위해 ArgoCD 공식 문서에서도 매니페스트 파일과 소스 코드 레포지토리를 분리할 것을 권고하고 있는..

IT/DevOps 2021.06.12

[Kubernetes] Kubernetes 인증서가 만료되었을 때 해결 방법

Prologue 언제나처럼 kubectl 을 사용하려는데 다음과 같은 에러가 발생했습니다. '어이쿠 인증서 문제네...' 하면서 생각해보니, 이 클러스터를 구축해둔지 벌써 1년이라는 시간이 지났더군요. 갱신을 한 번은 해줬어야 했는데 깜빡하고 있던게 화근이었습니다. Unable to authenticate the request due to an error: x509: certificate has expired or is not yet valid 인증서 만료일 확인 $ cd /etc/kubernetes/pki $ openssl x509 -in apiserver.crt -noout -dates $ openssl x509 -in apiserver-kubelet-client.crt -noout -..

IT/Kubernetes 2021.06.07

[containerd] 인증서 등록에도 불구하고 private registry로부터 image pull이 안 될 경우

문제 상황 새로운 Private Registry (Harbor)를 구축하고 CA 인증서를 호스트에 등록 및 config.toml 파일까지 업데이트 해주었음에도 불구하고 Image Pull 작업을 요청하면 401 에러가 발생하였습니다. config.toml 파일을 어떻게 업데이트하여야 하는지는 추후 포스트에서 다루겠습니다. 임시 해결 방법 아래 명령어처럼 image를 가져올 때 --user USERID:PASSWORD 인자를 추가로 넘겨 주면, 정상적으로 이미지를 가져옵니다. 하지만 근본적인 해결책은 될 수 없으므로 해당 문제를 완전히 해결할 수 있는 방법을 찾으면 업데이트 하도록 하겠습니다. $ sudo ctr images pull --user USERID:PASSWORD IMAGE_PATH 마무리 여기..

IT/containerd 2021.05.26

[Kubernetes] Helm으로 Statefulset의 spec upgrade가 안 되는 경우

[Kubernetes] Helm으로 Statefulset의 spec upgrade가 안 되는 경우 Helm으로 배포한 패키지에 statefulset이 있으면, helm upgrade 명령을 사용했을 때 오류가 날 가능성이 있습니다. 특정 파드의 리소스 제한을 걸지 않아서, 배포 이후에 제한을 걸기 위해 values.yaml을 업데이트 하고 helm upgrade를 수행했는데, statefulset이 지원하지 않는 업데이트라는 에러를 뿜뿜하더군요. 분명 자원은 spec.template.containers.resources에 있으니까, 이걸 수정한다고 해서 statefulset이 업데이트 할 수 없다고 나오는 건 분명히 버그였습니다. 수소문 해보니 저와 같은 현상을 겪었던 분들이 많이들 계셨고, 찾아낸 해법..

IT/Kubernetes 2021.05.12