目录

kubectl 命令技巧大全

Kubectl命令概览

命令行提示

kube-shell

kubectl的身份认证

Kubectl 自动补全

Kubectl 上下文和配置

Kubectl 启动-状态

master

etcd

client

status

Kubectl 维护环境相关命令

创建对象

显示和查找资源

更新资源

kubectl set image

语法

示例

kubectl rollout

修补资源

编辑资源

Scale 资源

删除资源

与运行中的 Pod 交互

kubectl logs

与节点和集群交互

资源类型

格式化输出

Kubectl 详细输出和调试

其他特殊命令:

1. 在没有pod 的yaml文件时,强制重启某个pod

2. kubectl cp 用于pod和外部的文件交换,比如如下示例了如何在进行内外文件交换

3 kubernetes1.16:cs接口废弃,如何查看集群状态

参考


kubectl 命令技巧大全

Kubctl 命令是操作 kubernetes 集群的最直接和最 skillful 的途径,这个60多MB大小的二进制文件,到底有啥能耐呢?请看下文:

Kubectl命令概览

Kubernetes提供的kubectl命令是与集群交互最直接的方式,v1.6版本的kubectl命令参考图如下:

上面Kubectl的子命令主要分为8个类别:

  • 基础命令(初学者都会使用的)
  • 基础命令(中级)
  • 部署命令
  • 集群管理命令
  • 故障排查和调试命令
  • 高级命令
  • 设置命令
  • 其他命令

熟悉这些命令有助于大家来操作和管理kubernetes集群。

命令行提示

为了使用kubectl命令更加高效,我们可以选择安装一下开源软件来增加操作kubectl命令的快捷方式,同时为kubectl命令增加命令提示。

增加kubeclt命令的工具(图片来自网络)
  • kubectx:用于切换kubernetes context
  • kube-ps1:为命令行终端增加$PROMPT字段
  • kube-shell:交互式带命令提示的kubectl终端

全部配置完成后的kubectl终端如下图所示:

增强的kubectl命令

kube-shell

开源项目kube-shell可以为kubectl提供自动的命令提示和补全,使用起来特别方便,推荐给大家。

Kube-shell有以下特性:

  • 命令提示,给出命令的使用说明
  • 自动补全,列出可选命令并可以通过tab键自动补全,支持模糊搜索
  • 高亮
  • 使用tab键可以列出可选的对象
  • vim模式

Mac下安装

pip install kube-shell --user -U

kube-shell页面

kubectl的身份认证

Kubernetes中存在三种安全认证方式:

  • CA证书:API server与其它几个组件之间都是通过这种方式认证的
  • HTTP base:即在API server的启动参数中指定的--token-auth-file=/etc/kubernetes/token.csv文件中明文的用户、组、密码和UID配置
  • bearer token:HTTP请求中header中传递的Autorization:Bearer token,这个token通常保存在创建角色跟serviceaccount绑定的时候生成的secret中。

kubectl通过读取kubeconfig文件中的配置信息在向API server发送请求的时候同时传递认证信息,同时支持CA证书和bearer token的认证方式,请参考使用kubeconfig文件配置跨集群认证。

Kubectl 自动补全

$ source <(kubectl completion bash) # setup autocomplete in bash, bash-completion package should be installed first.
$ source <(kubectl completion zsh)  # setup autocomplete in zsh

或者

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

建议使用oh-my-zsh,增加对kubectl命令自动补全支持。

修改~/.zshrc文件,增加如下两行:

plugins=(kubectl)
source <(kubectl completion zsh)

保存后重启终端即可生效。

Kubectl 上下文和配置

设置 kubectl 命令交互的 kubernetes 集群并修改配置信息。参阅 使用 kubeconfig 文件进行跨集群验证 获取关于配置文件的详细信息。

$ kubectl config view # 显示合并后的 kubeconfig 配置# 同时使用多个 kubeconfig 文件并查看合并后的配置
$ KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view# 获取 e2e 用户的密码
$ kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'$ kubectl config current-context              # 显示当前的上下文
$ kubectl config use-context my-cluster-name  # 设置默认上下文为 my-cluster-name# 向 kubeconf 中增加支持基本认证的新集群
$ kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword# 使用指定的用户名和 namespace 设置上下文
$ kubectl config set-context gce --user=cluster-admin --namespace=foo \&& kubectl config use-context gce

