Kubernetes 141

Security Context

도커 컨테이너에 프로세스 실행 user와 capabilities를 설정할 수 있던 것과 같이 쿠버네티스에서도 동일한 부분을 설정할 수 있다. 쿠버네티스 컨테이너는 Pod에 캡슐화되어 있으므로 컨테이너 레벨, 또는 Pod 레벨에서 설정을 구성할 수 있다. Pod 레벨 Pod 내 모든 컨테이너에 설정을 적용한다. yaml 파일에서 securityContext 옵션을 사용하여 프로세스 실행 user를 지정할 수 있다. apiVersion: v1 kind: Pod metadata: name: web-pod spec: securityContext: runAsUser: 1000 containers: - name: ubuntu image: ubuntu command: ["sleep", "3600"] Container..

Secrets

configMap은 데이터를 일반 텍스트, 즉 평문으로 저장하기 때문에 암호를 저장하여 사용하기에는 적절하지 않다. 암호와 같은 민감정보를 저장해 사용할 때는 secret을 사용한다. Secret 암호나 키와 같은 중요한 정보를 저장할 때 사용한다. 해쉬 형식으로 인코딩 되어 저장된다는 것을 제외하면 configMap과 유사한다. configMap과 마찬가지로, 생성한 뒤 Pod에 주입되어 데이터를 전달한다. 생성 방법 명령형 방법으로 생성 명령어로 직접 키-값 쌍을 지정할 수 있다. 여러 키-값 쌍을 지정할 때에는 --from-literal 옵션을 여러 번 사용한다. 데이터가 많아져 복잡해지는 경우에는 파일로 데이터를 저장한 뒤, 해당 경로를 지정한다. kubectl create secret gener..

ConfigMaps

2021.07.08 - 환경 변수 설정에서는 포드 정의 파일에서 환경변수를 정의하는 방법을 알아보았다. 하지만 포드 정의 파일로 환경 변수를 정의하면 포드 정의 파일이 많아지면 환경변수를 관리하기가 어려워진다. 이런 어려움을 해결하기 위해 ConfigMap을 사용할 수 있다. ConfigMap 키-값 형태로 구성되며, Pod 생성 시 ConfigMap을 주입하여 Pod 컨테이너 내부에 호스팅 되는 애플리케이션의 환경 변수로 사용할 수 있도록 데이터 전달에 사용한다. 생성 방법 명령형 방법으로 생성 kubectl create configmap --from-literal== --from-literal== # –from-literal : 키 값 쌍 지정에 사용 kubectl create configmap --..

환경변수 설정

쿠버네티스는 다음과 같은 방법으로 환경변수를 설정할 수 있다. 1. ENV 속성 사용 yaml 파일에 ENV 속성을 사용하여 환경변수를 설정한다. apiVersion: v1 kind: Pod metadata: name: simple-webapp-color spec: containers: - name: simple-webapp-color image: simple-webapp-color ports: - containerPort: 8080 env: - name: APP_COLOR value: pink array이기 때문에 ENV 아래의 모든 항목은 array의 항목임을 나타내는 -로 시작한다. 각 항목은 name과 value 속성으로 구성되어 있으며, 각 속성이 의미하는 것은 다음과 같다. name : 컨테이..

Pod 실행 명령어와 매개변수 지정

2021.07.05 - 컨테이너 실행 시 매개변수 지정 위 글에서는 도커에서 컨테이너를 실행할 때 명령어로 또는 Dockerfile에서 실행 CMD나 매개변수를 지정하는 방법에 관해 적었다. 쿠버네티스에서도 비슷하게 Pod 생성 시 실행할 명령어와 매개변수를 지정할 수 있다. pod를 정의하는 yaml 파일에 command와 args를 추가하면 된다. apiVersion: v1 kind: Pod metadata: name: ubuntu-sleeper-pod spec: containers: - name: ubuntu-sleeper image: ubuntu-sleeper command: ["sleep"] # Entrypoint in Dockerfile args: ["10"] # CMD in Dockerfil..

Namespace

