说明
- Kubernetes版本为
v1.14.8
- 某些功能在更高的版本才会有,会做特殊说明
- 低版本不管!
QuickStart
获取帮助
1 | kubectl --help |
查看集群信息
1 | kubectl cluster-info |
指定kubeconfig
默认是当前用户家目录下的~/.kube/config
1 | kubectl --config /path/to/kubeconfig |
kubeconfig上下文配置
1 | # 查看kubeconfig信息 |
指定命名空间
默认命名空间是default
1 | kubectl --namespace kube-system |
指定所有命名空间
1 | kubectl --all-namespaces |
指定输出格式
默认不带任何输出参数时,是以较短结果输出
1 | kubectl get pod |
输出结果排序
默认是以Pod名字排序
可以通过指定--sort-by
来做排序
例如让Pod以宿主机名称排序
1 | kubectl get pod -n kube-system -o wide --sort-by="{.spec.nodeName}" |
测试yaml文件,实际不生效
1 | kubectl apply -f demo.yaml --dry-run |
生成模板文件
yaml文件内容字段比较多,很难一下子想到所需的字段,可以通过kubectl命令来生成对应的模板
下面以deployment为例
1 | kubectl -n kube-system get deployment coredns -o yaml --export |
输出示例
1 | apiVersion: extensions/v1beta1 |
创建资源
1 | # 声明yaml定义的资源 |
编辑资源
1 | # 编辑名为CoreDNS的configmaps |
kubectl cheatsheet
自动补全
bash
1 | source <(kubectl completion bash) |
zsh
1 | source <(kubectl completion zsh) |
上下文配置
查看kubeconfig配置
1 | kubectl config view |
配置多kubeconfig
1 | KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 |
查看上下文清单
1 | kubectl config get-contexts |
查看当前上下文
1 | kubectl config current-context |
切换默认上下文
1 | kubectl config use-context my-cluster-name |
创建k8s对象
创建资源
根据文件创建
1 | kubectl apply -n NAMESPACE -f /path/to/yamlfile |
通过stdin创建
1 | cat <<EOF | kubectl apply -f - |
查看资源信息
查看多个kind资源
1 | kubectl get pod,svc |
查看所有命名空间
1 | kubectl get pod --all-namespaces |
设置命令输出格式
1 | kubectl get pod -o wide |
描述资源信息
1 | kubectl describe node k8s-node1 |
根据名字排序
1 | kubectl get services --sort-by=.metadata.name |
只获取资源名字
1 | kubectl get deployments -o jsonpath='{.items[*].metadata.name}' |
根据Pod重启次数排序
1 | kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' |
根据PV大小排序
1 | kubectl get pv -n test --sort-by=.spec.capacity.storage |
根据时间戳排序
1 | kubectl get events --sort-by=.metadata.creationTimestamp |
根据label筛选
1 | kubectl get pods --selector=app=cassandra |
获取版本label
1 | kubectl get pods \ |
获取非master的节点
1 | kubectl get node --selector='!node-role.kubernetes.io/master' |
获取运行状态为Running的Pod
1 | kubectl get pods --field-selector=status.phase=Running |
获取节点的ExternalIP
1 | kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}' |
列出Pod的label
1 | kubectl get pods --show-labels |
列出ready状态的node
1 | JSONPATH="{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}" |
列出被Pod使用的Secret
1 | kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq |
查看diff
1 | kubectl diff -f /path/to/yamlfile |
查看异常的Pod
1 | kubectl get pod --all-namespaces --field-selector status.phase!=Succeeded,status.phase!=Running |
这里通过go-template将退出信息也显示出来
1 | GO_TEMPLATE='{{range .items}}{{printf "[PodName=%s]\n" .metadata.name}}{{range .status.containerStatuses}}{{if .state.terminated.exitCode}}{{printf "containerName=%-20s exitCode=%-5d reason=%-20s\n" .name .state.terminated.exitCode .state.terminated.reason}}{{end}}{{end}}{{end}}' |
更新资源
更新镜像
1 | kubectl set image deployment/frontend www=image:v2 |
查看更新历史
1 | kubectl rollout history deployment/frontend |
回滚更新操作
1 | kubectl rollout undo deployment/frontend |
回滚到指定revision
1 | kubectl rollout undo deployment/frontend --to-revision=2 |
滚动更新状态
1 | kubectl rollout status -w deployment/frontend |
滚动重启Pod
Kubernetes v1.15版本加入重启Pod的功能1 | kubectl rollout restart deployment/frontend |
Patch资源
设置node不可调度
1 | kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' |
修改deployment副本数量
1 | kubectl patch deployments my-deploy -p '{"spec": {"replicas": 3}}' |
更新Pod容器的镜像
1 | kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}' |
去除数组对象
1 | kubectl patch deployment valid-deployment --type json \ |
添加数组对象
1 | kubectl patch sa default --type='json' \ |
资源删改
编辑资源
1 | kubectl edit svc/docker-registry |
伸缩资源
1 | kubectl scale --replicas=3 rs/foo |
删除资源
1 | kubectl delete -f ./pod.json |
与Pod交互
查看Pod日志
1 | kubectl logs my-pod |
根据label看Pod日志
1 | kubectl logs -l name=myLabel |
查看上一个Pod实例日志
1 | kubectl logs my-pod --previous |
查看Pod容器日志
1 | kubectl logs my-pod -c my-container |
查看Pod所有容器日志
1 | kubectl logs my-pod --all-containers |
在Pod上运行命令
1 | kubectl exec my-pod -- ls / |
在Pod指定容器上运行命令
1 | kubectl exec my-pod -c my-container -- ls / |
查看Pod metrics数据
1 | kubectl top pod POD_NAME --containers |
与Node交互
设置node不可调度
1 | kubectl cordon my-node |
恢复node可调度
1 | kubectl uncordon my-node |
驱逐node的Pod
1 | kubectl drain my-node |
查看node metrics数据
1 | kubectl top node my-node |
修改taint
1 | kubectl taint nodes foo dedicated=special-user:NoSchedule |
资源类型
查看资源类型
1 | kubectl api-resources |
命令输出格式
Output format | Description |
---|---|
-o=custom-columns= | Print a table using a comma separated list of custom columns |
-o=custom-columns-file= | Print a table using the custom columns template in the file |
-o=json | Output a JSON formatted API object |
-o=jsonpath= | Print the fields defined in a jsonpath expression |
-o=jsonpath-file= | Print the fields defined by the jsonpath expression in the file |
-o=name | Print only the resource name and nothing else |
-o=wide | Output in the plain-text format with any additional information, and for pods, the node name is included |
-o=yaml | Output a YAML formatted API object |
命令输出日志级别
Verbosity | Description |
---|---|
--v=0 | Generally useful for this to always be visible to a cluster operator. |
--v=1 | A reasonable default log level if you don’t want verbosity. |
--v=2 | Useful steady state information about the service and important log messages that may correlate to significant changes in the system. This is the recommended default log level for most systems. |
--v=3 | Extended information about changes. |
--v=4 | Debug level verbosity. |
--v=6 | Display requested resources. |
--v=7 | Display HTTP request headers. |
--v=8 | Display HTTP request contents. |
--v=9 | Display HTTP request contents without truncation of contents. |