Kubectl 启动-状态

master

systemctl daemon-reload

systemctl start kube-apiserver

systemctl start kube-controller-manager

systemctl start kube-scheduler

etcd

systemctl start etcd.service

client

systemctl start kube-proxy -l

systemctl start docker -l

systemctl start kubelet -l

status

systemctl status etcd.service

systemctl status kube-apiserver -l

systemctl status kube-controller-manager -l

systemctl status kube-scheduler

systemctl status kube-proxy -l

systemctl status docker -l

systemctl status kubelet -l

Kubectl 维护环境相关命令

重启kubelet服务

  • systemctl daemon-reload
  • systemctl restart kubelet

修改启动参数

  • vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# 查看集群信息

  • kubectl cluster-info

# 查看各组件信息和状态

  • kubectl get componentstatuses

#查看kubelet进程启动参数

  • ps -ef | grep kubelet

查看日志:

  • journalctl -u kubelet -f

设为不可调度状态:

  • kubectl cordon node1

将pod赶到其他节点:

  • kubectl drain node1

解除不可调度状态

  • kubectl uncordon node1

master运行pod

  • kubectl taint nodes master.k8s node-role.kubernetes.io/master-

master不运行pod

  • kubectl taint nodes master.k8s node-role.kubernetes.io/master=:NoSchedule

创建对象

Kubernetes 的清单文件可以使用 json 或 yaml 格式定义。可以以 .yaml.yml、或者 .json 为扩展名。

通过yaml文件创建:

kubectl create -f xxx.yaml (不建议使用,无法更新,必须先delete)

kubectl apply -f xxx.yaml (创建+更新,可以重复使用)

$ kubectl create -f ./my-manifest.yaml           # 创建资源
$ kubectl create -f ./my1.yaml -f ./my2.yaml     # 使用多个文件创建资源
$ kubectl create -f ./dir                        # 使用目录下的所有清单文件来创建资源
$ kubectl create -f https://git.io/vPieo         # 使用 url 来创建资源
$ kubectl run nginx --image=nginx                # 启动一个 nginx 实例
$ kubectl explain pods,svc                       # 获取 pod 和 svc 的文档# 从 stdin 输入中创建多个 YAML 对象
$ cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:name: busybox-sleep
spec:containers:- name: busyboximage: busyboxargs:- sleep- "1000000"
---
apiVersion: v1
kind: Pod
metadata:name: busybox-sleep-less
spec:containers:- name: busyboximage: busyboxargs:- sleep- "1000"
EOF# 创建包含几个 key 的 Secret
$ cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Secret
metadata:name: mysecret
type: Opaque
data:password: $(echo "s33msi4" | base64)username: $(echo "jane" | base64)
EOF

显示和查找资源

#查看资源
kubectl get nodes|namespaces|services|pods|rc|deployments|replicasets(rs) -o wide

#查看资源详细描述
kubectl describe ${type} ${name} -o wide

查看kube-system namespace下面的pod/svc/deployment 等等(-o wide 选项可以查看存在哪个对应的节点

kubectl get pod/svc/deployment -n kube-system

查看所有namespace下面的pod/svc/deployment等等

kubectl get pod/svc/deployment --all-namcpaces

# Get commands with basic output
$ kubectl get services                          # 列出所有 namespace 中的所有 service
$ kubectl get pods --all-namespaces             # 列出所有 namespace 中的所有 pod
$ kubectl get pods -o wide                      # 列出所有 pod 并显示详细信息
$ kubectl get deployment my-dep                 # 列出指定 deployment
$ kubectl get pods --include-uninitialized      # 列出该 namespace 中的所有 pod 包括未初始化的# 使用详细输出来描述命令
$ kubectl describe nodes my-node
$ kubectl describe pods my-pod$ kubectl get services --sort-by=.metadata.name # List Services Sorted by Name# 根据重启次数排序列出 pod
$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'# 获取所有具有 app=cassandra 的 pod 中的 version 标签
$ kubectl get pods --selector=app=cassandra -o \jsonpath='{.items[*].metadata.labels.version}'# 获取所有节点的 ExternalIP
$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'# 列出属于某个 PC 的 Pod 的名字
# “jq”命令用于转换复杂的 jsonpath,参考 https://stedolan.github.io/jq/
$ sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}
$ echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})# 查看哪些节点已就绪
$ JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"# 列出当前 Pod 中使用的 Secret
$ kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq

