K8S
-
Helm3 Chart 생성 및 배포 정리 (feat. Github)K8S 2021. 7. 21. 16:00
이번 포스팅은 다음 과정을 다룬다 . helm3를 이용하여 차트 생성 생성한 차트를 github 레포지토리에 등록하기 github 레포지토리를 이용하여 helm에 추가하고 클러스터에 배포하기 1. chart 생성하기 mkdir ~/charts && cd ~/charts helm create my-chart cd my-chart Chart.yaml: 차트에 대한 이름, 버전, 설명등이 정의되어 있다. charts/ : chart 압축 파일들이 존재하는 디렉토리로 chart에서 사용하는 종속 chart들이 압축파일(tgz)으로 존재. helm dep up 명령 수행시 requirements.yaml을 참조하여 repository에서 다운 받아 생성 templates/: manifest파일들이 들어있는 디렉토..
-
NFS 구축 및 pv, pvc 생성과 K8S MySQL Statefulset 마운트K8S 2021. 7. 15. 00:17
이번 포스팅은 NFS 서버를 구축한 후, 이를 persistent volume으로 사용하여 mysql statefulset으로 배포하는 작업을 한다. mysql 컨테이너에서 마운트된 디렉토리에 대한 접근 권한 문제 때문에 삽집을 해서 이 부분에 대해서만 자세히 다룬다. chown: changing ownership of '/var/lib/mysql/': read-only file system (처음에 mysql 컨테이너에서 나는 문제인줄 알았는데 NFS 권한 설정 때문에 발생했던 문제였다.) NFS 서버는 EC2 우분투 18.04를 기준으로 하였고, NFS 서버의 /data/mysql 디렉토리를 마운트하여 사용할 것이다. 1. NFS 서버 구축하기 먼저 마운트할 디렉토리를 만들어준다. mkdir -p /..
-
Istioctl를 이용한 istio 설치K8S 2021. 7. 11. 02:02
istio를 설치하기 위해 Kubeadm으로 클러스터를 구성한 상태로 현재 경로는 $HOME이다. 1. 다운로드 istio 공식 홈페이지에서 최신 버전을 다운 받는다. curl -L https://istio.io/downloadIstio | sh - 2. 환경 변수 path 설정 bashrc에서 환경 변수를 설정하자. vi .bashrc 현재 이스티오 버전으로 경로 설정 export PATH=$HOME/istio-1.10.2/bin:$PATH source .bashrc 3. istio 설치하기 istiod와 ingress gateway만 있는 default profile을 다운받아 보자. istioctl install
-
K8S Nginx-controller를 이용한 Ingress 구성 정리K8S 2021. 7. 9. 10:38
인그레스 컨트롤러에는 다양한 종류가 있다. GCE(구글 http load balancer) nginx, contour, haproxy, traefik, istio등이 있다. 여기서 GCE와 nginx는 쿠버네티스 프로젝트에 의해 유지보수된다. 이번 포스팅은 nginx controller를 이용한 ingress 구성을 알아본다. Ingress를 구현하기 위해서는 다음과 같은 것들이 필요하다. 1. Nginx-ingress-controller 2. Configmap nginx의 원하는 기능(error-log-path, keep-alive, ssl-protocols등)을 추가할 때는 configmap을 이용하여 image와 별도로 추가한다. 하지만 다음처럼 아무것도 없어도 상관없으며 이는 나중에 configu..
-
K8S: Service Networking 정리K8S 2021. 7. 7. 17:08
각 노드의 kube-proxy는 kube-api 서버를 통해 클러스터의 변화를 감지한다. service object 생성 요청이 들어오면 api server를 통해 kube-proxy는 이를 감지하고 행동에 들어간다. 그렇다면 서비스는 어떻게 원리로 생성되는 걸까? 우선 서비스는 클러스터 내에 존재하는 어떤 것이 아니다. (어떠한 프로세스, 네임스페이스, 인터페이스가 있는 것이 아니다 ) 즉 가상의 어떤 것이다. 예를 들어보자. 다음과 같은 포드와 서비스가 생성되어 있을 때, 이 서비스는 어떻게 서비스로 들어온 트래픽을 포드로 전달할까? 서비스가 정의 될 때 이미 정의된 range 안에서 서비스의 IP를 할당된다. IP range는 kube-api server에 등록된 --s..
-
K8S Pod Networking과 Weave CNI 정리K8S 2021. 7. 7. 00:24
클러스터 내에서 Pod간의 네트워킹은 다음을 만족해야 한다. - 모든 포드는 ip 주소를 가져야 한다. - 같은 노드의 포드끼리 통신가능해야한다. - 모든 포드는 NAT없이 다른 노드의 포드들과 통신 가능해야 한다. 위 조건을 만족하기 위해서는 다음과 같은 네트워크 구성을 따라야 한다. 1. 같은 노드의 포드간 통신 1) 포드를 연결할 브릿지 만들어 준다. 2) 각 포드에 ip 할당한다. 3) 브릿지와 각 포드의 인터페이스를 연결한다. 같은 노드의 포드간 통신은 브릿지를 통해 이루어진다. 2. 다른 노드 간의 포드 통신 각 노드의 라우팅 규칙에 게이트웨이 경로를 추가한다. 또는 노드를 연결하는 라우터를 두어서 라우팅 규칙을 추가한다. 게이트 웨이 경로를 추가함으로써 다른..
-
K8S ArgoCD 설치 (feat. Helm3)K8S 2021. 6. 25. 15:26
Helm3 설치 curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh chmod 700 get_helm.sh ./get_helm.sh Helm 레포지토리에 argocd 추가 helm repo add argo https://argoproj.github.io/argo-helm Repository update helm repo update argo repository 목록 확인 helm search repo argo argo cd 설치 helm install repo argo/argo-cd 권장사항은 포트 포워딩이지만 필자는 Nodeport로 edit해서 사용한다. kubectl edit svc repo-..
-
Istio Circuit breaking 정리K8S 2021. 6. 25. 11:03
이번 포스팅은 이스티오의 circuit breaking에 대해 다룬다. 마이크로 서비스 아키텍처에서 가장 일반적인 문제는 cascading failure다. 어떤 이유로든 서비스가 응답하지 않는 경우, 서비스에 요청을 반복적으로 보내면 대기시간이 길어지고 서비스에 불필요한 부하가 발생한다. 한 서비스의 부하는 다른 서비스의 부하로 이어지는데 이런 현상을 cascading failure라 한다. 이때 circuit breaking을 통해 과부하된 서비스의 연결을 끊고 서비스가 회복할 시간을 줄 수 있다. 예시를 통해 확인해보자. 다음은 fleet-staff-service에서 risky와 safe으로 트래픽을 보내는 경우다. safe의 경우 200 응답이 오지만, risky는 종종 5xx에러의 응답이 온다...