文章目录

  • 1. kubectl语法
  • 2. 查看显示类指令示例
  • 3. 执行删除类指令示例
  • 4. 日志labels查看类
  • 5. 重启重建类
  • 6. 查看查找资源
  • 7. 更新资源
  • 8. 删除资源
  • 9. Pod常用操作
  • 10. 节点操作
  • 11. 格式化输出



kuberctl命令官方文档

1. kubectl语法

kubectl是用来管理Kubernetes集群的指令,平时我们日常对k8s资源所有的操作在命令行都是通过该指令完成的。

kubectl <command> <type> <name> <flags>
command:
        create/delete/get/describe/apply
type:
     资源对象类型,严格区分大小写
     daemonsets 缩写ds
     deployments
     events 缩写ev
     endpoints 缩写ep
     horizontalpodautoscalers 缩写hpa 水平扩展
     ingresses 缩写ing
     jobs
     nodes 缩写no
     pods 缩写po
     namespaces 缩写ns
     persistentvolumes 缩写pv
     persistentvolumes 缩写pvc 创建卷组
     resourcequotas 缩写quota
     replicationcontrollers 缩写 rc
     secrets
     service 缩写svc
     serviceaccounts 缩写sa
name:
     资源对象名称,严格区分大小写
flags:
      可选参数
      -n 指定namespace

kubectl子命令

annotate 添加或更新资源对象的信息

apply 从配置文件更新资源对象
      kubectl apply -f <filename>
      
attach 连接一个正在运行的pod到container
      kubectl attach pod -c <container>
      
cluster-info 显示集群信息
      kubectl cluster-info
      
completion 输出shell命令执行后的返回码
      kubectl completion bash
      
config 修改kubeconfig配置文件

create 从配置文件创建资源对象
      kubectl create -f xxxx.yml
      
delete 从配置文件删除资源对象
      kubectl delete -f xxxx.yml
      
describe 查看资源对象详细信息
      kubectl describe pods -n <命名空间名>
      
edit 编辑资源对象属性
      kubectl edit sa admin -n kube-system
      
exec 执行一个容器中的命令
      kubectl exec <pod名> ls -n <命名空间名称>
     
label 为了资源对象创建label 方便调度
      kubectl label node node1.example.com hello
      查看 kubectl get nodes --show-labels

2. 查看显示类指令示例

查看所有 pod 列表,  -n 后跟 namespace, 查看指定的命名空间
kubectl get pod
kubectl get pod -n kube-system    #查看指定命名空间的pod
kubectl get pod -o wide    #查看更详细的信息,比如pod所在节点
kubectl get pod --show-labels    #获取pod并查看pod的标签
查看 RC 和 service 列表, -o wide 查看详细信息
kubectl get rc,svc
kubectl get pod,svc -o wide
kubectl get pod <pod name> -o yaml
显示 Node 的详细信息
kubectl describe node 192.168.0.212 #可以跟Node IP或者主机名
显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志
kubectl describe pod <pod-name>
eg:
kubectl describe pod redis-master-tqds9

3. 执行删除类指令示例

根据 yaml 创建资源, apply 可以重复执行,create 不行
kubectl create -f pod.yaml
kubectl apply -f pod.yaml
基于 pod.yaml 定义的名称删除指定资源
kubectl delete -f pod.yaml
删除所有包含某个 label 的pod 和 service
kubectl delete pod,svc -l name=<label-name>
删除默认命名空间下的所有 Pod
kubectl delete pod --all
执行 pod 命令
kubectl exec <pod-name> -- date
kubectl exec <pod-name> -- bash
kubectl exec <pod-name> -- ping 10.24.48.3
通过bash获得 pod 中某个容器的TTY,相当于登录容器
kubectl exec -it <pod-name> -c <container-name> -- bash
eg:
kubectl exec -it redis-master-cln81 -- bash
重启 pod
kubectl get pod  -n  -o yaml | kubectl replace --force -f -

