IT/CKA

[CKA] 1차 시험 불합격.. 기억나는 대로 써보는 문제들. 2

고슴도치 엔지니어 2022. 3. 27. 01:00

7. Deployment Reconfigure 해서 현재 존재하는 Container와 Exposing 해서 Port 열어주기.

 

# 문제가 정확히 기억나지 않으므로  Deployment를 생성하고, 수정하고, 서비스와 연결하는 방법에 대해 서술하겠다.

 

# Deployment를 생성한다. 

$ vi run-my-nginx.yaml

apiVersion: apps/v1
kinde: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80

$ kubectl apply -f run-my-nginx.yaml

 

# Service를 생성 한다. 두가지 방법이 있다.

1) $ kubectl expose deployment/my-nginx

 # 위와 같이 명령어 한 줄로 실행하는 방법.

 

2) $ vi my-nginx-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    run: my-nginx

$ kubectl apply -f my-nginx-svc.yaml

 

$ kubectl exex my-nginx-3134321235-ejwr12 -- printenv | grep SERVICE

KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443

 

# 그런데 위와 같이 deployment를 먼저 생성하고(정확히는 replicaset을 먼저 생성) 서비스를 생성하면 Pod의 환경변수에 SERVICE에 대한 언급이 없다는 문제가 생긴다. 즉 서비스에 Pod가 연결되지 않는 문제가 있다. 이를 해결하기 위해 아래와 같이 진행한다.

 

$ kubectl scale deployment my-nginx --replicas=0

$ kubectl scale deploymnet my-nginx --replicas=2

$ kubectl exex my-nginx-3134321235-ejwr12 -- printenv | grep SERVICE

MY_NGINX_SERVICE_HOST=10.102.91.193
KUBERNETES_SERVICE_HOST=10.96.0.1
MY_NGINX_SERVICE_PORT=80
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443

 

# Deployment 를 수정하는 법

$ kubectl edit deployment my-nginx

 

8. NginX Ingress 만들면서 서비스에 Exposing 하기.

 

# 아래는 최소한의 인그레스 소스 예제 이다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
        - path: /testpath
          pathType: Prefix
          backend:
            service:
              name: test
              port:
                number: 80

# 인그레스 rule에는 선택적 호스트, 경로 목록, 백엔드가 필요하다.

# 예시에서, 선택적 호스트는 지정되어 있지 않기에, 모든 인바운드 HTTP 트래픽에 규칙이 적용된다.

# 예시에서, 경로 목록은 /testpath 로 지정되어 있으며 각각 service.name, service.port.name, service.port.number가 정의되어 있는 관련 백엔드를 가지고 있다.

# 예시에서, 백엔드는 서비스와 포트 이름의 조합이다. 호스트와 규칙 경로가 일치하는 인그레스에 대한 요청(예시에선 HTTP 요청)은 백엔드 목록으로 전송된다.

 

# 조금 더 복잡한 인그레스 예제를 보자.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-resource-backend
spec:
  defaultBackend:
    resource:
      apiGroup: k8s.example.com
      kind: StorageBucket
      name: static-assets
  rules:
    - http:
        paths:
          - path: /icons
            pathType: implementationSpecific
            backend:
              resource:
                apiGroup: k8s.example.com
                kind: StorageBucket
                name: icon-assets

Resource 백엔드는 Service 백엔드와 배타적이라 둘 다 지정 할 수 없다.

Resouce 백엔드의 일반적인 용도는 정적 데이터가 있는 오브젝트 스토리지 백엔드로 데이터를 수신 하는 용도이다.

 

위의 인그레스를 생성한 후 다음의 명령으로 확인할 수 있다.

 

$ kubectl describe ingress ingress-resource-backend

 

$ kubectl 

 

 

 

 

9. NotReady 상태인 노드가 얼마나 많은지 저장하기.

K8s 에서 각 노드에서는 kubelet이 실행되고 있다.

kubelet이 제대로 실행되지 않으면 노드가 NotReady 상태가 된다.

 

1) 

 

2) kubelet 복구하기. 

$ kubectl get nodes -o wide

$ sudo systemctl restart kubelet

# kubelet을 재시작하는 명령어가 먹히지 않으면.

 

 

10. 한 Pod안에 2가지 컨테이너 만들기.

 

11. Volume HostPath 설정하기.

 

12. PV와 PVC 생성해서 연결. edit? set? 으로 용량 바꾸기.

 

13. 로그 저장하기.

 

14. sidecar 패턴으로 로그에 연관된 컨테이너 띄우는 문제.

 

15. A Kubernetes worker node, named wk8s-node-0 is in state NotReady.

Investigate why this is the case, and perform any appropriate steps to bring the node to a Ready state, ensuring that any changes are made permanent.

 

16. From the pod label name=cpu-loader, find pods running high CPU workloads and write the name of the pod consuming most CPU to the file /opt/KUTR00401/KUTR00401.txt (which already exists).

'IT > CKA' 카테고리의 다른 글

[CKA] 1차 시험 불합격.. 기억나는 대로 써보는 문제들. 1  (1) 2022.03.06
[CKA] Mock Exam 3 풀이  (0) 2022.02.28
[CKA] Mock Exam 2 풀이  (0) 2022.02.23
[CKA] Mock Exam 1 풀이  (0) 2022.02.23