Namespace 동일한 물리 클러스터를 기반으로 하는 가상 클러스터 Default Namespace 클러스터를 처음 설정할 때 쿠버네티스에 의해 자동으로 생성된다. kube-system 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스 생성한 포드와 서비스를 사용자에게서 격리하여, 실수로 서비스를 삭제하거나 수정하지 않도록 한다. kube-public 인증되지 않은 사용자를 포함하여 모든 사용자가 읽기 권한으로 접근할 수 있는 자동 생성 네임스페이스 네임스페이스 내의 리소스는 이름으로 지칭할 수 있다. 다른 네임스페이스와 통신하기 위해서는 ..svc.cluster.local 형식의 DNS를 사용해야 한다. DNS에서 cluster.local은 쿠버네티스의 기본 도메인 이름이며, svc는 서비스의..

Deployments

Rolling Update 서버를 실제로 서비스할 때 서비스적인 장애와 배포에 있어서 부담감을 최소화하고, 서비스가 중단되지 않도록 배포하는 무중단 배포 방법 중 하나 새 버전을 배포하면서, 새 버전 인스턴스를 하나씩 늘려가고 기존 버전의 인스턴스를 하나식 줄여나가는 방식 새 버전의 인스턴스로 트래픽이 이전되기 전까지 이전 버전과 새 버전의 인스턴스가 동시에 존재할 수 있다는 단점이 있지만, 시스템을 무중단으로 업데이트할 수 있다. Deployment RC를 이용한 롤링 업데이트 과정을 자동화해주는 추상화 개념 Rolling Update를 이용하여 인스턴스를 업그레이드하고, 변경 내용을 실행 취소하며, 필요에 따라 변경을 일시 중지/재개하는 기능 제공 배포 정의 파일을 이용해 생성하며, 정의 파일의 내용..

ReplicaSet

Kubernetes Controller 쿠버네티스 개체를 모니터링하고, 적절하게 응답한다. Replication Controller 애플리케이션의 고가용성을 보장하기 위해 지정된 수의 포드를 클러스터 내에 실행할 수 있도록 한다. 단일 포드를 사용하더라도 기존 포드에 장애가 발생하는 경우 새 포드를 자동으로 동작시키기 위해 사용할 수 있다. 애플리케이션의 사용자가 증가하는 경우 부하를 공유할 여러 포드를 생성할 수 있다. 클러스터 내 여러 노드에 걸쳐 있다. ReplicaSet에 의해 대체된 기술이다. 생성 방법 정의 파일을 생성한 뒤 kubectl create 명령어로 생성한다. apiVersion: v1 kind: ReplicationController metadata: name: myapp-rc l..

쿠버네티스 정의 파일 - Yaml

쿠버네티스는 yaml 파일을 사용하여 개체를 생성할 수 있다. POD 정의 파일 apiVersion: v1 # string kind: Pod # string # dictionary metadata: # child of metadata name: myapp-pod labels: app: myapp type: front-end spec: containers: # list 여러 컨테이너를 띄울 수 있음 - name: nginx-container # - 는 리스트의 첫 번째 아이템임을 의미 image: nginx 최상위 필드 apiVersion 개체 생성에 사용하는 쿠버네티스 API 버전 생성하려는 개체에 따라 올바른 버전을 사용해야 한다. kind 생성하는 개체의 유형 (Pod, ReplicaSet, Depl..

Pod

Pod 컨테이너가 캡슐화되는 개체로, 애플리케이션 단일 인스턴스 쿠버네티스에서 생성할 수 있는 가장 작은 단위 애플리케이션 확장/축소를 위해 스케일 업/다운 시 pod를 추가 생성하고 삭제한다. 일반적으로 애플리케이션을 실행하는 컨테이너와 일대일 관계이다. Multi-Contianer Pods pod 내에는 다수의 컨테이너가 존재할 수 있다. 하지만 동일 컨테이너가 어려 개 존재할 수 없다. Multi-Contianer Pod 내 컨테이너는 동일한 네트워크 네임스페이스를 공유하기 때문에 서로 직접 통신할 수 있을 뿐만 아니라 스토리지 공간 공유도 용이하다. 참고 문서 https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/explore/explore-int..