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 |