데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      AKS로 쿠버네티스 시작하기 : kubectl plugin

      broccoli 24.01.31
      2,207 8 1
      DEVOTEE 요약
      플러그인은 기본 기능을 확장하거나 추가하기 위해 사용되는 모듈이다. 대표적으로 쿠버네티스를 관리하는 kubectl에서 플러그인 아키텍처를 지원해 기능을 확장할 수 있다. 이를 통해 다양한 기능들을 쉽고 편리하게 확장해 사용하며, 필요에 따라 kubectl 플러그인을 활용하면 k8s의 운영을 효과적으로 수행할 수 있다.

      플러그인

      플러그인은 기본 기능에 추가 기능을 제공하는 개념이다.

      일반적으로 IT 분야의 플러그인(plugin)이란 기존 소프트웨어나 시스템의 기능을 확장하거나 추가하기 위한 모듈을 의미한다.

      대표적인 플러그인의 사례를 보면 아래와 같다.

      - Visual Studio Code 플러그인

      - Slack 앱 플러그인

      - Chat GPT 플러그인

      플러그인은 주로 기존 시스템의 UI, 기능, 성능 등을 개선하거나 특정 작업을 자동화하기 위해 사용된다.

      개발자 측면에서는 시스템 기능을 쉽고 편리하게 확장 가능하게 해 주는 것이 주목적이라고 볼 수 있다.


      kubectl plugin

      쿠버네티스를 운영하는 데 있어 핵심 도구인 kubectl은 클러스터를 관리하고 리소스를 조작하는 기능을 제공한다.

      하지만 kubectl만으로 모든 관리 작업을 효과적으로 하기에는 한계가 있다.

      이런 문제를 해결하기 위해 kubectl은 플러그인 아키텍처를 지원하여 기능을 확장할 수 있게 하였다.

      kubectl 플러그인은 2016년 초반 kubectl tree 명령을 구현한 플러그인에서 시작했다.

      이후로 지속적으로 새로운 플러그인이 개발되면서 kubectl의 기능이 확장되었고, 공식 플러그인 아키텍처가 마련되었다.

      2018년에는 플러그인을 쉽게 관리할 수 있는 krew 패키지 매니저가 도입되었고, 현재는 다양한 kubectl 플러그인이 사용 가능하며, kubectl의 핵심 기능 중 하나로 자리매김하고 있다.

      앞으로 쿠버네티스 생태계가 더 커짐에 따라 kubectl 플러그인도 지속적으로 발전할 것으로 예상된다.

      간단한 기능 확장의 형태로 시작하여 오늘날의 다양한 플러그인으로 성장한 역사를 가진 kubectl 플러그인은 kubectl을 더욱 강력한 도구로 만들고 있다.


      kubectl 만나기

      아래의 사이트(https://krew.sigs.k8s.io/plugins) 를 통해 인기있는 플러그인을 확인해 볼 수 있다.

      image.png


      인기 있는 kubectl plugins

      Star 순으로 보면 아래의 순위로 확인된다.

      krew(38.3K) - kubectl plugin 패키지 매니저

      octant(38.3K) - 웹 기반 쿠버네티스 클러스터 관리 도구

      kubectx(34.9K) - 쿠버네티스 컨텍스트를 빠르게 전환

      kubens(30.5K) - 쿠버네티스 네임스페이스를 빠르게 전환

      kp(18.0K) - 쿠버네티스 명령 줄보다 편리한 프린터

      kube-ps1(16.1K) - 셸 프롬프트에 쿠버네티스 정보 표시

      kubectl-who-can(8.2K) - RBAC 권한 조회

      rbac-lookup(8.1K) - RBAC 권한 확인

      k9s(7.4K) - 쿠버네티스 클러스터를 관리할 수 있는 탁월한 터미널 기반 UI 도구

      kubectl-neat(7.0K) - kubectl 명령 단순화

      ctx(5.3K) - 컨텍스트 관리

      gke-credentials(5.1K) - GKE 자격 증명 관리

      kubectl-tree(4.3K) - 리소스 계층도 보기

      kubectl-aliases(3.9K) - kubectl 에일리어스 관리

      kubectl-ns(3.3K) - 네임스페이스 전환

      mc(2.7K) - 멀티 클러스터 관리

      ns(2.6K) - 네임스페이스 관리

      vs(2.5K) - 버전 확인

      access-matrix(2.1K) - 권한 매트릭스 생성

      kail(2.1K) - 쿠버네티스 로그 실시간 보기

      kf(2.1K) - 파일 전달 및 포트포워딩

      open-svc(2.0K) - 서비스 프록시 열기

      view-utilization(1.7K) - 리소스 사용량 보기

      kubeprompt(1.6K) - kubectl 컨텍스트를 프롬프트에 표시

      kubetail(1.5K) - 쿠버네티스 로그를 tail

      kubectl-su(1.3K) - 다른 사용자로 전환

      handle(1.2K) - 쿠버네티스 오브젝트 핸들러

      kubepug(1.1K) - Jinja 템플릿으로 리소스 생성

      get-all(1.1K) - 모든 리소스 한 번에 가져오기

      kubectl-plan(1.0K) - 구축 계획 관리

      dds(970) - 디렉터리 간 리소스 복사

      eks-token(889) - EKS 세션 토큰 관리

      explain-cronjob(873) - 크론잡 스케줄 확인


      활용할 만한 kubectl plugins 사용법

      k8s를 접하는 과정에서 활용할 만한 플러그인 사용법을 아래의 환경 준비, 클러스터 구축, 로깅과 모니터링 관점으로 나누어 소개한다.


      1. 환경 준비

      (1) krew : 패키지 관리 툴

      krew는 kubectl 플러그인을 관리하기 위한 패키지 매니저입니다. kubectl 명령을 통해 krew를 호출할 수 있다.

      krew를 사용하면 kubectl 플러그인을 검색, 설치, 제거, 업데이트, 업그레이드 등을 할 수 있다. 또한 사용자 지정 플러그인 인덱스를 관리할 수 있고, 설치된 플러그인 리스트를 볼 수 있다.

      krew를 통해 kubectl의 기능을 확장하는 다양한 플러그인을 쉽고 편리하게 관리할 수 있다.

      $ kubectl krew install df-pv
      kubectl krew install df-pv
      Updated the local copy of plugin index.
      Installing plugin: df-pv
      Installed plugin: df-pv
      \
       | Use this plugin:
       | 	kubectl df-pv
       | Documentation:
       | 	https://github.com/yashbhutwala/kubectl-df-pv
      /
      WARNING: You installed plugin "df-pv" from the krew-index plugin repository.
         These plugins are not audited for security by the Krew maintainers.
         Run them at your own risk.

      (가) kubectl krew search: 설치 가능한 kubectl plugin 검색

      (나) kubectl krew install: kubectl plugin 설치

      (다) kubectl krew uninstall: 설치된 kubectl plugin 삭제

      (라) kubectl krew upgrade: 설치된 kubectl plugin 업그레이드

      (마) kubectl krew list: 설치된 kubectl plugin 리스트 보기


      아래 내용부터는 설치는 kubectl krew install을 사용하므로 생략하고, 사용법 위주로 설명한다.


      2. 클러스터 구축

      (1) pod-lens : pod 리소스 현황 확인

      $  kubectl pod-lens -n  unitybuild-base
       [Namespace]  unitybuild-base
      └─┬ [Namespace]  unitybuild-base                       Replica:
        └─┬ []                                               [Ready] Node IP: 10.26.0.100
          ├─┬ [Node]  aks-agentpool2-12810365-vmss000006     [Running] Pod IP: 10.26.0.133
          │ └─┬ [Pod]  unitybuild-base                       [Running] Restart: 0
          │   └── [Container]  docker
          ├── [PVC]  pvc-dockerd
          ├── [PVC]  pvc-scripts
          ├── [PVC]  pvc-azurefile-unitybuild-base
          └── [ConfigMap]  kube-root-ca.crt
      
      Failed to get other, These l do not exist: [release] [app] [k8s-app] [app.kubernetes.io/name].+ So no related resources could be found.
       Related Resources
      
      Kind:         	PVC
      Name:         	pvc-azurefile-unitybuild-base
      Storage Class:	azurefile-csi-premium
      Access Modes: 	ReadWriteMany
      Size:         	300Gi
      PV Name:      	pv-azurefile-unitybuild-base
      ---           	---
      Kind:         	PVC
      Name:         	pvc-dockerd
      Storage Class:	default
      Access Modes: 	ReadWriteOnce
      Size:         	10Gi
      PV Name:      	pvc-6b2aec32-ed37-48ee-9750-816bf753fc32
      ---           	---
      Kind:         	PVC
      Name:         	pvc-scripts
      Storage Class:	default
      Access Modes: 	ReadWriteOnce
      Size:         	1Gi
      PV Name:      	pvc-d8f43d43-ea6f-42f5-a553-2f722b29d4fc
      ---           	---
      Kind:         	ConfigMap
      Name:         	kube-root-ca.crt
      ---           	---

      (2) kubectx(컨텍스트 전환), kubens(네임스페이스 전환)

      $ kubectx aks-aop-test
      
      $ kubens default 

      (3) octant :웹 기반 쿠버네티스 클러스터 관리 도구, brew install 로 설치 가능( ex : brew install octant)

      image.png



      (4) k9s :쿠버네티스 클러스터를 관리할 수 있는 탁월한 터미널 기반 UI 도구, brew install 로 설치 가능( ex : brew install k9s)

      image.png


      (5) kubectl-tree : 리소스 계층 보기

      $ kubectl tree deployment/s-deploy-admin-portal
      NAMESPACE  NAME                                            READY  REASON  AGE
      aop        Deployment/s-deploy-admin-portal                -              50d
      aop        ├─ReplicaSet/s-deploy-admin-portal-56c4c98dc4   -              4h13m
      aop        │ ├─Pod/s-deploy-admin-portal-56c4c98dc4-24662  True           4h13m
      aop        │ └─Pod/s-deploy-admin-portal-56c4c98dc4-hktmk  True           4h6m
      aop        ├─ReplicaSet/s-deploy-admin-portal-6b9fd68d99   -              7d23h
      aop        ├─ReplicaSet/s-deploy-admin-portal-789c7d6f88   -              2d7h
      aop        └─ReplicaSet/s-deploy-admin-portal-84cb95699b   -              10d

      (6) df-pv : pv 정보 보기

      $ kubectl df-pv -n unitybuild-base
      
       PV NAME                                   PVC NAME                       NAMESPACE        NODE NAME                           POD NAME         VOLUME MOUNT NAME  SIZE   USED   AVAILABLE  %USED  IUSED  IFREE   %IUSED
       pvc-d8f43d43-ea6f-42f5-a553-2f722b29d4fc  pvc-scripts                    unitybuild-base  aks-agentpool2-12810365-vmss000006  unitybuild-base  scripts            973Mi  28Ki   957Mi      0.00   12     65524   0.02
       pv-azurefile-unitybuild-base              pvc-azurefile-unitybuild-base  unitybuild-base  aks-agentpool2-12810365-vmss000006  unitybuild-base  unitybuild-base    500Gi  101Gi  398Gi      20.33  0      0       NaN
       pvc-6b2aec32-ed37-48ee-9750-816bf753fc32  pvc-dockerd                    unitybuild-base  aks-agentpool2-12810365-vmss000006  unitybuild-base  docker-socket      9Gi    24Ki   9Gi        0.00   11     655349  0.00


      3. 로깅과 모니터링

      (1) tail : 로그 보기

      $ kubectl tail
      aop/s-deploy-build-api-5fb8bb5c47-j74j9[s-container-build-api]: [2023-09-15 18:25:26.920] [null :: null :: 10.26.0.196] [DEBUG] o.springframework.web.filter.CommonsRequestLoggingFilter - Before request [GET /actuator/health, client=10.26.0.196, headers=[host:"10.26.1.30:8080", user-agent:"kube-probe/1.26", accept:"*/*", connection:"close"]]
      aop/s-deploy-build-api-5fb8bb5c47-j74j9[s-container-build-api]: [2023-09-15 18:25:26.922] [null :: null :: 10.26.0.196] [DEBUG] o.springframework.web.filter.CommonsRequestLoggingFilter - After request [GET /actuator/health, client=10.26.0.196, headers=[host:"10.26.1.30:8080", user-agent:"kube-probe/1.26", accept:"*/*", connection:"close"]]
      mysql/mysql-0[mysql]: 2023-09-15T09:25:27.886784Z 1270277 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release.

      (2) kube-ps1 : 프롬프트 확인

      # 설치 
      $ curl -Lo kube-ps1.tar.gz https://github.com/jonmosco/kube-ps1/archive/master.tar.gz
      $ tar -xzf kube-ps1.tar.gz
      $ cd kube-ps1-master
      $ mkdir -p ~/.kube
      $ cp kube-ps1.sh ~/.kube/
      
      # 쉘 설정 파일에 반영 : .zshrc 
      source ~/.kube/kube-ps1.sh
      PROMPT='$(kube_ps1)'$PROMPT
      
      # 결과 확인 
      (⎈|AKS-S-AOP:default)➜  ~

      (3) stern : 리소스 생성 중 문제 확인 : 실시간 로그 확인을 통해서 리소스 생성 과정의 문제 확인 가능

      # 사용법 예) pod 리소스 생성 과정을 실시간 로그로 확인
      $ stern unitybuild-base -n unitybuild-base

      image.png


      (4) kubernetic : 쿠버네티스 클러스터를 관리할 수 있는 데스크톱 애플리케이션

      # 설치 
      $ brew install --cask kubernetic
      ==> Downloading https://kubernetic.s3.amazonaws.com/Kubernetic-4.4.0.dmg
      ##################################################################################################################################### 100.0%
      ==> Installing Cask kubernetic
      ==> Moving App 'Kubernetic.app' to '/Applications/Kubernetic.app'
      🍺  kubernetic was successfully installed!

      image.png


      정리

      kubectl 기능을 확장하기 위한 모듈에 대해 확인해 보았다.

      kubectl만으로는 한계가 있어 플러그인 기능이 필요하며, 적절히 활용하면 k8s 운영을 보다 효과적으로 할 수 있다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      broccoli 님의 최신 블로그

      더보기
      동영상 기고하기