2. kubectl 使用备忘手册
=======================
1. 设置快捷别名
---------------
有一些命令的使用频率非常高,可以为其设置短一点的别名,提高输入效率。
::
alias kc="kubectl"
alias ka="kubectl apply -f"
alias kd="kubectl delete -f"
2. 设置自动补全
---------------
想进一步提高输入效率,那么自动补全也少不了。
.. code:: bash
# 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包。
source <(kubectl completion bash)
# 在您的 bash shell 中永久的添加自动补全
echo "source <(kubectl completion bash)" >> ~/.bashrc
设置完后,你使用 kubectl 就可以自动补全一些子命令。
3. 别名也设置补全
-----------------
上面的自动补全只适用于 kubectl
原生命令,若要想让别名命令也能使用补全,需要执行如下命令
.. code:: bash
complete -F __start_kubectl kc
4. 简洁输出与更多输出
---------------------
简洁输出
~~~~~~~~
只打印名称,不打印其他任何内容
.. code:: bash
# 获取所有 namespace 下的 pod 名字
kubectl get pods -A -o=name
更多输出
~~~~~~~~
.. code:: bash
# 包含 ip node 等信息
kubectl get pods -o wide
# 包含 ip role 等信息
kubectl get nodes -o wide
# 在 wide 基础上再显示标签
kubectl get no -o wide --show-labels
5. 高级输出 之 格式
-------------------
yaml
~~~~
.. code:: bash
# 打印 nginx pod 的详细配置,并以 yaml 格式输出
kubectl get pods nginx -o yaml
json
~~~~
.. code:: bash
# 打印 nginx pod 的详细配置,并以 json 格式输出
kubectl get pods nginx -o json
6. 高级输出 之 筛选
-------------------
筛选对象
~~~~~~~~
**使用 –field-selector**
.. code:: bash
# 获取当前命名空间中正在运行的 Pods
kubectl get pods --field-selector=status.phase=Running
**使用 –selector**
.. code:: bash
# 获取所有工作节点(使用选择器以排除标签名称为 'node-role.kubernetes.io/master' 的结果)
kubectl get node --selector='!node-role.kubernetes.io/master'
筛选字段
~~~~~~~~
**使用 jsonpath**
.. code:: bash
# 获取全部节点的 ExternalIP 地址
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
**使用 json + jq**
.. code:: bash
# 列出被一个 Pod 使用的全部 Secret
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
**使用 custom-columns**
.. code:: bash
# 集群中运行着的所有镜像
kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'
# 除 "k8s.gcr.io/coredns:1.6.2" 之外的所有镜像
kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr.io/coredns:1.6.2")].image'
# 输出 metadata 下面的所有字段,无论 Pod 名字为何
kubectl get pods -A -o=custom-columns='DATA:metadata.*'
筛选对象+字段
~~~~~~~~~~~~~
.. code:: bash
# 获取包含 app=cassandra 标签的所有 Pods 的 version 标签
kubectl get pods \
--selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
7. 高级输出 之 排序
-------------------
.. code:: bash
# 列出当前名字空间下所有 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
# 列出事件(Events),按时间戳排序
kubectl get events --sort-by=.metadata.creationTimestamp
8. 从标准输入创建对象
---------------------
有些对象的创建是临时的,不需要事先创建一个 yaml 再
apply,这时候就可以直接从标准输入创建对象
.. code:: bash
# 从标准输入创建多个 YAML 对象
cat <`__
- `kubectl
官方帮助文档 `__