LFS458 관련 대비 실습 - 하나씩 해보자! 01. kubeadm 을 이용한 설치 및 세팅 02. kubernetes 클러스터 노드 확장 및 셋팅 03. 간단한 application 배포, yaml템플릿, 서비스 expose 해보기 04. deployment 의 CPU, Memory 제약 05. namespace 를 위한 resource limit 설정 06. 좀더 복잡한 deployment 배포해보기 07. 기본 Node 의 maintenance (유지보수) 08. API AND ACCESS 09. API 객체 10. Managing State with Deployments 11. Service Resource 12. Volumes and Data : ConfigMap 간단 테스트 13. PV 와 ..
# master node 2대를 추가해 H.A 구성을 해보자. [ 방법 ] 1. 트래픽을 받도록 load balancer로 배포한다. HAProxy는 배포가 쉬운편이다. start하여 현재 동작중인 master node를 확인한다. 2. k8smaster2,3번 노드에 kubernetes software를 설치한다. (이 과정은 기존 worker node를 이미지 떠서 만들면 더 편할 듯하다.) 3. k8smaster2번을 master node에 join 한다. 기존에 worker node 추가때 사용하던 kubeadm join 으로 부터 추가적으로 hash와 flag가 필요할 것이다. 4. k8smaster3번을 master node에 join 한다. 5. haproxy에 3개의 master를 사용하도..
Kubernetes 클러스터는 사용자의 유형으로 service accoount와 normal users 가 있지만 normal users는 외부 서비스에 의해 관리된다. normal users를 나타낼 개체가 없고, 또한 API 호출을 통해 추가할 수도 없다. 하지만 service account를 추가할 수 있다. RBAC을 사용하여 개발자 devJang을 위한 네임스페이스 내의 행동에 대한 접근을 테스트해 본다. # Authentication, Authorization - 두개의 테스트용 dev, prod namespace를 생성한다. # dev, prod의 두개 namespace를 생성한다. ps0107@k8smaster1:~$ kubectl create ns dev namespace/dev crea..
# Working with TLS # 마스터 노드와 보조 노드 모두에서 kubelet 을 보자 . # kube-apiserver 는 cerificates 과 authorization mode와 같은 보안 정보를 보여준다. # kubelet 은 systemd 서비스이므로 아래와 같이 상태를 볼수 있다. # 아래 CGroup 정보에 보면 설정 파일들이 어디에 있는지 알수 있다. ps0107@k8smaster1:~$ systemctl status kubelet.service ● kubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: e..
# helm 1. 복잡한 어플리케이션들을 배포할때 사용하며, yum 이나 apt와 비슷하게 쿠버네티스 안의 package manager 역할을 한다. 2. chart template을 통해서 kubenetes application 을 패키징한다. 3. helm은 chart의 install을 요청하는 client 이다. 4. chart에 따라서 Tiller(서버) 가 cluster resource들을 생성한다. # helm과 Tiller helm은 로컬에 설치한 client를 말하고 Tiller는 쿠버네티스 클러스터 안에서 실행 중인 서버이다. # Helm 과 Charts helm 을 사용하면 복잡한 구성을 쉽게 구현할 수 있다. multi-part 애플리케이션을 한 번에 deployment 할 수 있다...
# Custom Resource Definition 생성 # CRD 생성을 위한 yaml 파일 작성 ps0107@k8smaster1:~$ vi crd.yaml apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: crontabs.ps.example.com spec: scope: Cluster group: ps.example.com version: v1 names: kind: CronTab plural: crontabs singular: crontab shortNames: - ct # CRD 생성 ps0107@k8smaster1:~$ kubectl create -f crd.yaml customresour..
# 사용자 정의 리소스 (Custom Resources) 1. 변화하는 요구에 유연하게 대응 2. 고유한 API 개체 생성 3. kubectl틀을 통해 API 개체 관리 4. 사용자 정의 리소스 정의(CRD) 5. 집계 APIs(AA) # 사용자 정의 리소스 정의 (Custom Resource Definitions) 1. 특징 - deploy가 쉬움 - 일반적으로 프로그래밍을 요구하지 않음 - 다른 API server를 요구하지 않음 - Namespaced or cluster 전체에서 쓸지 scope 결정할 수 있다. 2. 설정 예시 - Configuration apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition # => kub..
heapster가 deprecation 되면서 Metrics Server 와 통합되어 개발되고 배포되어지고 있다. 그리고 CNCF의 프로젝트중 프로메테우스도 잘 사용되어지고 있다. # Metrics 설정 # --------------------------------- # Metrics 설정 # --------------------------------- # git에서 metrics-server 받아옴. ps0107@k8smaster1:~$ git clone https://github.com/kubernetes-incubator/metrics-server.git # metrics-server 설치 ps0107@k8smaster1:~$ kubectl create -f metrics-server/deploy/..
# 로그 파일들의 위치 알아보기 다양한 로그 파일과 명령 출력 이외에도 journalctl을 사용하여 노드 관점에서 로그를 볼 수 있다. 우리는 로그 파일의 공통적인 위치를 보고, 컨테이너 로그를 보는 명령을 볼 것이다. 다른 컨테이너의 로그를 pod에 적재하는데 전용으로 사용되는 sidecar container의 사용과 같은 다른 로깅 옵션이 있다. Kubernet에서 전체 클러스터 로깅을 아직 사용할 수 없다. 따라서 kubernetes 같이 CNCF 프로젝트 다른 멤버인 fluentd 같은 외부 software를 사용된다. 다음의 로그 파일과 웹 사이트를 간단히 살펴보십시오. 서버 프로세스가 노드 수준에서 컨테이너안에 실행으로 이동함에 따라 로깅도 이동한다. 1. journalctl 명령 사용 (k..
# 로깅과 트러블슈팅 (logging and troubleshooting) 1. shell을 통한 Linux troubleshooting 2. 기본 monitoring 활성화 3. Set up cluster-wide logging 4. 외부 제품들 이용 (Fluentd, prometheus) 5. 내부 Metrics Server and API # 트러블슈팅을 위한 기본 단계 1. 가장 먼저 Error 라인을 확인 2. Pod 상태와 Pod 로그 확인 - kubectl get pod - kubectl describe (하단에 이유를 리턴해 주는 경우도 있기 때문에) - kubectl logs pod 3. Pod DNS 와 network 확인 - core dns 동작 이상여부, 네트워크 체크 - 만약 cal..