4. 日志labels查看类

查看容器的日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> # 实时查看日志
kubectl log  <pod-name>  -c <container_name> # 若 pod 只有一个容器,可以不加 -c
kubectl logs -l app=frontend # 返回所有标记为 app=frontend 的 pod 的合并日志。
查看节点 labels
kubectl get node --show-labels

5. 重启重建类

重启 pod
kubectl get pod <POD名称> -n <NAMESPACE名称> -o yaml | kubectl replace --force -f -
创建命令
kubectl apply -f ./my-manifest.yaml           # 创建资源
kubectl apply -f ./my1.yaml -f ./my2.yaml     # 使用多个文件创建
kubectl apply -f ./dir                        # 基于目录下的所有清单文件创建资源
kubectl apply -f https://git.io/vPieo         # 从 URL 中创建资源
kubectl create deployment nginx --image=nginx # 启动单实例 nginx
kubectl explain pods,svc                      # 获取 pod 清单的文档说明

6. 查看查找资源

# get 命令的基本输出
kubectl get services                          # 列出当前命名空间下的所有 services
kubectl get pods --all-namespaces             # 列出所有命名空间下的全部的 Pods
kubectl get pods -o wide                      # 列出当前命名空间下的全部 Pods,并显示更详细的信息
kubectl get deployment my-dep                 # 列出某个特定的 Deployment
kubectl get pods                              # 列出当前命名空间下的全部 Pods
kubectl get pod my-pod -o yaml                # 获取一个 pod 的 YAML
# describe 命令的详细输出
kubectl describe nodes my-node
kubectl describe pods my-pod
# 列出当前名字空间下所有 Services,按名称排序
kubectl get services --sort-by=.metadata.name
# 列出 Pods,按重启次数排序
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# 列举所有 PV 持久卷,按容量排序
kubectl get pv --sort-by=.spec.capacity.storage
# 获取包含 app=cassandra 标签的所有 Pods 的 version 标签
kubectl get pods --selector=app=cassandra -o \
  jsonpath='{.items[*].metadata.labels.version}'
# 获取所有工作节点(使用选择器以排除标签名称为 'node-role.kubernetes.io/master' 的结果)
kubectl get node --selector='!node-role.kubernetes.io/master'
# 获取当前命名空间中正在运行的 Pods
kubectl get pods --field-selector=status.phase=Running
# 获取全部节点的 ExternalIP 地址
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# 列出属于某个特定 RC 的 Pods 的名称
# 在转换对于 jsonpath 过于复杂的场合,"jq" 命令很有用;可以在 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})
# 显示所有 Pods 的标签(或任何其他支持标签的 Kubernetes 对象)
kubectl get pods --show-labels
# 检查哪些节点处于就绪状态
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
# 列举所有 Pods 中初始化容器的容器 ID(containerID)
# Helpful when cleaning up stopped containers, while avoiding removal of initContainers.
kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3
# 列出事件(Events),按时间戳排序
kubectl get events --sort-by=.metadata.creationTimestamp
# 比较当前的集群状态和假定某清单被应用之后的集群状态
kubectl diff -f ./my-manifest.yaml

7. 更新资源

kubectl set image deployment/frontend www=image:v2               # 滚动更新 "frontend" Deployment 的 "www" 容器镜像
kubectl rollout history deployment/frontend                      # 检查 Deployment 的历史记录,包括版本
kubectl rollout undo deployment/frontend                         # 回滚到上次部署版本
kubectl rollout undo deployment/frontend --to-revision=2         # 回滚到特定部署版本
kubectl rollout status -w deployment/frontend                    # 监视 "frontend" Deployment 的滚动升级状态直到完成
kubectl rollout restart deployment/frontend                      # 轮替重启 "frontend" Deployment
cat pod.json | kubectl replace -f -                              # 通过传入到标准输入的 JSON 来替换 Pod

8. 删除资源

