💡 실습 목표 1. 버튼을 누를 시 LD1 -> LD2 -> LD3 순으로 LED 점멸을 ON / OFF 시킨다. 2. HAL_Delay 사용 없이 LED가 깜빡거리게 설정한다. 3. 실습한 내용을 바탕으로 구조체, 포인터, 함수를 활용해 코드를 작성한다. 💡 주요 함수 드라이버 파일명 : stm32f4xx_hal.gpio.c void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //외부 인터럽트 콜백 함수로써 버튼을 눌렀을 때 와 같은 외부 인터럽트 동작이 발생했을 때 해당 함수가 실행된다. void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) // 출력 모드(Output..
💡 요약 설명 General Purpose Input Output 란? MCU와 연결된 소자 간 데이터를 주고받기 위해 MCU에서 제공하는 기능을 의미 Input Mode와 Output Mode가 있다. 입력 모드(GPIO Input) MCU에 핀을 통해 연결된 전자 장치로부터 데이터를 받을 수 있게 하는 Mode 디지털 값을 입력받을 때에는 플로팅 현상(※ 아래에 설명)을 제거하기 위해 Pull-up 또는 Pull-down 회로를 사용하며 아날로그 값을 입력받을 때에는 GPIO 핀을 통해 있는 그대로의 아날로그 전압 값을 측정해야 하므로 Pull-up 및 Pull-down 회로를 사용하지 않는다. TTL 슈미트 트리거 라고 하는 소자를 사용한다. 출력 모드(GPIO Output) MCU에 핀을 통해 연..
두 오브젝트를 사용해야 하는 상황 개발환경에 A라는 서비스가 있고 이 서비스에는 일반접근과 보안접근을 지원하고 있다. 개발 환경에서는 보안접근을 해제할 수 있는 옵션이 있다. 보안접근을 한다면 접근 유저와 키를 세팅할 수도 있다. 사용환경으로 배포를 해야 한다면 다시 보안접속으로 설정을 해야하고 유저와 키값도 바꿔주어야 한다. 이 값들은 컨테이너 안에 있는 서비스 이미지에 들어있는 값이여서 이 내용을 바꾼다는 건 개발환경과 사용환경의 컨테이너 이미지를 각각 관리해야 겠다는 의미이다. 보통 환경에 따라 변하는 값들은 외부에서 결정을 할 수 있게 한다. 그걸 도와주기 위한게 이 두 오브젝트이다. 내가 분리해야되는 일반적인 상수들을 모아 ConfigMap을 만들고 Key와 같이 보안적인 관리가 필요한 것을 모..
1.DemonSet Node들이 있고 각각의 노드에 자원이 다르게 남아있는 상황에서 이전의 ReplicaSet의 경우 스케쥴러를 통하여 파드 배치를 하였다. 자원 상태에 상관 없이 모든 노드에 파드가 하나씩 생긴다는 특징이 있다. 이래야 하는 경우가 있다. (예 : Prometheus를 활용한 성능수집, fluentd를 활용한 로그수집을 통한 문제파악 clusterFs를 활용해 해당 자원을 가지고 네트워크 파일 시스템 구축 쿠버네티스 또한 네트워킹 관리를 하기 위해 각각의 노드에 프록시 역할을 하는 파드를 생성할떄 씀 2.Job, CronJob Pod를 만들때 직접, ReplicaSet을 통해, Job을 통해서 만드는 방법들이 있다. Pod들이 Node1에서 돌아갈때 Node1이 다운이 되었을때 컨트롤러..
현재 한 서비스가 운영중인데 이 서비스를 업데이트 하여야 되어 제 배포를 하여야 할때 도움을 주는 컨트롤러 1. ReCreate Deployment를 만들면 v1의 파드들이 만들어지는데 이 방식으로 업그레이드를 하면 파드들을 삭제시킨다. (서비스에 대한 중단 발생) v2에 대한 파드 2개를 만들어준다 2. Rolling Update 업그레이드를 실행 시 v2의 파드를 우선 하나 만들어줌 (자원사용량 증가) 하나씩 지우고 하나씩 늘리고 하는 방식이며 무중단이 되지 않는 장점이 있음 3. Blue/Green Controller을 만들어서 파드가 생성이 되면 파드에는 라벨이 있기 떄문에 서비스에 있는 샐랙터와 연결이 된다. 이렇게 운영이 되고 있는 상태에서 v2 버전에 대한 파드를 가지는 컨트롤러를 하나 더 ..
Status 하위 내용들 Phase : 파드의 전체 상태를 대표하는 속성 Conditions : 파드가 생성되면서 실행하는 단계와 상태를 알려줌 Containers 안 State : 각각의 컨테이너를 대표하는 상태 파드의 최초상태 : Pending initContainer : 본 컨테이너가 기동되기 전에 초기화 시켜야 하는 내용이 있을 경우 그 내용을 담는 컨테이너 만약 볼륨이나 보안세팅을 위해 사전 설정을 해야하는 경우 넣어 성공적으로 끝났거나 설정을 하지 않았을 경우 initialized : True 실패시 False 자원에 따라 스케쥴링 이 완료되면 PodScheduled : True 이 동안 Container 상태는 waiting Reason : Container Creating 만약 기동중에 문..
이 오브젝트를 왜 써야하나? Kubernetes Cluster라고 하여 전체 사용할 수 있는 자원이 있다. (일반적으로 메모리나 cpu) 클러스터 안에는 여러 namespace를 만들 수 있고 또 namespace 안에 여러 파드를 만들 수 있다. 각 파드는 필요한 자원을 클러스터 자원을 공유하여 사용 하는데 만약 한 namepace 안에 있는 파드가 클러스터 안에 있는 모든 자원을 모두 사용하면 다른 파드 입장에서는 더이상 쓸 자원이 없어 문제가 발생한다.. 이런 문제를 해결하기 위해 ResourceQuota 를 namespace 마다 달면 namespace마다 최대 한계를 설정할 수 있다. 그러하여 한계를 넘을 수 없어 다른 namespace에 있는 파드들에 영향을 끼치지 않게 된다. 한 파드가 자원..
1.ClusterIP 자신의 클러스터 Ip를 가지고 있다. 이 서비스를 파드에 연결시켜 놓으면 서비스의 ip를 통해서도 파드에 접근이 가능하다. pod에도 ip가 있는데 왜 서비스를 쓰는지? pod는 시스템 장애로 인해 죽을 수 있고 그러면 제 생성되고 변하게 되어 ip에 대한 신뢰성이 떨어짐 2.NodePort 쿠버네티스 cluster 에 연결되어 있는 모든 노드에게 포트가 할당이 되어 외부로 부터 어느 노드던 그 ip에 포트로 접속하면 서비스에 연결됨 서비스는 기본역할인 자신에게 연결되어 있는 파드의 트래픽을 전달 파드가 있는 노드에만 포트가 할당되는 것이 아닌 모든 노드에 포트가 만들어진 다는 것이 특징. 1번 노드의 ip로 접근을 하더라도 서비스는 2번 노드에 있는 파드에 트래픽을 전달 할 수 있..