본문 바로가기

공부기록/MLOps | Infra

(16)
[k8s] python sdk를 이용해 Pod 내에서 Kubernetes API 사용하기 방법1. config file 사용 config.load_incluster_config() v1 = client.CoreV1Api() pod내부가 아닌 경우엔 load_kube_config() 를 사용하지만 pod내부에서 config file을 로드할 때는 load_incluster_config() 를 사용한다. 방법 1을 사용해도 권한이 없어서 403 errors 가 발생할 수 있다. 이런 경우에 클러스터롤바인딩이 필요하다. 관련 내용은 kubernetes-client github에서 확인할 수 있다. 더보기 Shows how to load a Kubernetes config from within a cluster. This scriptmust be run within a pod. You can sta..
[kubeflow] kfp.dsl을 사용한 pod scheduling node에 기존에 있는 pod 옮기기 kubectl drain worker-1에 실행되고 있던 기존 잡들을 다른 노드로 옮기기위해 drain 명령을 실행합니다. drain 이 실행되면 cordon의 과정이 포함되므로 어떤 파드도 스케줄링되지 않습니다. 다른 node에 pod가 이동하는 것으로 보이지만 실제로는 기존 노드에서 실행되고 있던 파드들을 삭제한 후 다른 노드에서 재생성하는 과정이 진행됩니다. 이때, replica set에 있는 pod들은 다른 노드에서 살아나지만, 그렇지 않은 pod들은 복원되지 못한다는 것에 주의해야합니다. -ignore-daemonsets=true option을 설정하면 데몬세트로 실행한 파드들을 무시하고 드레인 설정을 적용할 수 있습니다. kubectl uncordon 원하..
[k8s] Backup and Restore Methods Backup and Restore Methods Backup Candidates Resource Configuration ETCD Cluster Persistent Volumes Backup - Resource Configuration Resource Configuration의 경우 declarative 한 방식을 사용하는게 configuration을 저장하기 위해 좋다. declarative한 방식을 사용했을 때, 가장 좋은 방식은 yaml을 git에 저장해 버전 관리를 하는 것이다. declarative 한 방식과 imperative한 방식을 모두 사용할 수 있으므로 resource configuration backup을 위한 최선의 방법은 query the API server이다. kubectl g..
[k8s] Cluster Upgrade Process Cluster Upgrade Process cluster upgrade kubernetes components들이 서로 다른 release version을 가질 수 있는데 나머지 components들은 kube-apiserver release verison 보다 클 수 없다. controller manager, scheduler는 kube-apiserver보다 1 version만 낮을 수 있다. kubelet이랑 kube-proxys는 2 version보다 낮을 수 있다. kubetl은 kube-apiserver보다 한 버전이 높거나 낮을 수 있다. 하위 버전을 지원한다는 특성 때문에 live upgrases가 가능하다. k8s는 기본적으로 최신버전 - 3 까지만 지원을 해준다. upgrades는 one..
[k8s] drain and cordon OS Upgrades : cluster의 노드를 유지보수(ex. Security path)를 위해 안정적으로 내리려면 어떻게 해야할까? node를 내리려고 할 때 5분안에 node를 살리면 pod가 실행되지만 5분이 지나면 pod는 terminated 된다. 이것은 kube-controller-manager에서 --pod-eviction-timeout=5m0s이 defalut 값이 5분으로 설정되어 있기 때문이다. pod eviction time이후 노드가 다시 생성되었을 때 replica set에 있는 pod들은 다른 노드에서 살아나지만, 그렇지 않은 pod들은 복원되지 못한다. 만약 노드가 다운되는 시간이 5분 이내일 것으로 예상되면 quick upgrade나 reboot가 가능하지만, 그렇지 않을 ..
[k8s] Multi Container PODs Multi Container PODs WEB Server와 LOG Agent를 함께 동작시켜야한다든지 여러개의 컨테이너를 한번에 실행시켜야하는 경우 Multi-Container Pods를 사용할 수 있다. Multi-Container PODs Design Pattern 파드로 여러 개의 컨테이너를 묶어서 구성하고 실행할 때 몇가지 패턴을 적용할 수 있다. Sidecar pattern 원래 사용하려던 기본 컨테이너의 기능을 확장하거나 강화하는 용도로 컨테이너를 추가하는 것 기본 컨테이너는 원래 목적의 기능에만 충실하도록 구성하고, 나머지 공통 부가 기능들은 사이드카 컨테이너를 추가해서 사용 ex. 웹서버 컨테이너 - 로그 수집 컨테이너(사이드카 역할) 로 설정하면 웹 서버 컨테이너를 다른 역할을 하는 컨테..
[k8s] Application Lifecycle Management Application Commands & Arguments docker image의 entrypoint의 argument는 spec.containers.args에 명시해준다. spec.containers.args는 Docker file의 CMD opiton을 overrride한다. Docker file의 ENTRYPOINT를 override하기 위해서는 spec.containers.commad를 사용한다. Configure Environment Variables in Applications 환경 변수를 설정하기 위해 pod-definition.yaml에서 spec.container.env property를 사용한다. 예시 apiVersion : v1 kind : Pod metadata : name : s..
[k8s] Rolling Updates and Rollbacks Rolling Updates and Rollbacks Deloyment Rollout and Versioning Deployment를 생성하면 rollout이 트리거되면서 새로운 버전의 deployment Revision1이 생성된다. 이후 컨테이너가 업데이트되면 새로운 rollout이 트리거되면서 새로운 버전의 deployment Revision2가 생성된다. 이것은 버전의 변화를 트랙하고, roll back 을 가능하게 한다. Rollout Command kubectl rollout status deployment/myapp-deployment - 히스토리 보기 kubectl rollout history deployment/myapp-deployment Deployment Strategy 1.Recr..

반응형