외부 파트너 및 고객 엔지니어 대상으로 작성한 Kube 교육 용도 실습 과제 리스트를 정리하였습니다.
교육은 실습 위주입니다. 담당자가 자기 PC 화면을 공유하면서 실습 내역을 직접 시연하고 다른 분들이 Q&A하는 방식으로 진행합니다. 강사 혼자서 강의 & 실습하는 것은 한가지 경우만을 따라하기 혹은 외우려고 하여 효과가 크지 않아 변경하였습니다.
실제 자기가 발표 시연을 해야 하므로 싫어하는 분들이 많이 있어 진행하기가 쉽지 않을 것 같습니다. (지난 교육처럼 스타벅스 쿠폰을 남발하면서 최대한 참여를 이끌어 내려고 합니다.) 그리고 Kube 자체가 생소하고 경험이 없는 분들이 교육을 받는 거라 더 어려울 것 같구요. 하지만 문제를 해결하는 과정 자체가 의미 있다고 생각하여 과제 리스트만 나열 하였습니다. 물론 중간중간 제가 실습을 하면서 도움을 드릴 것 입니다.
아래 내용을 타 회사의 경우 내부 Kube 교육 용도 혹은 면접 시 질문 용도로 사용하실 수 있을 것 같습니다.
아래 교육 아젠다로 기업 방문 온사이트 (혹은 온라인) Kubernetes Training 서비스가 필요하시면 언제든지 연락 부탁 드립니다.
kuberenetes 교육/구축/기술 지원 및 Diamanti 기술 문의: leejunghoon@spkr.co.kr
Kube Cluster 설치
- kubespray 이용하여 단일 노드 혹은 3개의 노드에 Kube cluster 설치해 보세요. crio for container run time, audit log enable 설정 조건 입니다. (또는 k3s, kind(kubernetes in docker) 사용 가능합니다.)
- Window 기준 VSCode, WSL(Window Subsystem Linux), Window Terminal 사용해 보세요. (MAC VSCode)
- kubectl tool(Linux or Mac version)을 개인 PC에 설치하세요.
- 해당 Cluster를 원격 PC에서 제어 가능 하도록 PC $HOME/.kube/config 파일에 원격 Cluster Config 정보를 등록 합니다. 추가 후 원격 Cluster에 kubectl get nodes 명령어를 수행 합니다. (향후 복수의 cluster 관리 시 용이 합니다.)
Kube Tool 활용
- Kubectl 관련 자동 완성 및 Alias를 설정하세요. (예: kubectl for k, k get pod -o wide for kgp 등)
- Kubectl 관련 plug-in 설치를 도와주는 kubectl krew tool 설치하세요.
- 네임 스페이스(kubens) 및 Kube Cluster(kubectx) 변경 툴을 사용해 보세요.
- 현재 실행 중인 Cluster 이름 및 네임스페이스를 Bash PS(Prompt Status)에 출력하는 툴(kube ps)을 사용해 보세요. Kube 네임 스페이스를 변경하여 Bash Prompt를 확인 합니다.
- 단일 네임스페이스 내 여러 개의 POD 로그를 동시에 확인하는 Tool(kube tail)을 설치하세요.
- YAML Export 시 사용이 편리한 Kube neat Tool을 설치하세요.
POD
- 명령어를 사용하여 NGINX Deployment(이하 deploy) POD를 생성하세요.
- 현재 실행 중인 POD 리스트를 나열하세요.
- Default와 kube-system 네임 스페이스의 POD 리스트를 나열하세요.
- Kube Control Plane에서 사용하는 POD의 기능에 대하여 간단히 설명해 보세요.
- 전체 네임 스페이스의 파드 리스트를 확인해 보세요.
- POD의 개수를 10개, 0개, 1개 등으로 변경해 보세요.
- POD에 접속(sh 또는 bash 실행)하여 df, ps aux 등의 명령어를 실행해 보세요. 일반 VM과 어떤 차이가 있나요?
YAML Code
- 명령어를 이용하여 Busybox Deploy를 생성하세요.
- YAML 파일(kube manifest)을 이용하여 busybox deploy를 생성하세요. Deploy YAML 내 “command” 옵션을 이용 합니다. 명령어로 실행하는 것과 왜 차이가 있을까요?
- 실행 중인 NGINX Deploy를 YAML 파일로 Export 하세요. 좀 더 보기가 용이한 YAML 파일로 Export 하세요.
- NGINX 1.19.8 이미지 버전으로 deploy를 생성하세요.
기본 명령어
- 실행 중인 NGINX POD의 IP 및 노드 정보를 확인 하세요.
- NGINX POD의 상세 정보를 확인 하세요. 이미지 버전, Annotation 등.
- NGINX 1.19.8 이미지 1) POD를 삭제하세요. POD가 재 시작되는 이유가 무엇일까요? 2) Deploy를 삭제하세요.
TroubleShooting - Log & Event
- nginx 이미지 버전을 no-ver 으로 변경해 보세요. pod 리스트를 확인해 보세요.
- 에러 발생하는 nginx pod의 상세 정보를 확인해 보세요.
- kube cluster event를 확인해 보세요.
- 1) Warning type 메시지만 확인해 보세요.
- 2) 시간 순으로 정렬해 보세요.
- 정상 실행 중인 nginx pod의 로그를 확인해 보세요. following 옵션을 이용하세요. 확인 후 에러 발생하는 NGINX deploy를 삭제하세요.
Service
- NGINX deploy에 app: nginx label를 추가하여 실행해 보세요.
- 위 실행한 NGINX POD를 외부에서 접속 가능하도록 NodePort Type의 Service를 생성해 보세요.
- 외부에서 nginx application 접속해 보세요.
- busybox pod에 접속하여 DNS 서버 및 search 옵션을 확인해 보세요. DNS 서버는 어떤 걸 사용하나요?
- busybox deploy를 별도의 네임스페이스(test 등)에서 실행하세요. busybox pod에서 nginx pod로 연결 가능한 도메인 리스트를 나열해 보세요.
MetalLB
- Helm(또는 Kube Manifest)을 이용하여 MetalLB를 설치해 보세요. 외부에서 접속 가능한 Load Balancer IP 대역을 미리 준비합니다.
- nginxdemos/hello 이미지 + Replicas 5ea를 옵션으로 하는 NGINX Deploy를 생성하세요.
- 위 POD를 이용하여 LoadBalancer Type의 NGINX Service를 생성해 보세요.
- Endpoint 리스트를 확인해 보세요.
- 브라우저에서 nginxdemo pod에 접속합니다.
- curl 사용하여 nginxdemo pod의 load balancing 확인합니다.
Volume
- 현재 사용 가능한 Storage Class 나열하세요.
- OpenEBS-Hostpath Storage Class를 설치 하세요. 설치 시 Node 디렉토리를 디폴트가 아닌 /data (혹은 임의 디렉토리)로 지정하세요.
- 생성된 SC를 사용하여 default-pvc 이름의 PVC를 생성 하세요.
- 해당 PVC를 사용하는 임의의 POD를 생성해 보세요. 읽고 쓰기가 정상적인지 확인하세요.
- Pod가 실행 중인 노드를 리부팅 합니다. pod가 다른 노드에서 실행 되나요?
- IO 성능 측정 툴(fio) 이용하여 IOPS를 측정하세요
Helm MySQL
- Helm tool을 설치 합니다.
- Helm Chart를 이용하여 MySQL Application을 배포해 보세요. 설치 시 Chart 파일을 로컬에 다운 받아서 StorageClass 옵션을 OpenEBS-Hostpath으로 변경하여 설치 하세요.
- 생성된 PVC(Persistent Volume Claim) 리스트를 나열해 보세요.
- MySQL Service 타입을 확인해 보세요.
- nginx pod에서 MySQL pod로 ping 연결 테스트를 해 보세요. MySQL POD를 재시작하여 IP 변경 후 다시 연결해 보세요.
Helm Redis
- Helm Chart를 사용하여 Redis Application을 배포하세요. Pod는 3개를 배포 합니다.
- 배포된 Redis의 authPassword 변수를 변경하여 Helm 재 배포 하세요.
- Helm Chart에 포함된 노드 Affinity 설정을 확인하고 간단히 설명해 보세요.
일반
- 현재 Cluster의 Kube Version, Node IP 및 Container Runtime 정보를 확인해 보세요.
- 특정 Node의 전체 POD를 Terminate 하세요.
- cordon 된 노드를 다시 Scheduling 가능하도록 하세요.
ConfigMap & Secret
- 현재 사용 중인 MySQL ConfigMap 과 Secret 리스트를 확인해 보세요.
- ConfigMap, Secret 상세 정보를 확인해 보세요.
- POD에 접속하여 해당 ConfigMap 파일을 확인해 보세요.
- ConfigMap을 수정하여 MySQL Port를 default 3306 -> 13306 변경해 보세요. POD에 접속하여 해당 ConfigMap 파일을 확인해 보세요.
- 변경된 ConfigMap을 POD에 적용해 보세요.
- MySQL root 패스워드를 decrypt 해 보세요. root 패스워드를 임의의 패스워드(P@ssw0rd 등)으로 변경하여 새로 Secret 생성해 보세요.
- Vault 사용하여 secret 파일을 보호하세요.
User & RBAC
- 특정 네임스페이스(test)만 한정하여 POD, Volume, Service 등 Create, Get, List 등 권한이 가능한 ClusterRole, ClusterRoleBinding을 생성하세요.
- 해당 Config 설정 권한을 가지는 User로 변경하세요. 변경 후 타 네임스페이스의 POD 조회 및 생성 해 보세요.
Prometheus
- Metric 서버를 설치하세요. 설치 후 k top 명령어로 노드 및 POD의 CPU, Memory 사용량을 확인하세요.
- Helm 이용하여 prometheus-stack 설치하세요. 설치 옵션으로 로그 보관주기 6개월, prometheus/grafana/alertmanager 의 service type을 nodeport로 설정하세요.
- prometheus web ui 접속하세요
- 그래프로 특정 pod의 iops, cpu 사용량을 확인하세요
Grafana
- grafana 사이트에 접속 하세요.
- Cluster 전체 Node의 cpu, memory, network 등의 resource 사용량을 기본 제공되는 dashboard에서 확인 하세요.
- Cluster 전체 POD, Deploy 수량 및 각 POD 별 Resource 사용량 등을 확인해 보세요.
- grafana 홈페이지에서 임의의 template 대시보드를 추가하세요.
- 특정 대시보드 Panel 만 다른 대시보드에 추가하세요.
AlertManager
- alertmanger 접속해 보세요.
- Alert 발생 시 메일 전송하는 메일 계정을 추가하세요. (또는 Slack 연동)
- node rebooting 하여 Alert이 정상적으로 실행되는지 확인하세요.
- nginx 이미지의 버전을 no-ver으로 변경하세요. alertmanager 및 prometheus 에서 alert을 확인하세요. 해당 메시지를 임시로 alert 중지하세요.
Loki
- helm 이용하여 Loki 설치하세요. 로그 보관 주기를 4주로 설정합니다.
- Grafana에서 Loki Data Source를 추가합니다. Grafana Loki 대시보드를 확인 합니다.
- NGINX 로그 파일을 확인 합니다.
- NGINX POD를 재시작합니다. 종료된 POD 로그를 Loki 대시보드에서 확인 합니다.
- Warning 로그만 Filtering 하여 대시보드에서 확인 합니다.
Storage Snapshot w/ Rook-Ceph
- Helm Chart를 이용하여 rook-ceph 스토리지를 설치하세요.
- rook-ceph-block StorageClass를 추가합니다.
- Kube 공식 홈페이지를 참조하여 wordpress blog application을 설치 합니다. Wordpress 블로그에서 테스트 페이지를 포스팅 합니다.
- Wordpress MySQL PVC의 Snapshot을 생성합니다.
- MySQL PVC 삭제 합니다. wordpress 사이트를 확인합니다. 이 후 snapshot 이용하여 복구 합니다. 다시 wordpress 사이트를 확인 합니다.
- Snapshot을 이용하여 기존 PVC 이 외 추가 PVC를 생성하여 볼륨을 복구 합니다.
- IO 성능 측정 툴(fio) 이용하여 ceph Storage Class의 IOPS를 측정하세요
Rook-ceph & NFS
- NFS type의 rook-ceph-cephfs Storage Class 설치하세요.
- NGINX Deploy를 생성합니다. 옵션으로 /var/www/root 디렉토리 NFS로 Replica는 5개로 지정합니다.
Harbor
- Helm 이용하여 Harbor 설치 합니다.
- docker 명령어를 사용하여 생성한 Harbor Repository에 임의의 컨테이너 이미지를 Push 합니다.
- YAML 파일 내 컨테이너 이미지 Repository를 Harbor로 변경합니다. 정상적으로 POD Deploy 되는지 확인 합니다.
- 이미지 Upload 시 자동으로 이미지 보안 Scan 하도록 설정합니다. NGINX 이미지의 vulnerability 를 확인 합니다.
GitLab
- Helm 이용하여 GitLab 설치합니다.
- 로컬 디렉토리에서 Git init, Push, Pull 검증합니다.
ArgoCD for GitOps
- ArgoCD 설치. 위에서 생성한 컨테이너 레지스트리 & Git Source 등록합니다.
- ArgoCD 이용 NGINX Deploy 배포 합니다.
- ArgoCD 이용하여 Redis Helm 차트를 배포 합니다.
Traefik
- Traefik 설치
- 복수 도메인, URL Path 구분하여 서비스를 분기 합니다. Port별로 구분하여 서비스 분기 합니다.
- Custom TLS 인증서 연동
- Prometheus Traefik 모니터링 추가
Polaris
- Polaris 설치 및 전체 Polaris 대시보드 확인
- Helm으로 설치한 Redis Application 보안 취약점 제거
Cluster 업그레이드 및 노드 추가/삭제
- Kube Cluster 버전을 업그레이드 합니다.
- Cluster에 노드를 추가, 삭제 합니다.
부하 및 HA 테스트
- 부하 테스트 Tool(k6 or JMeter)을 사용하여 초당 100회 부하 테스트를 수행합니다.
- 특정 노드의 전체 POD를 삭제해 보세요. 임의의 Wordpress 블로그 등의 서비스가 노드 Down 시 이상 없는지 확인 합니다.
Kyverno
- POD 배포 시 Startup/Liveness Probe + Resource Limit/Requests 설정을 반드시(혹은 Warning) 포함하도록 Kyverno 정책을 적용해 보세요.
kube-bench
- kube-bench Tool을 사용하여 CIS Kubernetes Benchmark 실행해 보세요.
Kube-hunter
- kube hunter Tool을 사용하여 Kubernetes 사용 중인 Port 취약점을 확인해 보세요.
'쿠버네티스 교육' 카테고리의 다른 글
EKS OJT 교육 실습 목차 (2) | 2022.11.08 |
---|---|
[동영상] kubespray 설치 및 원격 cluster 등록 (0) | 2021.08.28 |
02. kube 실습 과제 - kubectl 환경 최적화 및 kube tool 설치 (0) | 2021.07.26 |
01. Kube 실습 과제 - Kubespray 이용 Kube Cluster 설치 (0) | 2021.07.26 |
Diamanti 교육 - dctl, kubectl Tool 설치 (0) | 2021.06.17 |