4 minute read

Lab settings

  • YAML작성 편하게하는 vi 에디터 설정(적용되어있음)
      $ vi .vimrc
    
      set et
      set sw=2
      set ts=2
      set nu
    
  • 자동완성 설정(공식문서)(적용되어있음)
      https://kubernetes.io/ko/docs/tasks/tools/included/optional-kubectl-configs-bash-linux/
    
  • 시험환경에서, 터미널에 복/붙할때는 ctrl+shift+c, ctrl+shift+v
  • 가능한 yaml작성보다는 선언형(명령어 입력)으로 생성. 시험환경 렉걸림
  • 컨텍스트 변경에 항상 주의

명령어 예시

  • pod 생성시
    • k run {name} –image= … –dry-run=client -o yaml > pod.yaml
  • 리소스 생성시
    • k create 로 생성가능한 리소스를 살펴보고
    • k create {resource} –help로 생성 예제를 확인한 뒤
    • k create {resource} –dry-run=client -o yaml > resource.yaml 생성 후 편집
    • k create/apply -f resource.yaml

11 vi Tip

  1. Backup
    • k run tip1 –image nginx –dry-run=client -o yaml > 1.yaml
    • cp 1.yaml 1.yaml.b
  2. Search & Replace (Tip 2&3)
    • / -> Search
    • Shift C > Replace
    • To change container name in a Pod/Deploy
      • k create deploy tip2 – image nginx –dry-run=client -o yaml > 2.yaml
      • vi 2.yaml
      • /nginx
      • Shift+c > 원하는 이름입력
  3. Append Text at the End
    • Shift A
    • Add a Plugin ImagePolicyWebhook in kube-apiserver.yaml
      • vi kube-apiserver.yaml
      • /plugin
      • Shift+a > 입력모드, 커서 제일 오른쪽 끝으로 이동
  4. Delete Text From Cursor Till End
    • Shift D
    • Delete a Plugin AlwaysAdmit in k-api.yaml
      • vi kube-apiserver.yaml
      • /Always
      • Shift+D > 입력모드, 커서 제일 오른쪽 끝으로 이동
  5. Indent Single Line
    • >> Shift right
    • << Shift left
    • Add serviceAccountName: build-robot
      • vi kube-apiserver.yaml
      • /spec
      • 칸만들고 넣은 후 >>로 여백조절
  6. Add line Above or Below
    • o -> add line Below
    • O -> add line Above
    • Add nodePort: 30007 to svc
      • k create deploy tip7 –image nginx
      • k expose deploy tip7 –name tip7-svc –port80 –target-port 80 –type NodePort –dry-run=client -o yaml > 7.yaml
      • vi 7.yaml
      • 필요한곳에 찾아가서 o 눌러서 입력상태 들어가기
  7. Indent Block of Text
    • Shift V
    • Shift > or <
    • .(dot) -> to repeat
    • Add volumes and volumeMounts to a deploy
      • k create deploy tip8 – image nginx –dry-run=client -o yaml > 8.yaml
      • vi 8.yaml
  8. Copy Pastee Block of text
    • Shift V
    • y
    • p
    • Multi Container Pod
  9. Comment line or Delete line
    • 0i#
    • dd
    • kube-apiserver disable –allow-privileged
      • 0i# -> 0(커서 줄앞으로)/i(입력모드전환)/#(주석기호)
  10. Save & Quit
    • :x
    • Add Label env: prod

220719 cka 팁

  • finesse guide
    • mindset
      • time is your most valuable resource, speed is your best friend
      • be imperative first, declarative second
    • k create|run ... -h
      • copying yaml from docs is LAST RESORT
      • just make the thing with k create|run
      • add ... --dry-run=client -o yaml > resource.yaml if you need to add things before apply
    • use the -h option
      • tells you EXACTLY what can be created imperatively WITH EXAMPLES
      • menu increases in detail with base command
    • understand the k8s docs
      • remember important pages and examples
        • mentally bookmark templates that can’t be created interactively (pv, pvc, netpol, etc.)
      • ctrl-f kind: <MY RESOURCE> to quickly find example yaml
      • use the one-pager api reference for specific details
    • use shortnames
      • never type out a full resource name if you can help it
        • cm -> configmap
        • pvc -> persistentvolumeclaim
      • check all shortnames with k api-resources
    • aliases, functions, and variables
      • memorize what you think you’ll use
# IMHO must-haves

## create yaml on-the-fly faster
export do='--dry-run=client -o yaml'

## organize your files per question #
mkcd() { mkdir -p "$@" && cd "$@" ; }
# nice to haves

