일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- devops #jenkins
- springboot
- 도커
- devops #engineer
- WEB
- httpd실행
- linux
- 컨테이너
- mongodb operator
- 파이썬
- k8s
- container
- multivm
- Strimzi
- ioredirection
- docker
- python
- variable
- Kubernetes
- nginx
- Vagrant
- bash
- RSS
- aws #engineer
- namespace
- 쿠버네티스
- DOIK
- java
- Engineer
- 초간단파이썬
- Today
- Total
목록Kubernetes (10)
샤인의 IT (막 적는) 메모장
Kafka? Kafka 란? : 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼 Kafka 주요 특징 처리량 : 묶음 단위 배치 처리로 실시간 로그 데이터 처리 확장성 : 브로커 Scale-in/Out 영속성 : 데이터를 메모리에 저장하지 않고 파일시스템에 저장함, 파일 I/O 성능 향상을 위해 메모리에 페이지 캐시 사용 고가용성 : 서버/브로커 장애 시 데이터 복제를 통한 지속적인 데이터 처리 가능 Kafka 아키텍처 정리 Zookeeper : 분산 처리된 메시지 큐 정보를 관리 Broker : Kafka 서버 Topic : 메시지가 생산되고 소비되는 주제 (각 메시지 별로 분류) Partition : Topic 내 분산되어 저장되는 데이터 단위 Offset..
네임스페이스 리소스 관리를 위한 ResourceQuota와 LimitRange에 대해 알아본다. ResourceQuota는 네임스페이스, LimitRange는 각 컨테이너에 대한 자원을 제한한다. ResourceQuota #ResourceQuota 오브젝트 apiVersion: v1 kind: ResourceQuota metadata: name: mem-cpu-demo spec: hard: requests.cpu: "1" #Request 정보 requests.memory: 1Gi limits.cpu: "2" # Limit 정보 limits.memory: 2Gi pods: "2" # 파드 수 제한 #리소스 쿼타 생성하고 해당 resourceQuota 리소스의 status를 확인하면 현재 사용 중인 정보를 ..
cgroupfs 말고 systemd Kubernetes에서는 cgroupfs 말고 systemd 드라이버 사용을 권장한다. 왜냐하면 kubelet이 daemon으로 올라가기 때문이다. systemd로 설정하기 위해 다음과 같은 작업을 수행하여야 한다. #kubeadm 설정 vi /etc/kubernetes/kubeadm-config.yaml ... kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 cgroupDriver: systemd ... #kubelet 설정 kubectl get cm -n kube-system | grep kubelet-config kubectl edit cm kubelet-config -n kube-syst..
Label Label은 Object에 첨부된 키와 값의 쌍이다. Object의 특성을 식별하는 사용하지만 시스템에 직접적인 의미는 없다. 유효한 Label값 63자 이하, 시작과 끝은 영숫자, '-', '_', '.' 사용 가능 ... metadata: name: my-pod labels: app: my-app spec: ... Annotation Annotation은 임의의 비-식별 메타데이터를 오브젝트에 첨부할 수 있다. 키와 값은 문자열이어야 하며 각각 기록할 수 있는 정보들은 다르게 사용할 수 있다. 예를 들어 빌드 정보, 릴리스 날짜, 타임스탬프, Git 정보, 디버깅 정보 등등.. 개발자가 추가할 수 도 있고 다른 오픈소스에서도 해당 어노테이션을 통하여 설정정보를 입력하기도 한다. (Annot..
Namespace는 클러스터 내에서 리소스 그룹을 격리하는 환경을 제공한다. 동일한 네임스페이스 내에서 리소스를 구별하기 위해서 Label을 사용함. 초기 클러스터 구성 시 생성되는 네임스페이스는 4가지 default - 다른 네임스페이스가 없는 오베직트를 위한 기본 네임스페이스 kube-system - 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스 kube-public - 모든 사용자가 읽기 권한으로 접근, 클러스터 중 읽을 수 있는 리소스를 위해 예약되어 있음 kube-node-lease - scale될 때 노드 하트비트의 성능을 향상시키는 노드와 관련된 lease 오브젝트 네임스페이스는 서비스를 생성할 때 DNS 엔트리가 생성된다. ..svc.cluster.local # Namespace..
오브젝트란 K8s 시스템에서 영속성(Persistent)를 가지는 오브젝트 K8s에서 클러스터 상태를 나타내기 위하여 오브젝트를 사용한다. 오브젝트를 통해 클러스터 상태를 나타내기 위하여 구체적으로 말하면 다음과 같음. 1. 어떤 컨테이너화 된 App이 동작 중인가? 2. 컨테이너화 된 App이 사용하는 리소스는 무엇인가? 3. 컨테이너화 된 App이 재구동 정책, 업그레이드, 내고장성 같은 것들을 어떻게 동작해야 하는가? 오브젝트를 생성, 수정, 삭제 등 이용하기 위해서 K8s API를 이용해야 함. 오브젝트는 크게 spec 과 status로 나눌 수 있는데 spec은 리소스의 원하는 특징에 대해서 설정하는 필드 status는 K8s 시스템 컴포넌트에 의해 제공되고 업데이트 된 현재 상태를 설명하는 필..
calico.yaml을 통해 대부분의 리소스가 배포되지만 VXLAN 설정을 위하여 해당 부분을 변경한다 DaemonSet 리소스 내 환경변수 변경 #Calico의 Default 모드는 IPIP이며 VXLAN으로 변경 vi calico.yaml #DaemonSet 오브젝트 내 env value 변경 DATASTORE_TYPE=kubernetes #IPIP -> VXLAN #Command 실행 부분 --bird-ready --bird-live 부분 삭제 CALICO_IPV4POOL_IPIP=Never CALICO_IPV4POOL_VXLAN=Always #레거시 및 RHEL 계열 설정 FELIX_IPTABLESBACKEND=NFT #프로메테우스 연동시 설정 FELIX_PROMETHEUSMETRICSENABLE..
해당 문제는 많은 문제에서 발생할 수 있지만 제가 운영하면서 발생한 문제는 이러했습니다. Node -> Clone -> 생성 문제는 이 생성된 노드가 Clone으로 복제되었을 경우인데 실제 해당 설정값이 똑같기 때문에 Kubernetes Cluster에서 해당 복제노드를 바라보게 되서 발생했습니다. IP도 다른데? 복제된 노드를 바라본다? 심지어 Subnet도 다른데? ???? 제가 처리한 방법은 해당 복제 노드에 설정된 Kubernetes와 관련된 정보들을 전부 백업으로 돌렸습니다. kubelet, docker 중지하고 kubernetes 설정정보, kubelet 설정정보 백업 돌리고.. 그러니 다시 원래 노드를 바라보게 되더라구요 #노드 IP를 확인했을 때 IP에 복제된 노드 IP로 되어 있음 kub..
쿠버네티스가 직접 관리하는 사용자 계정 인증방법으로는 기본 RootCA 인증서, Key를 통한 인증, TLS 인증, Bearer Token 지원 Bearer Token은 HTTP 헤더에 포함하여 인증하기 때문에 JWT(JSON Web Token)을 사용하는데 BASE64로 인코딩 되어 있음 (sa.key, sa.pub) 생각보다 오픈소스 배포할 때 굉장히 많이 사용하는데 SA 생성 -> Clusterrole 생성 -> Clusterrolebinding 연결 작업이 많다. #ServiceAccount 생성 kubectl create sa -n #ServiceAccount 확인 kubectl get sa -n #생성 후 yaml 확인 kubectl get sa default -n kube-system -oy..
기본 구조. Kubernetes에서 배포할 때 기본적으로 Deployment나 Statefulset을 이용하여 Pod를 배포한다 Pod는 하나의 컨테이너 뿐 아니라 내부에 복수 컨테이너를 집어넣어 배포할 수 있다. 예로들면 개발자가 App을 만들어 이미지로 만들고(Dockerfile) App이 올라가는 곳이 파드이다. 보통 Pod만 배포해서 사용하지 않고 그 Pod들을 관리하기 위해 Deployment나 Statefulset을 사용한다. Deployment = Stateless Pod 배포 리소스 Statefulset = Stateful Pod 배포 리소스 Stateless와 Stateful에 대해서 알아야하는데 해석 그대로 상태를 가지냐 안가지냐로 나뉜다. 나는 주로 데이터를 저장하느냐 안하느냐로 St..