[TOC]
0x01 基础简介
K9s - Kubernetes CLI To Manage Your Clusters In Style! 描述: k9s 是用于管理 Kubernetes 集群的 CLI, K9s 提供了一个终端 UI 来与您的 Kubernetes 集群进行交互。通过封装 kubectl 功能 k9s 持续监视 Kubernetes 的变化并提供后续命令来与您观察到的资源进行交互,直白的说就是k9s可以让开发者快速查看并解决运行 Kubernetes 时的日常问题。
目前在 Github 上 该项目 star 将近 15k, 还是比较活跃的。
官网地址: https://k9scli.io/
k9s-Logo
功能特性:
- 跟踪在 Kubernetes 集群运行的资源的实时活动
- 处理 Kubernetes 标准资源和自定义资源
- 跟踪与资源相关联的实时指标,如 pods、容器和节点
- 支持定制外观
- 支持多资源视图
- 支持查看 RBAC 规则
- 支持遍历 Kubernetes 资源及其相关资源
参考来源: Github 项目地址: https://github.com/derailed/k9s Gitee Mirrors 镜像地址: https://gitee.com/mirrors/K9s (国内推荐)
0x02 安装实践
K9s 在 Linux、macOS 和 Windows 平台上可用。
常用安装方式
代码语言:javascript复制# 编译后的二进制包
https://github.com/derailed/k9s/releases
# MacOS or LinuxBrew for Linux
brew install k9s
# On Arch Linux
pacman -S k9s
# Via Webi for Linux and macOS
curl -sS https://webinstall.dev/k9s | bash
# Via Webi for Windows
curl.exe -A MS https://webinstall.dev/k9s | powershell
# Running the official Docker image
docker run --rm -it -v ~/.kube/config:/root/.kube/config quay.io/derailed/k9s
Tips: 当然您也可以参照官方文档进行从源码构建, K9s 目前使用的是 go v1.14 或更高版本。
安装流程
此外以安装二进制包为例进行实践。
代码语言:javascript复制# 1. 利用 wget 命令 -c 短点续传和 -b 后台下载
wget -b -c https://github.com/derailed/k9s/releases/download/v0.25.18/k9s_Linux_x86_64.tar.gz
# 2.解压并删除多余文件
tar -zxf k9s_linux_x86_64.tar.gz
rm k9s_linux_x86_64.tar.gz LICENSE README.md
# 3.拷贝 kubernetes 控制配置文件到加目录中
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
# 4.直接运行即可,如果你对vim操作比较熟悉,那么恭喜你了你很快能上手k9s.
/nfsdisk-31/newK8s-Backup/tools# ./k9s
# 5.退出k9s指令
:quit
WeiyiGeek.k9s运行截图
配置示例
K9s 使用 256 色终端模式。 在 `Nix 系统上,确保相应地设置了 TERM。
代码语言:javascript复制export TERM=xterm-256color
为了发出清单编辑命令,请确保您的 EDITOR 环境已设置。
代码语言:javascript复制# Kubectl edit command will use this env var.
export EDITOR=my_fav_editor
# Should your editor deals with streamed vs on disk files differently, also set...
export K9S_EDITOR=my_fav_editor
K9s 更喜欢最近的 kubernetes 版本,即 1.16 。
K9s 将其配置保存在 k9s 目录中,位置取决于您的操作系统, 其利用 XDG 加载其各种配置文件。
Unix : ~/.config/k9s
Mac : ~/Library/Application Support/k9s
Windows : %LOCALAPPDATA%k9s
# $XDG_CONFIG_HOME/k9s/config.yml
k9s :
# 代表 ui 轮询间隔。 默认 2secs
refreshRate : 2
# 与 api-server 的连接丢失后的重试次数。 默认 15。
maxConnRetry : 5
# 启用鼠标支持。 默认 false
enableMouse : true
# 设置为 true 以隐藏 K9s 标头。 默认 false
headless : false
# 设置为 true 以隐藏 K9s crumbs。 默认 false
crumbsless : false
# 指示是否禁用删除/杀死/编辑等修改命令。 默认为 false
readOnly : false
# 切换图标显示,因为并非所有终端都支持这些字符。
noIcons : false
# 日志配置
logger :
# 定义要返回的行数。 Default 100
tail : 200
# 定义视图中允许的日志行总数。 Default 1000
buffer : 500
# 表示以秒为单位在日志时间线中返回多远。 设置为 -1 将显示所有可用的日志。 默认为 5 分钟。
sinceSeconds : 300
# 显示日志时全屏显示。 默认 false
fullScreenLogs : false
# 切换日志换行。 默认 false
textWrap : false
# 切换日志行时间戳信息。 默认假
showTime : false
# 表示当前的 kube 上下文。 默认为当前上下文
currentContext : minikube
# 表示当前的 kube 集群。 默认为当前上下文集群
currentCluster : minikube
# 保留每个集群首选项以获取最喜欢的命名空间和视图。
clusters:
coolio:
namespace:
active: coolio
favorites:
- cassandra
- default
view:
active: po
featureGates:
# 切换NodeShell支持
nodeShell : false
# 启用功能门的 shell pod 自定义
shellPod :
# 要使用的 shell pod 映像。
image : killerAdmin
# 要启动到 shell pod 的命名空间。
namespace : fred
# 在 shell pod 上设置的资源限制。
limits :
cpu : 100m
memory : 100Mi
# 启动端口转发时使用的 IP 地址。
portForwardAddress : 1.2.3.4
kind :
namespace :
active : all
favorites :
- all
- kube-system
- default
view :
active : dp
# 屏幕转储的路径。 默认值:'%temp_dir%/k9s-screens-%username%'(k9s 信息)
screenDumpDir : /tmp
Node Shell 配置,通过在给定集群上启用 nodeShell 功能门,K9s 允许您在集群节点中进行 shell。
代码语言:javascript复制# $XDG_CONFIG_HOME/k9s/config.yml
k9s:
clusters:
# Configures node shell on cluster blee
blee:
featureGates:
# You must enable the nodeShell feature gate to enable shelling into nodes
nodeShell: true
# You can also further tune the shell pod specification
shellPod:
image: cool_kid_admin:42
namespace: blee
limits:
cpu: 100m
memory: 100Mi
HotKey Support 设置: 允许用户定义自己的热键来激活他们最喜欢的资源视图。
代码语言:javascript复制# $XDG_CONFIG_HOME/k9s/hotkey.yml
cat <<'EOF' > ~/.config/k9s/hotkey.yml
hotKey:
# Hitting Shift-0 navigates to your pod view
shift-0:
shortCut: Shift-0
description: Viewing pods
command: pods
# Hitting Shift-1 navigates to your deployments
shift-1:
shortCut: Shift-1
description: View deployments
command: dp
EOF
Command Aliases 设置: 命令别名设置。
代码语言:javascript复制# 使用此别名文件,您现在可以键入 pp/crb 以分别列出 pod 或 ClusterRoleBindings。
# $XDG_CONFIG_HOME/k9s/alias.yml
cat <<'EOF' > ~/.config/k9s/alias.yml
alias:
pp: v1/pods
crb: rbac.authorization.k8s.io/v1/clusterrolebindings
EOF
FastForwards: 从 v0.25.0 开始,您可以利用 FastForwards 功能告诉 K9s 如何默认端口转发.
代码语言:javascript复制# 您现在可以使用以下注释来注释您的清单:
k9scli.io/auto-portforwards -> 激活一个或多个端口转发,直接绕过端口转发对话框。
k9scli.io/portforwards -> 在启动端口转发对话框时预先选择一个或多个端口转发。
# 例如:
# Pod fred
apiVersion: v1
kind: Pod
metadata:
name: fred
annotations:
k9scli.io/auto-portforwards: zorg::5556 # => 将默认为 zorg 容器端口5556和本地端口5566
# Or...
k9scli.io/portforward: bozo::9090:p1 # => 启动“端口转发”对话框,选择为 bozo 容器中的p1(8081)映射到本地端口9090
...
spec:
containers:
- name: zorg
ports:
- name: p1
containerPort: 5556
...
- name: bozo
ports:
- name: p1
containerPort: 8081
- name: p2
containerPort: 5555
...
Resource Custom Columns:自定义显示的资源列,您可以通过自定义视图更改为给定资源显示哪些列。
代码语言:javascript复制# $XDG_CONFIG_HOME/k9s/views.yml
cat <<'EOF' > ~/.config/k9s/views.yml
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
EOF
plugin : K9s 允许您通过插件定义您自己的集群命令来扩展您的命令行和工具。
代码语言:javascript复制# k9s目前提供了额外的环境变量来自定义您的插件参数,可用的环境变量如下:
$RESOURCE_GROUP-- 选定的资源组
$RESOURCE_VERSION-- 选择的资源api版本
$RESOURCE_NAME-- 选择的资源名称
$NAMESPACE-- 选择的资源命名空间
$NAME-- 选择的资源名称
$CONTAINER-- 当前容器(如果适用)
$FILTER-- 当前过滤器(如果有)
$KUBECONFIG-- KubeConfig 位置。
$CLUSTER -- 活动集群名称
$CONTEXT -- 活动上下文名称
$USER -- 活跃用户
$GROUPS -- 活跃的群体
$POD -- 在容器视图中
$COL-<RESOURCE_COLUMN_NAME> -- 为查看的资源使用给定的列名。 必须以 COL-!
# 例如, 此处定义了一个插件实现 `ctrl-l` 快捷方式来在 pod 视图中跟踪日志。
# $XDG_CONFIG_HOME/k9s/plugin.yml
cat <<'EOF' > ~/.config/k9s/plugin.yml
plugin:
fred:
shortCut: Ctrl-L
confirm: false
description: Pod logs
scopes:
- pods
command: kubectl
background: false
args:
- logs
- -f
- $NAME
- -n
- $NAMESPACE
- --context
- $CONTEXT
EOF
11.Skins : 您可以根据自己的外观和风格来设计 K9s。
代码语言:javascript复制# $XDG_CONFIG_HOME/k9s/skin.yml
cat <<'EOF' > ~/.config/k9s/skin.yml
# Skin InTheNavy...
k9s:
# General K9s styles
body:
fgColor: dodgerblue
bgColor: '#ffffff'
logoColor: '#0000ff'
# ClusterInfoView styles.
info:
fgColor: lightskyblue
sectionColor: steelblue
# Help panel styles
help:
fgColor: white
bgColor: black
keyColor: cyan
numKeyColor: blue
sectionColor: gray
frame:
# Borders styles.
border:
fgColor: dodgerblue
focusColor: aliceblue
# MenuView attributes and styles.
menu:
fgColor: darkblue
keyColor: cornflowerblue
# Used for favorite namespaces
numKeyColor: cadetblue
# CrumbView attributes for history navigation.
crumbs:
fgColor: white
bgColor: steelblue
activeColor: skyblue
# Resource status and update styles
status:
newColor: '#00ff00'
modifyColor: powderblue
addColor: lightskyblue
errorColor: indianred
highlightcolor: royalblue
killColor: slategray
completedColor: gray
# Border title styles.
title:
fgColor: aqua
bgColor: white
highlightColor: skyblue
counterColor: slateblue
filterColor: slategray
views:
# TableView attributes.
table:
fgColor: blue
bgColor: darkblue
cursorColor: aqua
# Header row styles.
header:
fgColor: white
bgColor: darkblue
sorterColor: orange
# YAML info styles.
yaml:
keyColor: steelblue
colonColor: blue
valueColor: royalblue
# Logs styles.
logs:
fgColor: white
bgColor: black
EOF
0x02 命令实践
命令参数
代码语言:javascript复制# List all available CLI options
k9s help
# To get info about K9s runtime (logs, configs, etc..)
k9s info
# Configuration: /root/.config/k9s/config.yml
# Logs: /tmp/k9s-root.log
# Screen Dumps: /tmp/k9s-screens-root
# To run K9s in a given namespace
k9s -n mycoolns
# Start K9s in an existing KubeConfig context
k9s --context coolCtx
# Start K9s in readonly mode - with all cluster modification commands disabled
k9s --readonly
简单使用
使用截图
- Pulses - A top level dashboard of the state of affairs of your cluster
Pulses
- XRay - Dig in your cluster resources and view their dependencies
XRay
- Pods - List out your pods status and resource consumption
Pods
- RBAC - View the who/what/how of authorizations on your cluster
RBAC
实践使用
- 0.查看Pod资源配置清单,按键流程
:
->pods
->y
.(返回上一步是按ESC按键)
WeiyiGeek.Pod资源配置清单
- 1.进入指定pod的shell终端中,按键流程
:
->pods
->s
.
WeiyiGeek.进入pod的shell
- 2.指定pod进行容器内部端口转发,按键流程
:
->pods
-><shift-f>
, 输入容器内部名称::端口, 然后在输入映射到本地的端口,如果要查看端口转发配置,按键流程:
->pods
->f
即可查看。
WeiyiGeek.内部端口转发
- 3.pod 日志查看,按键流程
:
->pods
->l
。 - 4.namespace 查看,按键流程
:
->ns
->l
。 - 5.svc 查看,按键流程
:
->svc
->l
。
WeiyiGeek.svc服务查看
6.我们创建一个新的pod并采用k9s进行管理编辑, 按键流程:
-> pods
-> e
然后进行编辑该Pod资源清单,使用vim作为默认编辑器进行编辑,完成后输入:wq保存并退出。
~$ kubectl run myweb --image=nginx:latest --labels="app=web" --port=8080
pod/myweb created
~$ k9s
spec:
containers:
- image: nginx:latest
imagePullPolicy: Always
name: myweb
ports:
- containerPort: 80 # 此处将 8080 端口改成 80
protocol: TCP
resources: {}
7.deployments/statefulset/pod删除操作: ,按键流程:
-> pod|deploy|state
-> ctrl d
。
8.查看集群中RBAC角色绑定信息,按键流程:
-> rbac
-> e
编辑。
WeiyiGeek.RBAC-Clusterrolebindings