## create/destroy from yaml faster
alias kaf='k apply -f '
alias kdf='k destroy -f '

## namespaces (poor man's `kubens`)
export nk='-n kube-system'
export n='-n important-ns' # set this as needed

## destroy things without waiting
export now='--grace-period 0 --force'

Docs 정리

  • Bookmark
  • kubectl Cheat sheet
  • kubectl reference docs
    • pods
    • service
    • controllers
    • volumes
    • Auth
    • Security context
    • Networkpolicies
    • Troubleshooting
    • Deploy
  • Domain 별 시험 유형
    • Storage (10%)
      • emptyDir, hostPath, NFS 기반의 PV생성
      • PVC 생성 후 Pod에 볼륨 마운트 하기
    • Troubleshooting (30%)
      • node에서 kubelet 동작 문제 해결
      • node에서 CNI, kube-proxy 동작 문제 해결
      • CPU 부하 많이 차지하는 특정 pod 찾아 기록 또는 log 별도 저장
    • Workloads & Scheduling (15%)
      • 서비스 deploy 후 rolling/rollbacks, scale in/out
      • ConfigMaps/Secrets 생성 후 pod 적용
      • Pod에 liveness, readiness Probe 적용, Cpu/mem limit 설정
    • Cluster Architecture, Installation & Configuration(25%)
      • ETCD Backup/restore
      • API 인증(RBAC) 보안 (Network policy) 설정
      • kubeadm install/upgrade
    • Sevices & Networking (20%)
      • deply/pd 서비스를 위한 ClusterIP/NodePort 설정
      • Ingress 구성
      • nslookup 명령어 사용, pod와 서비스의 DNS 결과를 저장(CoreDNS 이해)
      • node의 CNI(Container N/W Interface plugin) 동작 문제 해결

기출 내역

  • 220818후기
    • 13점 문제가 1개 나왔고 Trouble shooting 문제 였습니다. (workder node의 kubelet down)
      • systemctl status docker => systemctl enable –now docker
      • systemctl status kubelet => systemctl enable –now kubelet
    • 7점은 대부분 여러 resource가 연계된 문제들
      • pv, pvc 생성해서 pod에 mount -> mounts 정보 describe로 확인하기
      • sidecar - multi containers -> sidecar cont. log 확인하기
      • svc생성하고 ingress로 http 설정
      • ETCD save & restore
      • clusteerrole &binding, sa
      • cluster upgrade 문제 ( master만)
      • deloyment의 cont. 에서 container port(name까지) 설정하고, nodePort로 된 svc의 target port에 설정한 port name으로 expose하기
      • node drain하기
    • 4점은 정말 Easy~
      • taint가 적용되는 않은 node 갯수 count
      • pod schedule
      • 특정 node에서 pod deploy => nodeselector 설정
      • log grep해서 save
      • CPU사용량이 가장 많은 pod 이름 save
      • deployment replica scaling
      • multi container pod
      • hostPath로 PV 생성
      • storage로 PVC 생성 -> pv, pvc 확인
  • 220707
    • networkpolicy (다른 특정 네임스페이스에 있는 pod들 전부 ingress 허용)
    • 이미 존재하는 Deployment에 Service Expose (Nodeport 사용)
    • ETCD 백업 및 복구
    • CPU 사용량 가장 높은 Pod명 검색하여 파일로 저장
    • Ingress 생성
    • Control Plane만 Upgrade (Worker Node는 절대 하지 말 것)
    • Sidecar Container Pod 생성
    • Multi Container Pod 생성
    • NodeSelector 사용
    • Deployment Scale
    • Hostpath 타입의 볼륨 생성하기
    • PVC 및 PV 생성
    • Service Account & ClusterRole & Rolebiding 생성
    • Node Troubleshooting (Kubelet 장애)
    • Node 관리 (drain)
    • Node 정보 수집 (Ready 상태이며 Taint가 NoShedule을 포함하지 않는 Node명 검색하여 파일로 저장)
    • Label 설정한 Pod 생성(?)
  • 220627(지인 후기)
    • etcd 백업 및 복구 ( 1개 )
    • pv , pvc 생성 ( 2문제 )
    • pod / deploy 생성 (3~4문제)
    • netpol 구성 (1문제)
    • trouble-shooting [ master, node 각 1문제 ]
    • ingress ( 1문제 ) < 시간 많이 뺏김 >
    • Cluster upgrade & Install (1문제)
    • Cordon & Uncordon (1문제)
    • static-pod (1문제)

Categories:

Updated:

Leave a comment