更新资源

#删除资源
kubectl delete ${type} ${name} -o wide

#给node/pod添加标签 (增加lable值 [key]=[value])

  • kubectl label nodes kube-node node=kube-node
  • kubectl label pod redis-master-1033017107-q47hh role=master

#给node/pod删除标签(删除lable值)

  • kubectl label nodes kube-node node-
  • kubectl label pod redis-master-1033017107-q47hh role-

#根据标签查询节点

  • kubectl get pods --show-labels  #查看pod所有标签信息
    kubectl get pods -l app  #过滤包含app的标签
    kubectl get pods -L app    #过滤包含app的标签及显示值
$ kubectl rolling-update frontend-v1 -f frontend-v2.json           # 滚动更新 pod frontend-v1
$ kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2  # 更新资源名称并更新镜像
$ kubectl rolling-update frontend --image=image:v2                 # 更新 frontend pod 中的镜像
$ kubectl rolling-update frontend-v1 frontend-v2 --rollback        # 退出已存在的进行中的滚动更新
$ cat pod.json | kubectl replace -f -                              # 基于 stdin 输入的 JSON 替换 pod# 强制替换,删除后重新创建资源。会导致服务中断。
$ kubectl replace --force -f ./pod.json# 为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口
$ kubectl expose rc nginx --port=80 --target-port=8000# 更新单容器 pod 的镜像版本(tag)到 v4
$ kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -$ kubectl label pods my-pod new-label=awesome                      # 添加标签
$ kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq       # 添加注解
$ kubectl autoscale deployment foo --min=2 --max=10                # 自动扩展 deployment “foo”

kubectl set image

更新现有的资源对象的容器镜像。

可使用资源对象包括(不区分大小写):

pod (po)、replicationcontroller (rc)、deployment (deploy)、daemonset (ds)、job、replicaset (rs)

语法

$ image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N

示例

将deployment中的nginx容器镜像设置为“nginx:1.9.1”。

kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1

所有deployment和rc的nginx容器镜像更新为“nginx:1.9.1”

kubectl set image deployments,rc nginx=nginx:1.9.1 --all

将daemonset abc的所有容器镜像更新为“nginx:1.9.1”

kubectl set image daemonset abc *=nginx:1.9.1

从本地文件中更新nginx容器镜像

kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml

kubectl rollout

对资源进行管理

可用资源包括:

  • deployments
  • daemonsets

子命令

  • history(查看历史版本)
  • pause(暂停资源)
  • resume(恢复暂停资源)
  • status(查看资源状态)
  • undo(回滚版本)

语法

$ rollout SUBCOMMAND

示例

回滚到之前的deployment

kubectl rollout undo deployment/abc

查看daemonet的状态

kubectl rollout status daemonset/foo

暂停正在滚动升级的deployment

kubectl rollout pause deployment  web-demo -n dev

修补资源

使用策略合并补丁并修补资源。

$ kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' # 部分更新节点# 更新容器镜像; spec.containers[*].name 是必须的,因为这是合并的关键字
$ kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'# 使用具有位置数组的 json 补丁更新容器镜像
$ kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'# 使用具有位置数组的 json 补丁禁用 deployment 的 livenessProbe
$ kubectl patch deployment valid-deployment  --type json   -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'

编辑资源

在编辑器中编辑任何 API 资源。

$ kubectl edit svc/docker-registry                      # 编辑名为 docker-registry 的 service
$ KUBE_EDITOR="nano" kubectl edit svc/docker-registry   # 使用其它编辑器

Scale 资源

$ kubectl scale --replicas=3 rs/foo                                 # Scale a replicaset named 'foo' to 3
$ kubectl scale --replicas=3 -f foo.yaml                            # Scale a resource specified in "foo.yaml" to 3
$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  # If the deployment named mysql's current size is 2, scale mysql to 3
$ kubectl scale --replicas=5 rc/foo rc/bar rc/baz                   # Scale multiple replication controllers

删除资源