kubectl delete -f ./pod.json                                              # 删除在 pod.json 中指定的类型和名称的 Pod
kubectl delete pod,service baz foo                                        # 删除名称为 "baz" 和 "foo" 的 Pod 和服务
kubectl delete pods,services -l name=myLabel                              # 删除包含 name=myLabel 标签的 pods 和服务
kubectl delete pods,services -l name=myLabel --include-uninitialized      # 删除包含 label name=myLabel 标签的 Pods 和服务
kubectl -n my-ns delete po,svc --all                                      # 删除在 my-ns 名字空间中全部的 Pods 和服务

9. Pod常用操作

kubectl logs my-pod                                 # 获取 pod 日志(标准输出)
kubectl logs -l name=myLabel                        # 获取含 name=myLabel 标签的 Pods 的日志(标准输出)
kubectl logs my-pod --previous                      # 获取上个容器实例的 pod 日志(标准输出)
kubectl logs my-pod -c my-container                 # 获取 Pod 容器的日志(标准输出, 多容器场景)
kubectl logs -l name=myLabel -c my-container        # 获取含 name=myLabel 标签的 Pod 容器日志(标准输出, 多容器场景)
kubectl logs my-pod -c my-container --previous      # 获取 Pod 中某容器的上个实例的日志(标准输出, 多容器场景)
kubectl logs -f my-pod                              # 流式输出 Pod 的日志(标准输出)
kubectl logs -f my-pod -c my-container              # 流式输出 Pod 容器的日志(标准输出, 多容器场景)
kubectl logs -f -l name=myLabel --all-containers    # 流式输出含 name=myLabel 标签的 Pod 的所有日志(标准输出)
kubectl run -i --tty busybox --image=busybox -- sh  # 以交互式 Shell 运行 Pod
kubectl run nginx --image=nginx -n mynamespace      # 在指定名字空间中运行 nginx Pod
kubectl run nginx --image=nginx                     # 运行 ngins Pod 并将其规约写入到名为 pod.yaml 的文件
  --dry-run=client -o yaml > pod.yaml
kubectl attach my-pod -i                            # 挂接到一个运行的容器中
kubectl port-forward my-pod 5000:6000               # 在本地计算机上侦听端口 5000 并转发到 my-pod 上的端口 6000
kubectl exec my-pod -- ls /                         # 在已有的 Pod 中运行命令(单容器场景)
kubectl exec my-pod -c my-container -- ls /         # 在已有的 Pod 中运行命令(多容器场景)
kubectl top pod POD_NAME --containers               # 显示给定 Pod 和其中容器的监控数据

10. 节点操作

kubectl cordon my-node                                                # 标记 my-node 节点为不可调度
kubectl drain my-node                                                 # 对 my-node 节点进行清空操作,为节点维护做准备
kubectl uncordon my-node                                              # 标记 my-node 节点为可以调度
kubectl top node my-node                                              # 显示给定节点的度量值
kubectl cluster-info                                                  # 显示主控节点和服务的地址
kubectl cluster-info dump                                             # 将当前集群状态转储到标准输出
kubectl cluster-info dump --output-directory=/path/to/cluster-state   # 将当前集群状态输出到 /path/to/cluster-state

11. 格式化输出

要以特定格式将详细信息输出到终端窗口,可以将 -o 或 --output 参数添加到支持的 kubectl 命令

输出格式

描述

-o=custom-columns=

使用逗号分隔的自定义列来打印表格

-o=custom-columns-file=|使用 文件中的自定义列模板打印表格
-o=json|输出 JSON 格式的 API 对象
-o=jsonpath=|打印 jsonpath 表达式中定义的字段
-o=jsonpath-file=|打印在 文件中定义的 jsonpath 表达式所指定的字段。
-o=name|仅打印资源名称而不打印其他内容
-o=wide|以纯文本格式输出额外信息,对于 Pod 来说,输出中包含了节点名称
-o=yaml|输出 YAML 格式的 API 对象