반응형
Kubernetes환경의 운영을 좀 더 편하게 해주는 다양한 plug-in들이 많이 있다.
이번 포스팅에서는 몇가지 plug-in(ctx, ns, node-shell, neat)을 소개하겠다. OS는 ubuntu를 기준으로 설명한다.
1. kubectl 자동완성
- kubectl 명령어는 그 종류도 많고 하나하나 치기도 귀찮다. 그래서 자동완성 기능을 사용한다.
- bash-completion 설치
apt-get install bash-completion
- kubectl 자동완성 기능은 bash-completion에 의존하고 있기 때문에 bash-completion설치가 필요하다.
- 자동완성 기능을 활성화 한다.
echo 'source <(kubectl completion bash)' >>~/.bashrc
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
- 자신의 profile에 저장한다.
- k 만 눌러도 kubectl이 실행되며 Tab키를 눌러 alias 확인 및 자동완성이 가능해진다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get nodes
NAME STATUS ROLES AGE VERSION
ip-172-16-134-12.ap-northeast-2.compute.internal Ready <none> 5h35m v1.24.10-eks-48e63af
ip-172-16-144-213.ap-northeast-2.compute.internal Ready <none> 8d v1.24.10-eks-48e63af
ip-172-16-146-6.ap-northeast-2.compute.internal Ready <none> 8d v1.24.10-eks-48e63af
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k <Tab>
alpha apply certificate cordon delete edit get logs port-forward run top
annotate attach cluster-info cp describe exec help options proxy scale uncordon
api-resources auth completion create diff explain kustomize patch replace set version
api-versions autoscale config debug drain expose label plugin rollout taint wait
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get de <Tab>
deletebackuprequests.velero.io deployments.apps
2. krew
- krew는 Kubernetes plug-in들을 관리하는 툴이다.
- git이 설치된 상태에서 아래 명령어를 수행한다.
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
- PATH에 krew/bin경로를 추가한다.
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
- k krew 명령어로 krew가 정상적으로 설치되었는지 확인한다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k krew
krew is the kubectl plugin manager.
You can invoke krew through kubectl: "kubectl krew [command]..."
Usage:
kubectl krew [command]
Available Commands:
completion generate the autocompletion script for the specified shell
help Help about any command
index Manage custom plugin indexes
info Show information about an available plugin
install Install kubectl plugins
list List installed kubectl plugins
search Discover kubectl plugins
uninstall Uninstall plugins
update Update the local copy of the plugin index
upgrade Upgrade installed plugins to newer versions
version Show krew version and diagnostics
Flags:
-h, --help help for krew
-v, --v Level number for the log level verbosity
Use "kubectl krew [command] --help" for more information about a command.
- krew update 수행
k krew update
3. kubectl-ctx
- 여러 Cluster를 운영하는 경우 Cluster간 전환을 쉽게 도와주는 툴이다.
- krew를 통해 간단하게 설치한다.
k krew install ctx
- config파일에 저장된 다수의 Cluster를 조회하며 kubectl-ctx <context> 명령어로 쉽게 전환이 가능하다.
- kx로 alias를 걸어 사용하고 있다.
test@DESKTOP-F55SF6V:~ (⎈|test-control:default)# kx
test-cluster1
test-cluster2
test-control
test@DESKTOP-F55SF6V:~ (⎈|test-control:default)# kx test-cluster2
Switched to context "test-cluster2".
test@DESKTOP-F55SF6V:~ (⎈|test-cluster2:default)#
- test-control cluster에서 test-cluster2 로 전환된다.
4. kubectl-ns
- Namespace 전환 명령어 : kubectl config set-context --current --namespace=<Namespace명>
- kubectl-ns는 이를 쉽게 해준다. kns로 alias를 걸어 사용하고 있다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:argocd)# kns kube-system
Context "test-cluster" modified.
Active namespace is "kube-system".
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:kube-system)# k get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
aws-load-balancer-controller 2/2 2 2 8d
coredns 2/2 2 2 12d
ebs-csi-controller 2/2 2 2 8d
efs-csi-controller 2/2 2 2 8d
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:kube-system)# kns default
Context "test-cluster" modified.
Active namespace is "default".
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 1/1 1 1 2d8h
- kns <Namespace명>으로 쉽게 변경한다.
5. kube-ps1
- PS1환경변수에 kubernetes의 context명과 namespace 정보를 표시한다.
- git clone을 통해 kube-ps1을 가져온 뒤 profile에 PS1변수를 변경한다.
git clone https://github.com/jonmosco/kube-ps1.git
- profile에 아래 내용을 추가한다.
source $KUBE_PS1디렉토리/kube-ps1.sh
PS1='test@\h:\w $(kube_ps1)\$ '
- 아래처럼 프롬프트가 변경된 것을 확인한다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)#
- test-cluster의 default namespace가 현재 위치다.
6. node-shell
- Kubernetes의 node에 직접 접속할 수 있게 해주는 도구다.
- krew를 통해 설치한다.
kubectl krew index add kvaps https://github.com/kvaps/krew-index
kubectl krew install kvaps/node-shell
- kn으로 alias를 걸어 사용중이다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get nodes
NAME STATUS ROLES AGE VERSION
ip-172-16-134-12.ap-northeast-2.compute.internal Ready <none> 5h35m v1.24.10-eks-48e63af
ip-172-16-144-213.ap-northeast-2.compute.internal Ready <none> 8d v1.24.10-eks-48e63af
ip-172-16-146-6.ap-northeast-2.compute.internal Ready <none> 8d v1.24.10-eks-48e63af
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# kn ip-172-16-134-12.ap-northeast-2.compute.internal
spawning "nsenter-7xiiyi" on "ip-172-16-134-12.ap-northeast-2.compute.internal"
If you don't see a command prompt, try pressing enter.
[root@ip-172-16-134-12 /]#
- kn <Node명>으로 해당 node에 접속했다.
7. neat
- kubectl get resource -o yaml 수행시 쓸모없는 값들을 제거하여 가독성을 높여준다.
- krew로 간단히 설치힌다.
k krew install neat
- kubectl get reousrce -o yaml | kubectl neat 와 같은 형태로 사용한다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get svc kubernetes -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2023-03-17T08:27:39Z"
labels:
component: apiserver
provider: kubernetes
name: kubernetes
namespace: default
resourceVersion: "202"
uid: eeb3ea80-a142-490f-9952-470a2397d1ff
spec:
clusterIP: 10.100.0.1
clusterIPs:
- 10.100.0.1
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: https
port: 443
protocol: TCP
targetPort: 443
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
- neat없이 값을 가져오면 creationTimestamp등등 불필요한 데이터가 많이 조회된다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get svc kubernetes -o yaml | k neat
apiVersion: v1
kind: Service
metadata:
labels:
component: apiserver
provider: kubernetes
name: kubernetes
namespace: default
spec:
clusterIP: 10.100.0.1
clusterIPs:
- 10.100.0.1
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: https
port: 443
- 결과가 훨씬 깔끔한걸 확인할 수 있다.
반응형
운영환경에 있어 plug-in은 선택사항이 아닌 필수다. 일의 생산성이 달라지는걸 확인할 수 있다.
반응형
'Cloud > Kubernetes' 카테고리의 다른 글
Container의 개념 (0) | 2024.10.13 |
---|---|
Kubernetes PodDisruptionBudget(PDB) 활용 (0) | 2023.05.03 |
HTTPS통신을 위한 Nginx Ingress 설정 (0) | 2023.04.13 |
kubernetes환경에 nginx ingress 설치하기 (0) | 2023.04.12 |
EKS multiple CIDR사용 방법 (0) | 2023.04.01 |