#删除资源
kubectl delete ${type} ${name} -o wide

删除kube-system 下Evicted状态的所有pod:

kubectl get pods -n kube-system |grep Evicted| awk '{print $1}'|xargs kubectl delete pod -n kube-system

$ kubectl delete -f ./pod.json                                              # 删除 pod.json 文件中定义的类型和名称的 pod
$ kubectl delete pod,service baz foo                                        # 删除名为“baz”的 pod 和名为“foo”的 service
$ kubectl delete pods,services -l name=myLabel                              # 删除具有 name=myLabel 标签的 pod 和 serivce
$ kubectl delete pods,services -l name=myLabel --include-uninitialized      # 删除具有 name=myLabel 标签的 pod 和 service,包括尚未初始化的
$ kubectl -n my-ns delete po,svc --all                                      # 删除 my-ns namespace 下的所有 pod 和 serivce,包括尚未初始化的

与运行中的 Pod 交互

kubectl logs

输出pod中一个容器的日志。如果pod只包含一个容器则可以省略容器名。

kubectl logs [-f] [-p] POD [-c CONTAINER]

kubectl logs 选项

  -c, --container="": 容器名。-f, --follow[=false]: 指定是否持续输出日志。--interactive[=true]: 如果为true,当需要时提示用户进行输入。默认为true。--limit-bytes=0: 输出日志的最大字节数。默认无限制。-p, --previous[=false]: 如果为true,输出pod中曾经运行过,但目前已终止的容器的日志。--since=0: 仅返回相对时间范围,如5s、2m或3h,之内的日志。默认返回所有日志。只能同时使用since和since-time中的一种。--since-time="": 仅返回指定时间(RFC3339格式)之后的日志。默认返回所有日志。只能同时使用since和since-time中的一种。--tail=-1: 要显示的最新的日志条数。默认为-1,显示所有的日志。--timestamps[=false]: 在日志中包含时间戳。
# 返回仅包含一个容器的pod nginx的日志快照
$ kubectl logs nginx# 返回pod ruby中已经停止的容器web-1的日志快照
$ kubectl logs -p -c ruby web-1# 持续输出pod ruby中的容器web-1的日志
$ kubectl logs -f -c ruby web-1# 仅输出pod nginx中最近的20条日志
$ kubectl logs --tail=20 nginx# 输出pod nginx中最近一小时内产生的所有日志
$ kubectl logs --since=1h nginx
$ kubectl logs my-pod                                 # dump 输出 pod 的日志(stdout)
$ kubectl logs my-pod -c my-container                 # dump 输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
$ kubectl logs -f my-pod                              # 流式输出 pod 的日志(stdout)
$ kubectl logs -f my-pod -c my-container              # 流式输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
$ kubectl run -i --tty busybox --image=busybox -- sh  # 交互式 shell 的方式运行 pod
$ kubectl attach my-pod -i                            # 连接到运行中的容器
$ kubectl attach -it nginx -c shell                   # 连接到 shell 容器的 tty
$ kubectl port-forward my-pod 5000:6000               # 转发 pod 中的 6000 端口到本地的 5000 端口
$ kubectl exec my-pod -- ls /                         # 在已存在的容器中执行命令(只有一个容器的情况下)
$ kubectl exec my-pod -c my-container -- ls /         # 在已存在的容器中执行命令(pod 中有多个容器的情况下)
$ kubectl top pod POD_NAME --containers               # 显示指定 pod 和容器的指标度量

与节点和集群交互

$ kubectl cordon my-node                                                # 标记 my-node 不可调度
$ kubectl drain my-node                                                 # 清空 my-node 以待维护
$ kubectl uncordon my-node                                              # 标记 my-node 可调度
$ kubectl top node my-node                                              # 显示 my-node 的指标度量
$ kubectl cluster-info                                                  # 显示 master 和服务的地址
$ kubectl cluster-info dump                                             # 将当前集群状态输出到 stdout
$ kubectl cluster-info dump --output-directory=/path/to/cluster-state   # 将当前集群状态输出到 /path/to/cluster-state# 如果该键和影响的污点(taint)已存在,则使用指定的值替换
$ kubectl taint nodes foo dedicated=special-user:NoSchedule

资源类型

下表列出的是 kubernetes 中所有支持的类型和缩写的别名。

