쿠버네티스
-
K8S command와 argsK8S 2021. 6. 15. 19:11
Dockerfile의 CMD, ENTRYPOINT와 K8S의 command, args를 비교함으로써 yaml 파일에서 command와 args의 역할을 알아보자. Dockerfile의 CMD와 ENTRYPOINT에 대해서 잘 모른다면 다음을 참고 Dockerfile CMD vs ENTRYPOINT Dockerfile을 이용해서 ubnutu image를 빌드하고 컨테이너가 시작되자마자 sleep 5라는 커맨드를 실행하고 싶다. 이때는 dockerfile에서 CMD sleep 5 라고 지정해주면 컨테이너가 시작하자마자 sleep 5가 실행된 seungjuitmemo.tistory.com 위 도커파일을 통해서 만들어진 ubuntu-sleeper 이미지는 컨테이너가 실행되자 마자 sleep 5 커맨드가 실행된다..
-
K8S Multiple Scheduler 생성하기K8S 2021. 6. 14. 17:46
이번 포스팅은 쿠버네티스 클러스터 내에서 스케줄러를 하나 더 만들고 이를 사용해보는 실습을 한다. kubeadm으로 클러스터를 생성하면 /etc/kubernetes/manifest 경로에 있는 definition file들에 의해 static pod 형태로 생성된 포드를 볼 수 있다. (뒤에 -controlplane이 붙은 포드들이 static pod들이다) multiple scheduler를 만들기 위해 /etc/kubernetes/manifest 경로의 scheduler file을 사용한다. 참고로 생성할 스케줄러는 /etc/kubernetes/manifest 경로가 아닌 다른 경로에서 수정해주어야 한다. 이유는 다음을 참고 K8S Scheduling 정리2 (Resource, Daemonsets, ..
-
K8S Scheduling 정리2 (Resource, Daemonsets, Static pod)K8S 2021. 6. 13. 18:02
1. 리소스 관리 Docker container에서의 컨테이너 리소스 제한은 없다. 즉 계속 확장된다. 하지만 쿠버네티스에서 리소스 사용량을 제한하며 default resource request는 container당 0.5vcpu와 256Mi, default resource limit는 container당 1vcpu와 512Mi로 생성된다. 물론 default이므로 리소스 사용 제한을 다음과 같이 다르게 변경해 줄수도 있다. 2. Daemonsets 클러스터 각 노드에 포드를 하나씩 생성하는 오브젝트다. 대표적인 데몬셋으로 kube-proxy가 있다. 클러스터에 노드가 추가되면 데몬셋 포드 또한 추가되며 노드가 detach될 경우에도 마찬가지로 포드가 제거된다. 각 노드에 포드를 하나씩 생성하기 때문에 ..
-
K8S 아키텍처 정리 (Kube-scheduler, Kubelet, Kube-proxy)K8S 2021. 6. 2. 22:06
1. Kube-Scheduler 스케줄러는 어떤 포드가 어떤 노드로 갈지를 결정하는 등 스케줄을 짠다. 하지만 스케줄을 짤 뿐, 실제로 노드 위에 포드를 놓지는 않는다. (노드 위에 포드를 할당하는 것은 Kubelet의 역할) 스케줄러는 오직 포드를 어떤 노드로 옮길 것인지만 결정한다. 그렇다면 스케줄러는 어떻게 적당한 노드를 선택하고 포드를 옮길까? 스케줄러는 먼저 포드들을 관찰하면서 포드가 할당되기 좋은 최적의 노드를 결정한다. 예를 들어 다음과 같이 CPU 10을 필요로 하는 포드를 CPU 4, CPU 4, CPU 12, CPU 16를 리소스를 갖는 노드에 배포한다고 해보자. 이 때 다음과 같은 과정을 통해 최적의 노드를 결정한다. 1) Filter Nodes 해당 포드에 적합하지 않는 노드는 먼저..
-
K8S 아키텍처 정리(ETCD, Kube-api server, Kube-controller-manager)K8S 2021. 6. 1. 12:52
1. ETCD ETCD는 안전하고 빠른 distributed reliable key-value store로 다음과 같은 RDB를 생각하면 된다. ETCD는 기본적으로 2379번 포트를 이용하며 다음 커맨드를 통해 key value을 저장할 수 있다. ./etcdctl set key1 value1 ETCD에서 값 반환하기 ./etcdctl get key1 K8S에서 ETCD의 역할 kubectl command에서 얻을 수 있는 모든 정보는 마스터 노드의 ETCD 서버로부터 얻는다. 노드를 추가할 때, 포드를 배포할때, 레플리카 셋을 변경할때 등 상태가 변화할때 ETCD 서버에서 업데이트된다. K8S 배포형태는 2가지의 타입이 있는데 scratch를 이용한 배포와 kubeadm이 있다. scratch를 이용..
-
클라우드: 쿠버네티스 인그레스(Ingress) 실습하기(feat.minikube)K8S 2021. 5. 3. 16:57
이번 포스팅은 쿠버네티스의 Ingress obejct에 대해 다룬다. 이전에 다루었던 Nodeport service는 외부의 트래픽을 그냥 받아들였다면 이번에 사용해볼 Ingress는 외부의 트래픽을 어떻게 처리할 것인지 결정한다. 인그레스 오브젝트가 담당할 수 있는 기능은 크게 다음과 같은 것들이 있다. 1. 라우팅 2. 도메인처리 3. SSL/TLS 보안처리 그리고 이번 실습은 라우팅만 사용해보면서 인그레스에 대한 감을 익힌다. 참고로 필자는 미니큐브를 이용하여 인그레스를 사용하고 다음과 같은 구조로 nginx를 배포할 것이다. 구조에 대해 간략하게 설명하자면 클러스터에서 외부의 트래픽을 제일 처음으로 받는 서버는 인그레스 컨트롤러 서버이다. 그리고 우리는 인그레스 컨트롤러 서버에 원하는 인그레스 규..
-
클라우드: 쿠버네티스 네임스페이스(namespace) 실습하기K8S 2021. 3. 28. 03:01
네임스페이스는 리소스를 논리적으로 구분하는 역할을 한다. label과 유사하지만 더 폭넓은 용도로 사용가능하다는 점에서 차이가 있다. 1. namespace 확인하기 기본적으로 사용하는 namespace는 default namespace 기본적으로 생성되어 있는 kube-system namespace의 포드와 서비스를 다음과 같이 확인할 수 있다. (kube-system 네임스페이스는 쿠버네티스 클러스터 동작에 있어서 중요한 오브젝트이므로 건드리지 않는게 좋다) 2. 네임 스페이스 사용하기 다음과 같이 production이라는 이름으로 namespace yaml파일을 정의하고 적용해준다. 또는 다음과 같은 방법으로 namespace 생성가능하다. ku..
-
minikube: Failed kubeconfig update: Error reading file open .kube/config 에러 해결Trouble Shooting 2021. 3. 27. 02:00
처음에 cgroup문제인 줄 알고 삽질했다. suggestion으로 .kube/config의 권한과 소유권을 바꾸라고 해서 바꾸었지만, 잘 되지 않았다. 그런데 .kube 디렉토리를 보니 애초에 seung 사용자가 접근하지 못하게끔 되어 있는것을 확인했고, 다음과 같이 .kube의 권한과 소유권을 바꾸고, .kube/config 또한 다음과 같이 권한과 소유권을 바꾸어 주었다. 성공적으로 된다.