2023-10-23 11:29:39
728x90
728x90

Ingress는 클러스터 외부에서 클러스터 내부 서비스로 HTTP와 HTTPS 경로를 노출한다. 트래픽 라우팅은 인그레스 리소스에 정의된 규칙에 의해 컨트롤된다.

 

Ingress

vi ingress.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - http:
        paths:
        - path: /pic ip address 뒤에 pic을 붙이면 svc1의 service로 이동
          pathType: Prefix https://kubernetes.io/docs/concepts/services-networking/ingress/
          backend:
            service:
              name: svc1
              port: 
                number: 80
        - path: /avi ip address 뒤에 avi를 붙이면 svc2의 service로 이동
          pathType: Prefix
          backend:
            service:
              name: svc2
              port:
                number: 80
k apply -f ingress.yml -n ingress-nginx namespace를 ingress-nginx로 꼭 지정해줘야함
k create deployment nginx1 --image nginx --replicas 1 --namespace ingress-nginx
k create deployment nginx2 --image nginx --replicas 1 --namespace ingress-nginx
k expose deploy nginx1 --name svc1 --port 80 --namespace ingress-nginx
k expose deploy nginx2 --name svc2 --port 80 --namespace ingress-nginx
k get deploy,rs,pod,svc -n ingress-nginx
vi index.html
k cp index.html nginx1-6d7876f5d4-b9lnx:/usr/share/nginx/html/index.html -n ingress-nginx
k delete deploy nginx1 nginx2 -n ingress-nginx
k delete svc svc1 svc2 -n ingress-nginx
k delete -f deploy.yaml

-----------------------------------------------------------------------------------------------------------

Autoscaling:

쿠버네티스와 같은 컨테이너 오케스트레이션 툴은 시스템 사용량에 따라 동적으로 컨테이너의 숫자를 조절하는데, 이 기능을 오토스케일링이라 한다. 따라서 오토스케일링 기능이 시스템 사용량을 잘 반영하지 못한다면 자원 부족으로 인해 사용자의 요청에 응답이 늦어지며, 심할 경우 SLA 위반으로 이어질 수 있다.

 

쿠버네티스에서 오토스케일링은 크게 HPA, VPA가 있다.

  • HPA(Horizontal Pod Autoscaler) : 클러스터의 Pod 수를 조절하여 자원 할당량을 조절하는 방법
  • VPA(Vertical Pod Autoscaler) : 기존 Pod에 CPU나 메모리를 재할당하여 자원 할당량을 조절하는 방법이다. 자원 재 할당시 시스템을 재시작해야 하는 단점이 있다.

HPA가 수평확장(Scale out) VPA가 수직확장(Scale up)

HPA를 더 많이 사용함


AutoScaling:Metrics Server

wget https://github.com/kubernetes-sigs//metrics-server/releases/latest/download/components.yaml
vi components.yaml
140         - --kubelet-insecure-tls kubelet은 tls를 사용하지 않겠다 라는 의미
k apply -f components.yaml
k edit deploy -n kube-system metrics-server
k top nodes
-----------------------------------------------------------------------------------------------------------
AutoScaling:HPA
core 1 =1000
https://virtualtech.tistory.com/567

vi scaledep-apache.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: scaledep-apache
spec:
  selector:
    matchLabels:
      tem: apache
  replicas: 1
  template:
    metadata:
      labels:
        tem: apache
    spec:
      containers:
      - name: a1
        image: registry.k8s.io/hpa-example
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 300m
          requests:
            cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
  name: svc-apache
  labels:
    run: svc-apache
spec:
  ports:
  - port: 80
  selector:
    tem: apache

k get deploy,svc,rs,pod
k autoscale deploy scaledep-apache --cpu-percent=70 --min=1 --max=7 cpu의 사용율을 70%로하고 서버의 개수는 1개~7개
k get hpa
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://svc-apache/; done"  cpu 부하를 일으키는 pod 생성하는 명령어

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

network

weave가 bridge역활
vxlan vlan의 확장,개수는 vlan의 제곱
weave는 routing을 하지않고 vxlan이 터널링을해서 통신이 가능한 구조

vi centnode.yml

apiVersion: v1
kind: Pod
metadata:
  name: no1-al:
spec:
  containers:
  - name: a1
    image: alpine
    command: ["/bin/sh", "-c", "while true; do sleep 1000; done"]
    imagePullPolicy: IfNotPresent
  nodeName: node1
---
apiVersion: v1
kind: Pod
metadata:
  name: no2-al
spec:
  containers:
  - name: a2
    image: alpine
    command: ["/bin/sh", "-c", "while true; do sleep 1000; done"]
    imagePullPolicy: IfNotPresent
  nodeName: node2

k apply -f centnode.yml
kubectl get pod -o wide
kubectl exec -it no1-al -- sh
ip a

728x90