资源类型 缩写别名
clusters
componentstatuses cs
configmaps cm
daemonsets ds
deployments deploy
endpoints ep
event ev
horizontalpodautoscalers hpa
ingresses ing
jobs
limitranges limits
namespaces ns
networkpolicies
nodes no
statefulsets
persistentvolumeclaims pvc
persistentvolumes pv
pods po
podsecuritypolicies psp
podtemplates
replicasets rs
replicationcontrollers rc
resourcequotas quota
cronjob
secrets
serviceaccount sa
services svc
storageclasses
thirdpartyresources

格式化输出

要以特定的格式向终端窗口输出详细信息,可以在 kubectl 命令中添加 -o 或者 -output 标志。

输出格式 描述
-o=custom-columns=<spec> 使用逗号分隔的自定义列列表打印表格
-o=custom-columns-file=<filename> 使用 文件中的自定义列模板打印表格
-o=json 输出 JSON 格式的 API 对象
-o=jsonpath=<template> 打印 jsonpath 表达式中定义的字段
-o=jsonpath-file=<filename> 打印由 文件中的 jsonpath 表达式定义的字段
-o=name 仅打印资源名称
-o=wide 以纯文本格式输出任何附加信息,对于 Pod ,包含节点名称
-o=yaml 输出 YAML 格式的 API 对象

Kubectl 详细输出和调试

使用 -v 或 --v 标志跟着一个整数来指定日志级别。这里 描述了通用的 kubernetes 日志约定和相关的日志级别。

详细等级 描述
--v=0 总是对操作人员可见。
--v=1 合理的默认日志级别,如果您不需要详细输出。
--v=2 可能与系统的重大变化相关的,有关稳定状态的信息和重要的日志信息。这是对大多数系统推荐的日志级别。
--v=3 有关更改的扩展信息。
--v=4 调试级别详细输出。
--v=6 显示请求的资源。
--v=7 显示HTTP请求的header。
--v=8 显示HTTP请求的内容。

其他特殊命令:

1. 在没有pod 的yaml文件时,强制重启某个pod

kubectl get pod PODNAME -n NAMESPACE -o yaml | kubectl replace --force -f -

2. kubectl cp 用于pod和外部的文件交换,比如如下示例了如何在进行内外文件交换

在pod中创建一个文件message.log

[[email protected] tmp]# kubectl exec -it mysql-478535978-1dnm2 sh
# pwd
/
# cd /tmp
# echo "this is a message from `hostname`" >message.log
# cat message.log
this is a message from mysql-478535978-1dnm2
# exit

拷贝出来并确认

