# 具有基本输出的 get 命令
$ kubectl get services # 列出命名空间下的所有 service
$ kubectl get pods --all-namespaces # 列出所有命名空间下的 pod
$ kubectl get pods -o wide # 列出命名空间下所有 pod,带有更详细的信息
$ kubectl get deployment my-dep # 列出特定的 deployment
$ kubectl get pods --include-uninitialized # 列出命名空间下所有的 pod,包括未初始化的对象
# 有详细输出的 describe 命令
$ 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}'
# 获取命名空间下所有运行中的 pod
$ kubectl get pods --field-selector=status.phase=Running
# 所有所有节点的 ExternalIP
$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# 列出输出特定 RC 的所有 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})
# 检查那些节点已经 ready
$ 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
# 列出通过 timestamp 排序的所有 Event
$ kubectl get events --sort-by=.metadata.creationTimestamp
更新资源
$ 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 # 更新 pod 的镜像
$ kubectl rolling-update frontend-v1 frontend-v2 --rollback # 中止进行中的过程
$ cat pod.json | kubectl replace -f - # 根据传入标准输入的 JSON 替换一个 pod
# 强制替换,先删除,然后再重建资源。会导致服务中断。
$ kubectl replace --force -f ./pod.json
# 为副本控制器(rc)创建服务,它开放 80 端口,并连接到容器的 8080 端口
$ 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 # 将名称为 foo 的 deployment 设置为自动扩缩容