k8s相关工作中常用命令
==================================== prometheus ===================================================
reload prometheus
curl -X POST http://10.130.16.246:31190/-/reload
prometheus tsdb命令帮助
./tsdb --help-long
tsdb 查看block信息
./tsdb ls /data
./tsdb ls -h /data
tsdb 备份
./tsdb dump
tsdb 分析block
./tsdb analyze --limit=20 /data 01F0V6SQ072HVVBVKW2SN73AV8
==================================== k8s ==========================================================
官方命令参考:
https://kubernetes.io/zh/docs/reference/kubectl/cheatsheet/
容器外执行命令
kubectl exec etcd-master01 -n kube-system "ls"
使用patch更新 资源yaml
需要写一个yaml文件片段, 格式和资源文件一样
kubectl patch deployment retainkeys-demo --patch "$(cat patch-file-retainkeys.yaml)"
列出以标签过滤后的 Pod 的所有容器
要获取匹配特定标签的 Pod,请使用 -l 参数。以下匹配仅与标签 app=nginx 相符的 Pod。
kubectl get pods --all-namespaces -o=jsonpath="{..image}" -l app=nginx
列出以命名空间过滤后的 Pod 的所有容器
要获取匹配特定命名空间的 Pod,请使用 namespace 参数。以下仅匹配 kube-system 命名空间下的 Pod。
kubectl get pods --namespace kube-system -o jsonpath="{..image}"
查看pod 标签
kubectl get pods --show-labels -n monitoring
查看node的标签
kubectl get no --show-labels
查看pod中容器name,根据标签
kubectl get po -n monitoring -o jsonpath="{..name}" -l app=pod-gpu-metrics-exporter
进入指定容器 -c
kubectl exec -it pod-gpu-metrics-exporter-65r8f -n monitoring -c pod-nvidia-gpu-metrics-exporter sh
service无法访问,查看endpoints
kubectl get ep -n monitoring
替换重启pod,实现configmap热更新
kubectl get po prometheus-0 -n monitoring -o yaml |kubectl replace --force -f -
查看节点labels
kubectl get node --show-labels=true
设置节点lable
kubectl label node 10.73.1.120 nstack/gpu-model=2080ti --overwrite
强制删除 termining pod
kubectl delete pod ha-70-zookeeper-1 --force --grace-period=0
Pod 仍处于 Unknown 状态
kubectl patch pod
查看yaml字段的解释
kubectl explain pods.spec.nodeName
rke k8s组件log:
/var/lib/rancher/rke
驱逐pod,命令node节点开始释放所有pod,并且不接收新的pod进程
kubectl drain [node-name] --force --ignore-daemonsets --delete-local-data
查看api信息
kubectl get --raw /apis/metrics.k8s.io | jq .
kubectl get --raw /api/v1/namespaces/kubeflow/services/ptcnowivuxhvsed | jq .
进入pod指定的container中
kubectl exec -it prometheus-cloud-0 -n monitoring sh -c busybox
获取 Pod 的唯一标识 uid,可通过命令
kubectl get pod pod名 -o jsonpath={.metadata.uid}
查看卷的持久化信息
findmnt /var/lib/kubelet/pods/24373a77-badf-4a3b-bc8b-eb5c1e97979c/volumes/kubernetes.io~csi/pvc-9a12e07e-67f4-477d-85b2-e3b74d39d18f/mount
get api资源
kubectl get --raw /api/v1/namespaces/kube-system/endpoints/kube-controller-manager | jq .
查看证书有限期
(rke部署)
for i in /etc/kubernetes/ssl/*.pem; do echo $i; openssl x509 -in $i -text -noout|egrep "Not Before|Not After";echo "-----------"; done
(kubeadm部署)
for i in /etc/kubernetes/pki/*.crt;do echo $i; openssl x509 -in $i -text -noout|egrep "Not Before|Not After";echo "-----------";done
查看serviceaccount 用户 secret
kubectl get secret
kubectl describe secret default-token-jtqck
kubectl 自动补全
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
k8s secret、sa token查看
kubectl get secret
kubectl describe secret default-token-jtqck
==================================== k8s service ======================================================
k8s service & DNS
endpoints ip
pod_name.svc_name.namespace_name.svc.cluster.local
rabbitmq-0.rabbitmq.monitoring.svc.cluster.local
cluster ip (pod间通信)
svc_name.namespace_name.svc.cluster.local
rabbitmq.monitoring.svc.cluster.local
sh-4.4# curl prometheus.monitoring.svc.cluster.local:9090
Found.
pod 间通信(待确定)
pod_name.svc_name
rabbitmq-0.rabbitmq
svc_name.namespace_name.svc
prometheus.monitoring.svc
==================================== etcd ======================================================
https://rancher.com/docs/rancher/v2.x/en/troubleshooting/kubernetes-components/etcd/
查看集群成员状态
etcdctl --write-out=table member list
查看端点状态(表格形式输出)
etcdctl --write-out=table --endpoints=$ENDPOINTS endpoint status
etcdctl -w table endpoint status
docker外查看端点状态(也能查看节点角色)
docker exec -it etcd sh -c "etcdctl --write-out=table endpoint status"
列出集群所有节点状态
docker exec -it etcd sh -c "etcdctl -w table endpoint --cluster status"
在使用--cluster时候,ETCDCTL_ENDPOINTS,否者会报4001端口的endpoint错
docker exec -e ETCDCTL_ENDPOINTS=$(docker exec etcd /bin/sh -c "etcdctl member list | cut -d, -f5 | sed -e 's/ //g' | paste -sd ','") etcd etcdctl endpoint status --write-out table
endpoint 健康状态
docker exec -it etcd sh -c "etcdctl -w table endpoint health"
测试集群性能
etcdctl check pref
手动切换leader
etcdctl move-leader
rke etcd debug level
docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl -s -XPUT -d '{"Level":"DEBUG"}' --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) $(docker exec etcd printenv ETCDCTL_ENDPOINTS)/config/local/log
etcd info(default) level
docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl -s -XPUT -d '{"Level":"INFO"}' --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) $(docker exec etcd printenv ETCDCTL_ENDPOINTS)/config/local/log
列出所有 前缀是/ 的keys, 其实就是所有的keys
etcdctl get --prefix --keys-only /
列出所有 configmaps(即前缀是/registry/configmaps)
etcdctl get --prefix --keys-only /registry/configmaps
列出3个前缀是/registry/minions的keys
etcdctl get --prefix --keys-only --limit=3 /registry/minions
获取一个key的value
etcdctl get -w json /registry/persistentvolumes/pvc-1a08fef0-46cd-4724-b91b-b53bacc720e3 | jq .
默认100ms超时配置
--heartbeat-interval and --election-timeout
改logs level 为Warning之上
https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/configuration.md#--log-level
备份
etcdctl --write-out=table snapshot save snapshot.db
查看备份状态
etcdctl --write-out=table snapshot status snapshot.db
==================================== storage ========================================================
csi log查看
kubectl logs instorage-csi-node-d7kr2 -c instorage-csi --tail=100 |grep 'NodeStageVolume'
客户端,iscsi target查看
iscsiadm -m session
客户端,发现target
iscsiadm -m discovery -t sendtargets -p IP:port
iscsiadm -m discovery -t sendtargets -p 192.168.100.254
客户端,挂载target
iscsiadm -m node -T targetname --login
客户端,卸载target
iscsiadm -m node -T targetname --logout
target服务端,查看target
tgt-admin --show
查看设备路径
ll /dev/disk/by-path
查看多路径状态
multipath -ll
查看多路径信心
multipath -v3
查看多路径服务的状态
mpathconf
dd命令创建指定大小的文件
dd if=/dev/zero of=test bs=1M count=1000
删除单路径设备
echo 1 > /sys/block/sdX/device/delete
删除多路径设备
multipath -f /dev/dm-X
以下命令显示所有设备映射器设备及其主、副号码。副号码确定 dm 设备的名称。例如:副号码 3 与多路径的设备 /dev/dm-3 对映
dmsetup ls
mpathd (253:3)
删除多路径failed faulty running
multipath -ll | grep sd | grep failed | awk -F":" '{print $4}' | awk '{print $2}' | while read LUN ;do echo 1 > /sys/block/${LUN}/device/delete; done
删除多路径设备,但是in use的不会被删除,相当于刷新
multipath -F
列出存储池
icfs osd lspools
列出rbd images
rbd -p stack ls
查看设备依赖
lsblk -s
==================================== docker ========================================================
harbor验证
配置docker/etc/docker/daemon.json,添加insecure-registries,否则会出现x509证书问题
{
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
"insecure-registries" : ["registry.navinfo.com","https://gcr.io"],
"live-restore": true
}
登录harbor
docker login registry.navinfo.com
导出已有镜像为tar文件
docker save csiplugin:v2.2.1 -o csiplugin-v2.2.1.tar
加载镜像到本地
docker load -i csiplugin-v2.2.1.tar
给镜像打tag (仓库tag)
docker tag csiplugin:v2.2.1 registry.navinfo.com/instorage/csiplugin:v2.2.1
推送到远程仓库
docker push registry.navinfo.com/instorage/csiplugin:v2.2.1
构建images(在dockerfile目录下)
docker build -t csiplugin:v2.2.0 .
打tag
docker tag csiplugin-v2.2.0.tar:v2.2.0 registry.navinfo.com/instorage/csiplugin:v2.2.0
push镜像到harbor,宿主节点配置了证书
docker push registry.navinfo.com/instorage/csiplugin:v2.2.0
在执行清除镜像之前先查看镜像和容器的数量
docker system df
删除无容器使用的镜像,外加条件:创建于10天前、限于应用程序image
docker image prune -a --force --filter "label=type=appimage" --filter "until=240h"
删除所有不使用的镜像
docker image prune --force --all或者docker image prune -f -a
Docker prune 命令
删除 所有未被 tag 标记和未被容器使用的镜像:
docker image prune
删除 所有未被容器使用的镜像:
docker image prune -a
删除 所有停止运行的容器:
docker container prune
删除 所有未被挂载的卷:
docker volume prune
删除 所有网络:
docker network prune
删除 docker 所有资源:
docker system prune
========================================== clush =========================================
从本地拷贝到远程服务器组
clush -g test --copy /root/test.txt --dest /root/
从远程服务器拷贝到本地
clush -g test -rcopy /root/test.txt --dest /root/
排除某个节点
clush -g test -x 10.73.1.128 -rcopy /root/test.txt --dest /root/
========================================== virtualbox =========================================
关机
VBoxManage.exe controlvm -h
VBoxManage.exe controlvm nineep poweroff
启动
VBoxManage.exe startvm nineep --type headless
列出正在运行的vm
VBoxManage.exe list runningvms
========================================== istio ============================================
查看xds状态
istioctl proxy-status
查看xds配置
istioctl proxy-config
分析和诊断网格
istioctl analyze
istioctl experimental describe pod gcr03xzshy28zx0-v1-55b8f7c6c8-d2q69 -n 24f3af992e9e4ad28e7954fa4fdafb07-127
istio web 工具: ControlZ
========================================== influxdb ==========================================
检查数据
influx_inspect verify -dir /data/influxdb/
influx_inspect verify-seriesfile -dir /data/influxdb/data/
登录数据库
influx -database prometheus -host 'localhost' -port '8086'
查看measurements=metrics(类似于table) metric_name=table_name, label=field, label_value=field_value
show measurements
查看时序数据
show series
查看时序数据的tag (metrics label)
show tag keys
查看metrics name, 及其value 数据类型
show field keys
查询10.60.34.23:9100节点的noad_load1
select * from node_load1 where instance='10.60.34.23:9100'
rebalance
curl -X POST 'http://127.0.0.1:7076/rebalance?circle_id=0&operation=add&ha_addrs=10.60.191.251:7076'
http://www.blog.sun-iot.xyz/posts/61185b64#数据同步机制
debug
curl -XPOST http://127.0.0.1:8086/debug/vars
========================================== ansible ===============================================
dry run
ansible-playbook -i inventory/storage.ini deploy-exporter.yml -t r1-xsky -C
列出tags执行的task
ansible-playbook -i inventory/all.ini test.yml -t exporter_config_resolv --list-tasks
注意tags 和skip tags的先后顺序
ansible-playbook -i inventory/all.ini deploy-exporter.yml --list-tasks --skip-tags r2-xsky -t node_exporter