[[email protected]-1 tmp]# kubectl cp mysql-478535978-1dnm2:/tmp/message.log message.log
tar: Removing leading `/' from member names
[[email protected]-1 tmp]# cat message.log
this is a message from mysql-478535978-1dnm2

更改message.log并拷贝回pod

[[email protected]-1 tmp]# echo "information added in `hostname`" >>message.log
[[email protected]-1 tmp]# cat message.log
this is a message from mysql-478535978-1dnm2
information added in ku8-1
[[email protected]-1 tmp]# kubectl cp message.log mysql-478535978-1dnm2:/tmp/message.log

确认更改后的信息

[[email protected]-1 tmp]# kubectl exec mysql-478535978-1dnm2 cat /tmp/message.log
this is a message from mysql-478535978-1dnm2
information added in ku8-1

3 kubernetes1.16:cs接口废弃,如何查看集群状态

kubernetes 在1.16版本的时候cs接口算是正式废弃掉了,表现如下

bash-5.0# kubectl  get cs
NAME                 AGE
controller-manager   <unknown>
scheduler            <unknown>
etcd-2               <unknown>
etcd-0               <unknown>
etcd-1               <unknown>

那如果还要使用cs接口怎么办呢,可以试试如下命令

bash-5.0# kubectl get cs -o=go-template='{{printf "NAME\t\t\tHEALTH_STATUS\tMESSAGE\t\n"}}{{range .items}}{{$name := .metadata.name}}{{range .conditions}}{{printf "%-24s%-16s%-20s\n" $name .status .message}}{{end}}{{end}}'
NAME                    HEALTH_STATUS   MESSAGE
scheduler               True            ok
controller-manager      True            ok
etcd-1                  True            {"health":"true"}
etcd-0                  True            {"health":"true"}
etcd-2                  True            {"health":"true"}

4. 日常操作命令
​​​​​​​

# 根据overlay2目录名找容器docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}'# 调试coredns
kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools查看资源使用情况
kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c "echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve --;"#查看资源总情况
kubectl get no -o=custom-columns="NODE:.metadata.name,ALLOCATABLE CPU:.status.allocatable.cpu,ALLOCATABLE MEMORY:.status.allocatable.memory"#查看CPU分配情况
kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c 'echo -n "{}\t" ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- | grep cpu | awk '\''{print $2$3}'\'';'#查看内存分配情况
kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c 'echo -n "{}\t" ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- | grep memory | awk '\''{print $2$3}'\'';'# 线程数统计
printf "    NUM  PID\t\tCOMMAND\n" && ps -eLf | awk '{$1=null;$3=null;$4=null;$5=null;$6=null;$7=null;$8=null;$9=null;print}' | sort |uniq -c |sort -rn | head -10# 配置默认storageclass
kubectl patch storageclass <your-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'#查看容器名
kubectl get po calibre-web-76b9bf4d8b-2kc5j -o json | jq -j ".spec.containers[].name"# 进入容器namespace
docker ps | grep APP_NAME
docker inspect CONTAINER_ID | grep Pid
nsenter -t PID -n# 查找非 running 状态的 Pod
kubectl get pods -A --field-selector=status.phase!=Running | grep -v Complete# 获取节点列表及其内存容量
kubectl get no -o json | \jq -r '.items | sort_by(.status.capacity.memory)[]|[.metadata.name,.status.capacity.memory]| @tsv'# 获取每个节点的Pod数量
kubectl get po -o json --all-namespaces | \jq '.items | group_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort_by(.count)'# 获取前一个容器的日志
kubectl -n my-namespace logs my-pod –previous# 把Secret复制到其他namespace
kubectl get secrets -o json --namespace namespace-old | \jq '.items[].metadata.namespace = "namespace-new"' | \kubectl create-f  -# 获取K8s的token
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token# 清理K8s基础对象
# 清理Evicted 状态的 Pod
kubectl get pods --all-namespaces -o wide | grep Evicted | awk '{print $1,$2}' | xargs -L1 kubectl delete pod -n# 清理 Error 状态的 Pod
kubectl get pods --all-namespaces -o wide | grep Error | awk '{print $1,$2}' | xargs -L1 kubectl delete pod -n# 清理 Completed 状态的 Pod
kubectl get pods --all-namespaces -o wide | grep Completed | awk '{print $1,$2}' | xargs -L1 kubectl delete pod -n# 清理没有被使用的 PV
kubectl describe -A pvc | grep -E "^Name:.*$|^Namespace:.*$|^Used By:.*$" | grep -B 2 "<none>" | grep -E "^Name:.*$|^Namespace:.*$" | cut -f2 -d: | paste -d " " - - | xargs -n2 bash -c 'kubectl -n ${1} delete pvc ${0}'# 清理没有被绑定的 PVC
kubectl get pvc --all-namespaces | tail -n +2 | grep -v Bound | awk '{print $1,$2}' | xargs -L1 kubectl delete pvc -n# 清理没有被绑定的 PV
kubectl get pv | tail -n +2 | grep -v Bound | awk '{print $1}' | xargs -L1 kubectl delete pv# Docker清理
# 查看磁盘使用情况
docker system df# 清理 none 镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi# 清理不再使用的数据卷
docker volume rm $(docker volume ls -q)
# 或者
docker volume prune
# 清理缓存
docker builder prune
# 全面清理
# 删除关闭的容器、无用的存储卷、无用的网络、dangling 镜像(无 tag 镜像)
docker system prune -f

参考

  • Kubectl 概览
  • JsonPath 手册
  • kubectl Cheat Sheet | Kubernetes
  • Kubectl Reference Docs

kubectl :命令技巧大全相关推荐

  1. autojs命令代码大全_mac使用技巧,mac使用常见教程,mac终端命令常见大全

    使用Mac中难免会出现各种意外,今天小编为大家整理了一些常用的mac使用技巧,mac使用常见教程和mac终端命令常见大全,使用Mac的朋友可千万不要错过哦,快来看看吧! Mac终端命令大全 OSX 采 ...

  2. kubectl命令大全

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 kubectl 安装 参考https://blog.csdn.net/luanpeng825485697/article/details/808625 ...

  3. 《Linux 命令行大全》. pdf 正式发布啦!

    今天跟大家推荐个 Linux 命令行教程:<The Linux Command Line>,中文译名:<Linux 命令行大全>. 该书作者出自自美国一名开发者,兼知名 Lin ...

  4. 后端开发必知必学的 Linux 命令行大全

    今天跟大家推荐个 Linux 命令行教程:<The Linux Command Line>,中文译名:<Linux 命令行大全>. 该书作者出自自美国一名开发者,兼知名 Lin ...

  5. mysql数据库优化大全_MySQL数据库优化技巧大全

    简介: MySQL数据库优化技巧大全 MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成). ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进 ...

  6. MySQL数据库优化技巧大全

    简介:MySQL数据库优化技巧大全 MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成). ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行 ...

  7. slqite3库查询数据处理方式_SQLite3命令操作大全

    SQLite3命令操作大全 SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.ql ...

  8. kubectl logs -f tail 显示100_系统管理员应该知道的9个kubectl命令

    kubectl是Kubernetes的一个命令行管理工具,可用于Kubernetes上的应用部署和日常管理.本文列举了9个常见的kubectl命令,并对每个命令进行了简单扼要的介绍,供大家参考.同时, ...

  9. cad统计多条线段总长度插件_超级实用CAD技巧应用汇总!技巧大全、插件合集、快捷键合集等...

    超级实用CAD技巧应用汇总!技巧大全.插件合集.快捷键合集等 各位朋友,CAD福利来啦!超级实用CAD技巧应用汇总,千万不能错过!有技巧大全.插件合集.快捷键合集.字体大全.常用图库大全.常见问题及解 ...

最新文章

  1. 杀疯了!通过游戏“元宇宙”,Deepmind让AI学会玩各种没玩过的游戏,骚操作不断...
  2. 英语期末复习unit 3-4课后习题第一题及背诵段落
  3. gin redis 链接不上_Redis 高并发问题,及解决方案!
  4. 推荐 21 个顶级的 Vue UI 库
  5. 常用JavaScript函数 1 - 15 (自我总结)
  6. css中auto的用法
  7. Dangling meta character '?' near index 0
  8. GitHub 上排名前 100 的 Objective-C 项目简介
  9. Centos6.5搭建mongodb分片
  10. opencv widthstep 理解
  11. Xshell 官方免费版下载流程
  12. 一键清理windows系统垃圾|临时文件bat脚本
  13. C语言项目实战—坦克大战
  14. vue3 + router-view + keepalive parentComponent.ctx.deactivate is not a function
  15. 云有约 | 首攻RSA,天空卫士“秀肌肉”怎么样了?
  16. 前端-优雅的VueJS
  17. 编程作业(python)| 吴恩达 机器学习(6)支持向量机 SVM
  18. jmeter结果树为空_Jmeter查看结果树之查看响应的13种方法[详解]
  19. asp.net+mvc+html辅助,ASP.NET MVC使用Ajax的辅助的解决方法
  20. C语言实现扫描文件下所有目录

热门文章

  1. 忆往昔,看今朝,望未来
  2. Java的NumberFormat介绍
  3. 如何在本地搭建一个EasyPlayer的H5 demo 播放H265视频流?
  4. 内网ip 查 核心交换机 流量_局域网通过IP地址如何找到电脑的位置?
  5. 服务器中病毒要不要重装系统,五种情况必须要给电脑重装系统,这三种不用重做系统,别被骗了!...
  6. Linux基础笔记18 | 磁盘分区管理
  7. 一文讲透:HMM隐马尔科夫模型
  8. 芯科EFRBG22C112 empty工程创建
  9. 将txt文本数据转换为json对象
  10. ATC代表空中交通管制。空管调解员不过是机场可用的空中交通管制塔。在这里,您可以看到不同的航班(如101航班、202航班、707航班和808航班)。假设101航班要在机场的一个特定航站楼降落。然后飞行