kubectl 常用命令梳理

kubectl 命令梳理

Kubctl 命令是操作 kubernetes 集群的最直接的途径,下面对相关命令进行简介:
语法

$ kubectl [command] [TYPE] [NAME] [flags]

command:子命令
TYPE:资源类型
NAME:资源名称
flags:命令参数

命令帮助
kubectl命令的帮助很详细,kubectl -h会列出所有的子命令,在任何子命令后跟 -h,都会输出详细的帮助以及用例,遇到问题可以随时查看帮助。

资源对象
kubectl大部分子命令后都可以指定要操作的资源对象,可以用kubectl api-resources命令参考

全局参数
kubectl options命令可以列出可以全局使用的命令参数,比较重要的有:

--cluster='': 指定命令操作对象的集群
--context='':  指定命令操作对象的上下文
-n, --namespace='': 指定命令操作对象的Namespace

资源字段
kubectl explain命令可以输出资源对应的属性字段及定义,在定义资源配置文件时候非常有用。

Kubectl 自动补全

$ source <(kubectl completion bash) # setup autocomplete in bash, bash-completion package should be installed first.
$ source <(kubectl completion zsh)  # setup autocomplete in 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

创建对象

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

$ 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
...
    - "1000000"
---
apiVersion: v1
kind: Pod
...
    - sleep
    - "1000"
EOF

# 创建包含几个 key 的 Secret
$ cat <<EOF | kubectl create -f -
apiVersion: v1
....
EOF

显示和查找资源

# 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 rc -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 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 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 -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 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 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 中所有支持的类型和缩写的别名。

资源类型                          缩写别名          指定 Namespaced
componentstatuses               cs                  FALSE
configmaps                      cm                  TRUE
endpoints                       ep                  TRUE
limitranges                     limits              TRUE
namespaces                      ns                  FALSE
nodes                           no                  FALSE
persistentvolumeclaims          pvc                 TRUE
persistentvolumes               pv                  FALSE
pods                            po                  TRUE
replicationcontrollers          rc                  TRUE
resourcequotas                  quota               TRUE
serviceaccounts                 sa                  TRUE
services                        svc                 TRUE
customresourcedefinitions crd, crds                 FALSE
daemonsets                      ds                  TRUE
deployments                     deploy              TRUE
replicasets                     rs                  TRUE
statefulsets                    sts                 TRUE
horizontalpodautoscalers        hpa                 TRUE
cronjobs                        cj                  TRUE
certificatesigningrequests      csr                 FALSE
events                          ev                  TRUE
ingresses                       ing                 TRUE
networkpolicies                 netpol              TRUE
poddisruptionbudgets            pdb                 TRUE
podsecuritypolicies             psp                 FALSE
priorityclasses                 pc                  FALSE
storageclasses                  sc                  FALSE

格式化输出

要以特定的格式向终端窗口输出详细信息,可以在 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 标志跟着一个整数来指定日志级别。

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

原文地址:https://www.cnblogs.com/shunzi115/p/12392056.html

时间: 2024-10-10 19:00:40

kubectl 常用命令梳理的相关文章

nodetool 常用命令梳理

nodetool 常用命令梳理 Cassandra 自带了多个功能强大集群或数据管理工具,数量掌握有助于诊断和维护Cassandra集群.快速解决各种问题. 命令如下: nodetool: 是一个命令行的工具集,它可以监控Cassandra和执行例行的数据库操作.作为内建的工具,nodetool一般用于在节点上直接运行. nodetool工具集支持大多数重要的JMX指标和操作,并且包含了一些为管理员准备的命令. cassandra utility: Cassandra utility 其实是Ca

ceph集群常用命令梳理

结合网络.官网.手动查询等多方渠道,整理ceph维护管理常用命令,并且梳理常规命令在使用过程中的逻辑顺序.另外整理期间发现ceph 集群的命令体系有点乱,详细情况各自体验. 一:ceph集群启动.重启.停止 1:ceph 命令的选项如下: 选项 简写 描述 --verbose -v 详细的日志. --valgrind N/A (只适合开发者和质检人员)用 Valgrind 调试. --allhosts -a 在 ceph.conf 里配置的所有主机上执行,否 则它只在本机执行. --restar

Kubernetes之kubectl常用命令使用指南:2:故障排查

kubectl是一个用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具.这里我们会通过一些简单的实例来展现其中一些高频命令的使用方法. 更为重要的是这些命令使用的场景以及能够解决什么样的问题.上篇文章我们介绍了创建和删除相关的几条命令,这篇文章我们来看一下出现问题时最常用的另外九条命令. 常用命令 kubectl故障排查相关,本文将会简单介绍一下如下命令 项番 命令 说明 No.1 version 显示客户

Kubernetes之kubectl常用命令

本文转自:http://blog.csdn.net/xingwangc2014/article/details/51204224 kubernetes通过kube-apiserver作为整个集群管理的入口.Apiserver是整个集群的主管理节点,用户通过Apiserver配置和组织集群,同时集群中各个节点同etcd存储的交互也是通过Apiserver进行交互.Apiserver实现了一套RESTfull的接口,用户可以直接使用API同Apiserver交互.另外官方还提供了一个客户端kubec

kubectl常用命令

command kubectl kubectl 输出格式 显示Pod的更多信息 kubectl get pod <pod-name> -o wide 以yaml格式显示Pod的详细信息 kubectl get pod <pod-name> -o yaml kubectl 操作示例 1. 创建资源对象 根据yaml配置文件一次性创建service和rc kubectl create -f my-service.yaml -f my-rc.yaml 根据<directory>

kubectl 常用命令

查看 查看所有kubelet节点 kubectl get nodes 查看所有pod kubectl get pods --all-namespaces kubectl get pods -o wide 查看pod详情 kubectl describe pod podname -n namespace kubectl get -o json pod podname -n namespace kubectl get pods/podname -n namespace kubectl get pod

k8s之kubectl常用命令

node相关 kubectl get nodes -o wide kubectl describe node node01 容器命令 kubectl get pods -A -o wide kubectl describe pod edgedns-xxx -n openname kubectl exec -it pod_name /bin/sh kubectl exec mypod -c pod -it -- /bin/sh kubectl logs mypod -f -n openname 原

kubectl 命令梳理

kubectl 命令梳理 Kubctl 命令是操作 kubernetes 集群的最直接的途径,下面对相关命令进行简介: 语法 $ kubectl [command] [TYPE] [NAME] [flags] command:子命令 TYPE:资源类型 NAME:资源名称 flags:命令参数 命令帮助 kubectl命令的帮助很详细,kubectl -h会列出所有的子命令,在任何子命令后跟 -h,都会输出详细的帮助以及用例,遇到问题可以随时查看帮助. 资源对象 kubectl大部分子命令后都可

K8s之kubectl命令行工具常用命令

kubectl管理 Kubectl是管理k8s集群的命令行工具,通过生成的json格式传递给apiserver进行创建.查看.管理的操作 注意:此处需要用到我们之前部署的K8s多节点的部署环境,如果还未部署的可以参考我的上篇文章:https://blog.csdn.net/JarryZho/article/details/104212822 常用命令行: `查看帮助命令` [[email protected] ~]# kubectl --help kubectl controls the Kub