Devops/Kubernetes25 Kubernetes IBM - Sai Vennam '쿠버네티스란?' Kubernetes Master Cluster - API-Server Worker Node - kubelet - Container - Pod yaml kind: (Pod, Deployment, Service, ConfigMap, ReplicaSet) image: (Docker Hub, AWS ECR . . . PATH) labels: key: value ex) kind: Pod image: 2044smile/hello-node labels: a: f 사용자는 kubectl 명령을 이용하여 yaml(명세가 적힌 파일)을 생성하게 됩니다. kubectl -> API-Server -> Worker Node 안에 명세에 적힌 내용을 토대로 오브젝트를 생성합니다. nodeSelector를 이용하여 원하는 노드에 .. Devops/Kubernetes 2020. 5. 20. Kubernetes - Controller: Deployment Deployment 현재 한 서비스가 운영중이라고 가정하고, 기능 업데이트가 있어 배포를 해야할 때 도움을 주는 컨트롤러입니다. ReCreate v1 파드들을 삭제합니다. 서비스에 다운타임 발생 v2 파드들을 생성합니다. Rolling Update v2의 파드를 생성, v1의 한개의 파드를 삭제 반복 배포 중간에 추가적인 자원을 요구하지만 큰 장점은 다운타임이 없다는 것 입니다. Blue/Green ReplicaSet를 이용하여 새로운 컨트롤러를 만들어서 셀렉터로 연결 새로운 컨트롤러는 서비스에 연결하고, 기존의 컨트롤러를 제거 다운타임이 없습니다. 상당히 많이 사용하고, 단점은 자원이 더 필요하다는 것 입니다. Canary Canary라는 새에서 유래가 되었습니다. 실험체를 통해서 위험을 검증하고, 위.. Devops/Kubernetes 2020. 5. 20. Kubernetes - Controller: Auto Healing, Software Update, Auto Scaling, Job Auto Healing Node_1 안에 있는 Pod_1가 죽거나 Node_1이 죽게되는 경우 Controller가 모니터링하고 있다가 죽은 Pod_1을 정상작동하는 Node_2 안으로 옮겨준다. 정확히 말하면 리스타트되면서 정상작동하는 노드로 들어간다. ReplicationController(Deprecated) ReplicaSet Template Service와 Pod처럼 라벨과 셀렉터로 연결이 된다. 컨트롤러를 만들 때 Template으로 Pod를 명세합니다. Template를 Update하면 새로운 Pod가 생성되게 됩니다. Replicas replicas의 수 만큼 Pod가 생성됩니다. 개 수 만큼 Pod가 유지된다고 생각하면 됩니다. Selector ReplicationController의 S.. Devops/Kubernetes 2020. 5. 20. Kubernetes Django Tutorial (GKE) - 2 안녕하세요. 어제에 이어 Kubernetes 실습환경을 위해 GKE를 생성해보겠습니다. GKE란 AWS의 EKS와 비슷한 서비스입니다. 정확히는 관리형 Kubernetes 서비스입니다. Kubernetes의 모든 부분이 관리형으로 제공되는 것은 아니고 마스터 노드만 관리형으로 제공됩니다. 그 외에 로깅, 빌드, 권한 관리를 지원하며, 클러스터 노드들은 GCE(Google Compute Engine, EC2) 를 사용합니다. 1. Set up GKE 1-1. Create a GKE cluster gcloud container clusters create polls \ --scopes "https://www.googleapis.com/auth/userinfo.email","cloud-platform" \ -.. Devops/Kubernetes 2020. 5. 12. Kubernetes Django Tutorial (Cloud SQL, Storage) - 1 안녕하세요. AWS 프리티어가 끝나면서 Kubernetes를 돌릴만한 곳이 필요했고, Local에서 Virtual Box나 minikube를 설치하여 실습을 해보려고 하였으나 메모리부족으로 설치하지못하고, GCP에 Kubernetes 튜토리얼을 발견하여 GCP를 이용하여 Kubernetes를 배포해보겠습니다. 오늘은 구글의 Running Django on Google Kubernetes Engine를 참고하면서 Cloud SQL(RDS)와 Storage(S3) 연동까지 해보겠습니다. 최종으로는 GCP를 통해서 Kubernetes 배포까지 진행해보겠습니다. 해당 튜토리얼은 Django의 기초지식이 있다는 가정하에 진행되고 있습니다. Docker가 설치되어있어야 되며, Python 3.4 이상의 버전을 사용.. Devops/Kubernetes 2020. 5. 11. Kubernetes - Object:Namespace, ResourceQuota, LimitRange 개념 Kubernetes Cluster 안에는 한정 된 자원(CPU, Memory)이 있습니다. Cluster 내에서는 한정 된 자원으로 Pod의 용량을 할당하고 하는 작업이 이루어집니다. Cluster 안에서 사용할 수 있는 Memory는 4GB라고 예를들어 보겠습니다. 3개의 Namespace가 존재하고 안에 Pod들이 존재합니다. 한 개의 Namespace의 Pod에서 3GB라는 Memory를 잡고 있다면 다른 Namespace들을 속도가 느려지거나 여러 문제를 발생시킬 것 입니다. 이러한 문제를 예방하기 위해 ResourceQuota로 해당 네임스페이스가 가질 수 있는 자원을 관리할 수 있습니다. 3번 째 Namespace를 보면 Pod의 자원이 부족해 문제가 발생할 수 있지만 다른 Namespa.. Devops/Kubernetes 2020. 5. 11. Helm 이란 개념 Helm이란 쿠버네티스의 Package Managing Tool 입니다. 풀어서 말해보면 k8s의 리소스들을 관리하는 Managing Tool 입니다. 정말 간단하게는 리소스들의 사양부터 시작해서 정말 많은 것들을 관리할 수 있는 툴 입니다. ex) 만약 50개의 노드에 100개의 Pod의 RAM 사양이 1GB였는데 이것들을 2GB로 변경하고 싶다고 합니다. Helm을 사용하지 않는다면 엄청나게 어려운 작업이 됩니다. 일일이 Node와 Pod의 설정을 변경해줘야되니 말이죠. 이것들을 좀 더 편리하게 관리해주는 것이 Helm이라고 생각하면 될 거 같습니다. 설치 GCP k8s Master에 CLI로 접속하여 Helm을 설치하겠습니다. $ curl https://raw.githubusercontent... Devops/Kubernetes 2020. 5. 11. Kubernetes - Object:ConfigMap, Secret 설명 ConfigMap과 Secret을 사용해야되는 상황을 먼저 설명하겠습니다. 개발환경(Dev)과 상용환경(Production)이 있습니다. A라는 서비스에는 일반접근과 보안접근을 지원한다. 그래서 개발환경에서는 보안옵션을 해제할 수 있는 옵션이 있다. 보안접속을 하려면 User와 Key를 세팅할 수 있다. 환경에 따라 변하는 값들은 외부에서 결정하게 되는데 이럴 때 ConfigMap과 Secret을 사용합니다. 분리해야되는 일반적인 상수들을 모아서 ConfigMap을 만들고 Key와 같이 보안적인 부분들을 모아서 Secret을 만든다. Pod 생성 시에 ConfigMap과 Secret을 연결 할 수 있는데 컨테이너의 환경변수에 데이터들이 들어가게 된다. A Service의 입장에서는 환경변수를 읽어 .. Devops/Kubernetes 2020. 5. 8. Kubernetes 세미나 Kubernetes 세미나 쿠버네티스는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템입니다. Master라는 Node가 있고, ETCD(Key, Value) API Service(kubectl)로 통신을 할 수 있다. Worker Node들이 있고, Master는 Worker Node들에 있는 Pod들을 컨트롤 한다. 제일 왼쪽의 Worker 가 죽게되면 다른 Worker Node에 Application이 이동된다. 쿠버네티스 클러스터 생성 툴 - microK8s, minikube, kops(AWS에서 사용하기 편하다), Cluster API, KUBESPRAY, kind 쿠버네티스운영의 핵심 요소 - Deployment stateless 한 서버 배포 UID로 생성 .. Devops/Kubernetes 2020. 4. 29. Kubernetes - Object:Volume emptyDir 컨테이너들끼리 데이터를 공유하기 위해서 Volume을 생성합니다. 최초 Volume을 생성 할 때 공간이 비어져있기 때문에 emptyDir이라고 이름이 지어졌다. 만약에 컨테이너 1번이 Web역할을하고 2번에 Backend 단을 설정한다고하면 마운트를 해두면 두 서버가 자신의 로컬에 있는 파일처럼 사용을 할 수 있습니다. Pod 안에 생성이 되기 때문에 일시적으로 사용하기 위한 데이터만 넣는 것이 좋다. HostPath 이름대로 한 개의 호스트, 파드들이 올라가져 있는 Node의 Path를 볼륨으로 사용한다. Pod 들이 죽어도 Node의 데이터를 사라지지 않는다. 하지만 Pod-2가 죽어서 ReCreateion 될 때 다른 Node에 생성 될 수도 있다. 해결방법으로는 Node가 추가 .. Devops/Kubernetes 2020. 4. 27. Kubernetes - Object:Service Service 실습 Pod 가 죽고 다시 살아나면 IP가 변경된다. 그래서 Pod에 Service를 달아두고 Service IP로 접근하게 된다. Pod 생성 apiVersion: v1 kind: Pod metadata: name: pod-1 labels: app: pod spec: nodeSelector: kubernetes.io/hostname: k8s-node1 containers: - name: container image: kubetm/app ports: - containerPort: 8080 Service(Type, ClusterIP) 생성 apiVersion: v1 kind: Service metadata: name: svc-1 spec: selector: app: pod ports: - p.. Devops/Kubernetes 2020. 4. 27. Kubernetes - Object 쿠버네티스 Object 서버 한 대는 마스터, 또 다른 서버는 Node로 구성되어있다. 하나의 쿠버네티스 클러스터의 구성 마스터는 쿠버네티스의 전반적인 기능들을 컨트롤하는 것 노드들은 자원을 제공하는 것 클러스터 전체 자원을 늘리고 싶다면 노드들을 계속 추가하면된다. 클러스터안에 Namespace가 쿠버네티스 오브젝트들은 독립 된 공간으로 만들어준다. 네임스페이스에는 Pod들이 존재하고, Pod 들에게 외부로 부터 연결이 가능하게 해주는 Service(IP 할당)가 있어서 연결을 할 수 있다. 하지만 서로 다른 네임스페이스 간에는 연결 할 수 없다. Pod Pod 안에는 여러 컨테이너들이 존재한다 컨테이너는 한 개의 앱을 의미하므로 Pod는 여러 개의 앱을 들고 있다고 생각하면 됩니다. Pod 에 문제가.. Devops/Kubernetes 2020. 4. 27. 이전 1 2 3 다음 💲 추천 글