命令参数了解
Basic Commands (Beginner);
create 从文件或stdin创建资源
expose 为deployment,pod创建Service.
run Run a particular image ori the cluster
set Set specific features on objects
Basic Commands (Intermediate):
get 最基本的查询命令。如 kubectl get rs,kubectl get deploy,
explain 查看资源定义。如kubect1 explain replicaset
edit 使用系统编辑器编辑资源。如kubectl edit deploy/foo
delete 删除指定资源,支持文件名、资源名、label selector
Deploy commands:
rollout Deployment,Daemonset的升级过程管理(查看状态、操作历史。暂停升级、恢复升级、回滚等)
rolling-update 客户端滚动升级,仅限ReplicationController
scale 修改Deployment,ReplicaSet,·ReplicationController,Job的实例数
autoscale 为Deploy,RS,RC配置自动伸缩规则(依赖heapster和hpa)
Cluster Management Commands:
certificate Modify certificate resources.
cluster-info 查看集群信息
top 查看资源占用率(依赖heapster)
cordon 标记节点为unschedulable
uncordon 标记节点为schedulable
drain 驱逐节点上的应用,准备下线维护
taint 修改节点taint标记
Troubleshooting and Debugging Commands:
describe 查看资源详情
logs 查看pod内容器的日志
attach Attach到pod内的一个容器··在指定容器内执行命令
port-forward 为pod创建本地端口映射
proxy 为Kubernetes API server创建代理
cp 容器内外/容器间文件拷贝
Advanced Commands:
apply 从文件或stdin创建/更新资源
patch 使用strategic merge patch语法更新对象的某些字段
replace 从文件或stdin更新资源
convert 在不同API版本之间转换对象定义
settings Commands:
label 给资源设置label
annotate 给资源设置annotation
completion 获取shell自动补全脚本(支持bash和zsh)
other Commands:
api-versions Print the supported API versions on the server, in the form of "group/version"
config 修改kubect1配置(kubeconfig文件),如context
help .Help about any command
version 查看客户端和Server端K8s版本
技巧
kubectl写yaml太累,找样例太麻烦?
用run命令生成
kubect1 run --image=nginx my-deploy -o yam1 --dry-run > my-deploy.yaml
用get命令导出
kubectl get statefulset/foo -o=yaml --export> new.yaml
Pod亲和性下面字段的拼写忘记了
kubectl explain pod.spec.affinity.podAffinity
异常排查
master异常
APIServer、ETCD异常:
无法创建、更新、删除资源对象,节点正常工作。
已有资源对象正常工作,不受影响
Controller异常:
deployment、rs、ds等对象操作请求处理正常,但实际未生效
Service关联的后端pod变化,但endpoint不更新
Scheduler异常:
Pod长时间Pending,且无调度失败event信息
Master组件状态查询: kubectl get cs
进程不存在
明确组件生命周期管理方式
故障检测方式是否有效( livenessProbe、restartPolicy )重新启动进程
进程crash: 分析日志
组件功能异常: 分析日志、检查依赖组件是否正常
节点异常原因排查
节点状态查询:kubectl get nodes
常见异常现象
√节点状态为NotReady
√调度到该节点上的Pod显示NodeLostUnkonwn。Pending等状态
常见故障
kubelet进程异常
未安装cni插件
Docker异常
磁盘空间不足
内存不足
定位方式
kubectl describe node查看异常事件
service status查看系统进程状态
journalctl查看系统组件日志t
op查看系统cpu、内存
du、df查看磁盘使用情况
应用异常原因排查
应用模型异常
已存在的POD数超过resource-quota限制: kubectl describe quota -n ${ns}
待创建的POD不满足admission controller陈制: 查看kube-apiserver enable-admission-plugins参数启用了哪些ac
DaemonSet找不到符合要求的节点
kubect describe ds -n,$(ns)
查看ds的nodeSelector
查看节点taints
StatefulSet: podManagementPolicy 、serviceName、volumeClaimTemplates
POD实例异常
状态检查:kubectl get/describe pod-
Pending: 可用资源不足: describe pod可看到调度失败event、不满足亲和性策略、节点有taints
Waiting:
镜像下载失败 、imagePullPolicy配置是否正确
配置的imagePullSecret无法通过认证。查看环境是否存在可用的dockerconfigison类型的secret
CrashBackoff:
kubectl logs查看容器日志、kubectl/docker exec登录容器验证功能
检查pod配置是否正确:command、liveness、readiness
Service访问异常原因排查
通过域名访问Service,nslookup判断域名解析是否正常
没有Endpoint
kubectl -n ${ns} get endpoints ${service-name}
kubectl -n ${ns] get pods --selector=${service-selector}
查看pod status是否为ready状态
查看service port定义与pod定义是否匹配
Endpoint访问不通
kube-proxy是否运行正常,依赖的conntrack是否安装
查看kube-proxy配置参数,确认mode类型,查看转发规则是否正确
userspace:
iptables-save | grep ${servicename}
KUBE-PORTALS-CONTAINER、KUBE-PORTALS-HOST
iptables:
iptables-save | grep ${servicename}
KUBE-SVC-xXx、KUBE-SEP-XXX
ipvs:
ipvsadm -ln
pod服务异常排查
1、查看Service的后端 Endpoint是否正常
kubectl get endpoints <service name>
查看某个服务的后端Endpoint列表,如果列表为空,则可能因为:
Service的 Label Selector与 Pod的 Label不匹配;
后端Pod一直没有达到Readv状态(通过kubectl get pods进一步查看Pod的状态);
Service的 targetPort端口号与Pod 的containerPort不一致等。
2.查看Service的名称能否被正确解析为ClusterlP地址
可以通过在客户端容器中ning <service name>,<namespace>.svc进行检查,
如果能够得到Service的 ClusterIP地址,则说明DNS服务能够正确解析Service的名称;如果不能得到Service的 ClusterIP地址,则可能是因为Kubernetes集群的 DNS服务工作异常。
3.查看kube-proxy 的转发规则是否正确
我们可以将 kube-proxy服务设置为IPVS 或 iptables负载分发模式。
对于IPVS负载分发模式,可以通过 ipvsadm工具查看Node上的IPVS 规则,查看否正确设置Service ClusterIP的相关规则。对于 iptables负载分发模式,可以通过查看Node上的 iptables规则,查看是否正置 Service ClusterIP的相关规则。