DevOps/Kubernetes
-
io.kubernetes.client.openapi.ApiException configmaps is forbiddenDevOps/Kubernetes 2024. 4. 8. 17:53
io.kubernetes.client.openapi.ApiException: Message: HTTP response code: 403 HTTP response body: { "kind":"Status", "apiVersion":"v1", "metadata":{}, "status":"Failure", "message":"configmaps is forbidden: User \"system:serviceaccount:default:default\" cannot list resource \"configmaps\" in API group \"\" in the namespace \"default\"", "reason":"Forbidden", "details":{"kind":"configmaps"}, "code"..
-
k8s service 에서 label 을 바꿀때의 다운타임?DevOps/Kubernetes 2022. 4. 25. 00:38
서비스에서 라벨을 바꿀 때의 다운타임Kubernetes에서 애플리케이션을 배포하고 운영하는 과정에서, 서비스의 라벨을 변경해야 하는 상황이 발생할 수 있다. 이러한 변경 과정에서 서비스의 가용성을 유지하는 것이 중요하다.새로운 Deployment 준비첫 번째 단계는 새로운 Deployment를 준비하는 것이다. 새로운 Deployment는 기존 Deployment와 동일한 역할을 수행하지만, 새로운 라벨을 가진다. 이를 통해 서비스 셀렉터가 변경될 때 새로운 Deployment로 트래픽을 라우팅할 수 있다.apiVersion: apps/v1kind: Deploymentmetadata: name: new-deploymentspec: replicas: 3 selector: matchLabels: ..
-
Deployment의 파드가 서비스의 대상이 되려면DevOps/Kubernetes 2022. 3. 30. 23:37
Kubernetes 환경에서 특정 파드를 서비스 대상으로 지정하려면, Service와 Pod 간의 라벨 셀렉터 설정이 정확히 일치해야 한다. 이를 통해 Service는 지정된 라벨을 가진 Pod로 트래픽을 라우팅할 수 있다.Service 정의 예제아래는 Kubernetes Service의 YAML 정의 예제이다. 이 Service는 특정 라벨을 가진 Pod를 대상으로 트래픽을 전달한다.apiVersion: v1kind: Servicemetadata: labels: app: test-app name: test-app namespace: defaultspec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: ..
-
clusterRole, clusterRoleBindingDevOps/Kubernetes 2021. 10. 29. 08:59
롤과 롤바인딩은 네임스페이스가 지정된 리소스로, 하나의 네임스페이스상에 상주하며 해당 네임스페이스의 리소스에 적용된다는 것을 의미한다. 일반 롤은 롤이 위치하고 있는 동일한 네임스페이스의 리소스에만 액세스할 수 있다. 다른 네임스페이스의 리소스에 누군가가 액세스 할 수 있게 하려면 해당 네임스페이스마다 롤과 롤바인딩을 만들어야 한다. 클러스터 수준 리소스에 액세스 권한을 부여하려면 클러스터롤바인딩과 클러스터롤을 사용해야 한다. 예를 들어 어떤 리소스들은 전혀 네임스페이스를 지정하지 않는데 노드, 퍼시스턴트 볼륨 등이 있다. 클러스터 롤은 네임스페이스가 지정되지 않은 리소스나 리소스가 아닌 URL에 액세스를 허용하는 클러스터 수준의 리소스로 각 네임스페이스에 동일한 롤을 재정의할 필요 없이 개별 네임스페이..
-
Kubernetes 인그레스 요청 흐름DevOps/Kubernetes 2021. 7. 19. 08:36
Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장 및 운영을 자동화하는 오픈소스 플랫폼이다. 그중 Kubernetes 인그레스 요청 흐름에 대해 알아보자. 인그레스는 클러스터 외부에서 내부 서비스로의 HTTP 및 HTTPS 경로를 제공하는 역할을 한다. 이를 통해 도메인 기반의 라우팅이 가능해진다. 1. 요청 시작사용자가 웹 브라우저나 애플리케이션을 통해 인그레스 주소로 URL을 요청한다. 예를 들어, http://myapp.example.com에 접근하는 경우를 가정해보자. 사용자가 입력한 URL 요청은 인터넷을 통해 Kubernetes 클러스터로 전달된다.2. 인그레스 컨트롤러요청은 먼저 Kubernetes 클러스터에 배포된 인그레스 컨트롤러로 전달된다. 인그레스 컨트롤러는 인그레스 리소스..
-
kubernetes Tutorials 4. 서비스를 사용해서 App을 공개하기DevOps/Kubernetes 2020. 5. 6. 02:29
지금까지 App은 컨테이너 안에서 돌며 굉장히 private 한 IP를 쓰고 네트워크 역시 isolated 된 상태였다. 따라서 밖에서 쉽게 접근할 수가 없었고 콘솔에다가 kubectl 프락시를 붙이고 그 프락시가 준 IP와 포트 뒤에다가 어떤 특정 API를 통해 POD이름을 주고 이를 통해 접속할 수 있었다. 학습목표 1. 쿠버네티스에서 말하는 서비스란? 2. 레이블과 레이블셀렉터 오브젝트들이 서비스와 어떻게 연관이 있는지 이해하기 3. 서비스를 사용해서 쿠버네티스 클러스터 밖으로 App을 노출시키기 Pods는 언젠가는 죽는다. Pods는 라이프사이클을 가진다고 한다. 어떤 워커 노드가 죽으면 그 노드에서 돌고있는 Pods 역시 사라지게 된다. 그렇게 되면 ReplicationController는 동적..
-
kubernetes Tutorials 3. Pods 와 NodesDevOps/Kubernetes 2020. 5. 1. 03:13
학습 목표 1. 쿠버네티스 Pods 가 무엇인지 2. 쿠버네티스 Nodes가 무엇인지 3. 배포한 App에 트러블 슈팅하는 방법 Kubernetes Pods 란? 앞 시간에 Deployment를 만들었고 쿠버네티스는 Pods를 만들어서 이 App 인스턴스를 호스팅 해주게 된다. 하나 또는 여러 App 컨테이너 그룹을 추상화 한 개념이 이 Pods이다. 도커 같은 컨테이너 뿐 아니라 그런 컨테이너들이 사용하는 리소스들 까지 통틀어서 Pods라는 개념이 되는 것이다. 리소스들에는 Shared storage, 볼륨, 네트워킹, Pods하나 당 IP address, 이미지 버전이나 컨테이너들이 사용하는 포트 등 이 있다. Pods는 App에 특화된 논리적인 호스트를 모델링한 것이다. 따라서 여러 다른 App 컨..
-
kubernetes Tutorials 2. kubectl을 사용해서 배포하기DevOps/Kubernetes 2020. 4. 27. 21:39
목표 : kubectl을 통해 App을 쿠버네티스에 배포해보자 쿠버네티스 배포 일단 동작하는 쿠버 네티스 클러스터가 있으면 컨테이너화 App을 그 위에다 배포할 수 있다. 그렇게 하려면 쿠버 네티스 배포 설정을 만들어야 한다. 배포 설정은 쿠버 네티스가 어떻게 그 App의 인스턴스들을 만들고 갱신해야 하는지를 알려주는 역할을 한다. 따라서 일단 Deployment를 만들면 쿠버네티스 마스터가 App의 인스턴스들을 각각의 노드에 스케쥴링을 하는 방식이다. App의 인스턴스가 만들어지면 쿠버네티스 Deployment 컨트롤러는 지속적으로 그 인스턴스를 모니터링한다. 만약 노 드가 다운되거나 삭제되면 컨트롤러가 다른 노드에다 배포하거나 하는 방식. 그렇게 함으로써 self-healing 방식을 제공 한다. 첫..