配置自动补全,参考官方文档
kubectl
自动补全:
yum install bash-completion source /usr/share/bash-completion/bash_completion echo 'source <(kubectl completion bash)' >>~/.bashrc echo 'source <(kubectl completion bash)' >>~/.bashrc source ~/.bashrc kubectl completion bash >/etc/bash_completion.d/kubectl
kubectl
设置别名k
自动补全:
echo 'alias k=kubectl' >>~/.bashrc echo 'complete -F __start_kubectl k' >>~/.bashrc source ~/.bashrc
按照官方文档操作之后,在有些环境是可自动补全的,有些环境只能补全namespace、资源名称,但资源类型还是不可自动补全。
# 按Tab键可以补全ns # k get pod -n z zookeeper zqh # 按Tab键可以补全资源名称 # k get pod zookeeper-operator-59cb776cb6-plkg8
但是不能补全资源类型:servicemonitor:
# k get servicemo
在不可自动补全的服务器上查看以下包是否安装:
# rpm -qa | grep bash-completion bash-completion-2.1-8.el7.noarch
正常情况下是安装的,这里查到也是安装了的。
说明和主机配置没有关系,应该是k8s集群的问题。
自动补全的原理是:在按下TAB键时,会给APIServer发请求,做响应的查询操作。
在其他主机上(我这里假设用172.0.1.2
)上,指定kubeconfig
为异常主机(172.0.4.2
)的,键入kubectl get dep
后按下Tab
键,在异常主机上抓来自源主机的包,记录到文件中:
# tcpdump -i any host 172.0.1.2 -nn -w xxx.cap
用wireshark分析xxx.cap:
发现有503的请求,URI中包含:metrics.k8s.io
# curl http://localhost:8080/apis/metrics.k8s.io/v1beta1?timeout=5s -s 503 Service Unavailable
可以定位到是有一个v1beta1.metrics.k8s.io的APIService状态异常。
# kubectl get apiservice | grep metrics.k8s.io v1beta1.metrics.k8s.io monitoring/prometheus-adapter False (MissingEndpoints) 411d # kubectl get apiservice v1beta1.metrics.k8s.io -o yaml apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: name: v1beta1.metrics.k8s.io spec: group: metrics.k8s.io groupPriorityMinimum: 100 insecureSkipTLSVerify: true service: name: prometheus-adapter namespace: monitoring port: 443 version: v1beta1 versionPriority: 100 status: conditions: - lastTransitionTime: "2021-09-12T08:31:24Z" message: endpoints for service/prometheus-adapter in "monitoring" have no addresses with port name "https" reason: MissingEndpoints status: "False" type: Available
prometheus-adapter
和metrics-server
的功能类似,只不过前者可以自定义指标。
二者只需要装一个就行。这里的问题是因为APIService
中写的后端Service
为prometheus-adapter
,但相应的Pod是不正常的。
修改v1beta1.metrics.k8s.io这个APIService的spec.service为:
spec: service: name: metrics-server namespace: kube-system
此时APIService状态正常了:
# kubectl get apiservice | grep metrics.k8s.io v1beta1.metrics.k8s.io kube-system/metrics-server True 412d
此时可以自动补全了:
# kubectl get deployments.apps
作者:小碗汤,一位热爱、认真写作的小伙,专注于写go语言、docker、kubernetes、java等开发、运维知识等提升硬实力的文章,期待你的关注。转载说明:务必注明来源