当前位置: 首页 > news >正文

k8s和prometheus面试都会问哪些问题?

k8s和prometheus面试都会问哪些问题?

一、k8s(http://docs.kubernetes.org.cn/)

1、k8s基础命令操作(https://github.com/zeromicro/go-zero)
基本操作
kubectl version - 显示kubectl的版本信息
kubectl cluster-info - 显示集群的基本信息
kubectl get nodes - 显示所有的节点信息
kubectl get pods - 显示所有的pods信息
kubectl create deployment {name} --image={image} - 创建pods
kubectl scale deployment {name} --replicas={num} - 修改pods的数量
kubectl describe pod {name} - 显示指定的pod的详细信息
kubectl logs {name} - 显示指定pod的日志信息
kubectl exec -it {name} – /bin/bash - 进入指定pod的bash终端
kubectl delete deployment {name} - 删除pods
11. kubectl edit svc {name} - 编辑svc

调试和故障排除
kubectl describe node {name} - 显示指定节点的详细信息
kubectl describe deployment {name} - 显示指定deployment的详细信息
kubectl describe service {name} - 显示指定service的详细信息
kubectl get events - 显示所有事件信息
kubectl get events --sort-by=.metadata.creationTimestamp - 显示所有事件信息,并按照创建时间排序
kubectl get pods --all-namespaces - 显示所有namespace下的pods信息
kubectl get deployments --all-namespaces - 显示所有namespace下的deployment信息
kubectl get services --all-namespaces - 显示所有namespace下的service信息
kubectl get nodes -o yaml | grep -A5 -B2 SchedulingDisabled - 显示所有已禁用调度的节点信息
kubectl run -i --tty busybox --image=busybox --restart=Never – sh - 运行一个busybox容器并进行调试
部署和管理
kubectl create deployment {name} --image={image} --replicas={num} --port={port} - 创建deployment
kubectl expose deployment {name} --port={port} --target-port={targetport} --type={type} - 创建service
kubectl set image deployment/{name} {container}={image}:{tag} - 更新deployment中某个容器的镜像
kubectl rollout history deployment/{name} - 显示指定deployment的版本历史
kubectl rollout undo deployment/{name} --to-revision=1 - 回滚指定deployment到指定版本
kubectl rollout pause deployment/{name} - 暂停指定deployment的升级
kubectl rollout resume deployment/{name} - 恢复指定deployment的升级
kubectl rollout status deployment/{name} - 显示指定deployment的升级状态
8. kubectl rollout restart deployment/{name} - 热重启deployment
kubectl exec -it {name} – /bin/bash - 在指定pod中进入bash终端
kubectl apply -f {filename} - 根据指定的yaml文件部署kubernetes资源
安全和访问控制
kubectl create secret generic {name} --from-file={key}={path} - 创建secret对象
kubectl create serviceaccount {name} - 创建serviceaccount对象
kubectl create role {name} --resource={resource} --verb={verb} - 创建role对象
kubectl create rolebinding {name} --role={role} --serviceaccount={namespace}:{sa_name} - 创建rolebinding对象
kubectl get secret {name} -o=jsonpath=’{.data.{key}}’ | base64 --decode - 显示secret中指定key的值
kubectl delete secret {name} - 删除指定的secret对象
kubectl get serviceaccount {name} - 显示指定的serviceaccount对象信息
kubectl create clusterrole {name} --resource={resource} --verb={verb} - 创建clusterrole对象
kubectl create clusterrolebinding {name} --clusterrole={role} --serviceaccount={namespace}:{sa_name} - 创建clusterrolebinding对象
kubectl auth can-i [–namespace=] - 检查当前用户在某个ns是否有执行指定资源操作的权限

  • :表示要执行的操作,例如 create,get,update 等。

  • :表示资源类型,例如 pods,deployments,services 等。

–namespace=:(可选)表示在指定的命名空间中搜索资源。

网络和负载均衡
kubectl get svc {name} -o jsonpath=’{.spec.clusterIP}’ - 显示指定service的cluster IP地址
kubectl get endpoints {name} - 显示指定service的后端地址信息
kubectl get ingress {name} - 显示指定ingress的详细信息
kubectl create ingress {name} --rule={host}/{path}=svc:{service_name}:{port} - 创建ingress条目
kubectl delete ingress {name} - 删除指定的ingress条目
kubectl get svc {name} -o jsonpath=’{.spec.type}’ - 显示指定service的类型信息
kubectl get pods -o jsonpath=’{range .items[]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}’ - 显示所有pods的名称和IP地址信息
kubectl exec -it {name} – nc -z -v {ip} {port} - 在指定pod中使用nc工具测试TCP连接
kubectl exec -it {name} – curl {url} - 在指定pod中使用curl工具测试HTTP连接
kubectl get pods -l {label} - 显示所有带有指定label的pods的信息
容器高级操作
kubectl exec -it <pod_name> – :在运行中的 Pod 内部启动一个新的容器,并在其中执行指定的命令。
kubectl cp <pod_name>:<container_path> <host_path>:将 Pod 内指定路径的文件或目录拷贝到主机上。
kubectl logs <pod_name> <container_name>:查看 Pod 内指定容器的日志输出。
kubectl port-forward <pod_name> <local_port>:<pod_port>:将本地端口与 Pod 内部的特定端口进行转发,从而可以通过本地网络访问 Pod 中的服务。
kubectl describe pod <pod_name>:查看 Pod 的详细信息,例如 Pod 的状态、资源限制和调度信息等。
kubectl top pod <pod_name>:查看 Pod 的 CPU 和内存使用情况。
kubectl get pod <pod_name> -o yaml:获取 Pod 的 YAML 文件,可以用于备份或还原 Pod。
kubectl rollout restart deployment <deployment_name>:强制重启 Deployments 中的所有 Pod,以便应用程序更新能够生效。
kubectl attach <pod_name> -c <container_name>:将当前终端附加到 Pod 中指定的容器上,从而可以直接在该容器内操作。
kubectl apply -f <resource_file.yml>:使用 YAML 或 JSON 文件部署 Pod,支持声明式配置管理。
状态查询和修改
kubectl get deployments.apps {name} - 显示指定deployment的详细信息
kubectl get deployments.apps -A - 显示所有namespace下的deployment信息
kubectl get replicasets.apps {name} - 显示指定replicaset的详细信息
kubectl get replicasets.apps -A - 显示所有namespace下的replicaset信息
kubectl get services -A - 显示所有namespace下的service信息
kubectl get pods -o jsonpath=’{range .items[
]}{.metadata.name}{"\n"}{end}’ - 显示所有pods的名称信息
kubectl get pod {name} -o jsonpath=’{range .status.conditions[?(@.type==“Ready”)]}{.status}{"\n"}{end}’ - 显示指定pod的Ready状态
kubectl get pod {name} -o jsonpath=’{range .status.conditions[?(@.type==“Ready”)]}{.message}{"\n"}{end}’ - 显示指定pod的Ready状态信息
kubectl get pod {name} -o jsonpath=’{range .status.conditions[?(@.type==“Ready”)]}{.reason}{"\n"}{end}’ - 显示指定pod的Ready状态原因信息
kubectl delete pod {name} --force --grace-period=0 - 强制删除指定pod
状态修复和调整
1.kubectl get pods -o jsonpath=’{range .items[?(@.status.phase==“Pending”)]}{.metadata.name}{"\t"}{.reason}{"\n"}{end}’ - 显示所有处于Pending状态的pods
kubectl describe pod {name} - 显示指定pod的详细信息
kubectl describe node {name} - 显示指定节点的详细信息
kubectl describe deployment {name} - 显示指定deployment的详细信息
kubectl delete pod {name} --force --grace-period=0 - 强制删除指定pod
kubectl delete deployment {name} - 删除指定deployment
kubectl delete service {name} - 删除指定service
kubectl rollout restart deployment {name} - 重启指定deployment
kubectl rollout undo deployment {name} - 回滚指定deployment
kubectl scale deployment {name} --replicas={num} - 修改指定deployment的pod数量
自定义资源
kubectl api-versions - 显示kubernetes API上的所有版本
kubectl api-resources - 显示kubernetes API上的所有资源
kubectl get crds - 显示集群中所有自定义资源的定义
kubectl create -f {filename} - 创建自定义资源对象
kubectl get crd {name} - 显示指定自定义资源的定义
日志和监控
kubectl logs {name} - 显示指定pod的日志信息
kubectl logs --tail={num} {name} - 显示指定pod最后几条日志信息
kubectl logs -f {name} - 实时显示指定pod的日志信息
kubectl top nodes - 显示所有节点的CPU和内存使用情况
kubectl top pods - 显示所有pods的CPU和内存使用情况
kubectl get events - 显示所有事件信息
扩展和插件
kubectl plugin list - 查看已安装的插件
kubectl plugin install https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.{tar.gz|zip} - 安装krew插件管理器
kubectl plugin install {name} - 安装指定插件
kubectl krew search {name} - 搜索krew插件
kubectl krew uninstall {name} - 卸载指定插件
高可用和容错
kubectl get endpoints {name} - 显示指定service的后端地址信息
kubectl get svc {name} -o jsonpath=’{.spec.selector}’ - 显示指定service的标签选择器
kubectl get pods -o jsonpath=’{.items[].metadata.labels}’ - 显示所有pods的标签信息
kubectl label pods {name} {label}={value} - 给指定pod打上标签
kubectl taint node {name} key=value:taint_effect - 在指定节点上添加taint特性
kubectl drain <NODE_NAME>: 将节点设置为不可调度状态,以便于维护和升级该节点,并避免丢失重要的运行数据。
kubectl cordon <NODE_NAME>: 阻止新的 Pod 调度到特定的节点上,以避免在节点维护期间出现过多负载。
kubectl uncordon <NODE_NAME>: 允许新的 Pod 调度到指定的节点上,以恢复该节点的正常工作状态。
kubectl get componentstatuses: 获取集群中各个组件(如 kube-apiserver、kube-controller-manager、kube-scheduler 等)的当前健康状态,以确保集群的高可用性和稳定性。
kubectl debug -c -it – /bin/bash:在指定的 Pod 中的容器中运行一个新的 bash 进程,以便进行调试。
Web界面
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml - 部署kubernetes dashboard
kubectl proxy - 打开kubernetes API服务的代理端口
访问 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ - 使用Web界面访问kubernetes dashboard
资源限制和优化
kubectl describe pod {name} - 显示指定pod的详细信息
kubectl describe node {name} - 显示指定节点的详细信息
kubectl get pod {name} -o jsonpath=’{.spec.containers[
].resources.limits.cpu}’ - 显示指定pod的CPU限制
kubectl get pod {name} -o jsonpath=’{.spec.containers[].resources.limits.memory}’ - 显示指定pod的内存限制
kubectl get pod {name} -o jsonpath=’{.spec.containers[
].resources.requests.cpu}’ - 显示指定pod的CPU请求
kubectl get pod {name} -o jsonpath=’{.spec.containers[].resources.requests.memory}’ - 显示指定pod的内存请求
kubectl get node {name} -o jsonpath=’{.status.allocatable.cpu}’ - 显示指定节点可用的CPU数量
集群管理和维护
kubectl cluster-info - 显示集群的基本信息
kubectl get nodes - 显示所有的节点信息
kubectl get pods - 显示所有的pods信息
kubectl get deployments - 显示所有的deployment信息
kubectl get services - 显示所有的service信息
kubectl get namespaces - 显示所有的namespace信息
kubectl get events - 显示所有的事件信息
kubectl get configmaps - 显示所有的configmap信息
kubectl get secrets - 显示所有的secret信息
kubectl apply -f {filename} - 根据指定的yaml文件部署kubernetes资源
镜像和存储
kubectl get nodes -o jsonpath=’{.items[
].status.allocatable.attachable-volumes-aws-ebs}’ - 显示可用的AWS EBS存储卷数量
kubectl get pods -o jsonpath=’{.items[].spec.volumes[].name}’ - 显示所有pods中使用的卷名称
kubectl get storageclass - 显示所有的storageclass信息
kubectl get persistentvolumeclaim - 显示所有的pvc信息
kubectl get persistentvolume - 显示所有的pv信息
自动化和脚本化
kubectl apply -f {filename} - 使用yaml文件自动创建kubernetes资源
kubectl delete -f {filename} - 使用yaml文件自动删除kubernetes资源
kubectl create deployment {name} --image={image} --dry-run -o yaml > {filename} - 生成deployment的yaml文件
kubectl create service {name} --tcp={port}:{targetport} --dry-run -o yaml > {filename} - 生成service的yaml文件
kubectl create secret generic {name} --from-literal=key=value --dry-run -o yaml > {filename} - 生成secret的yaml文件
kubectl create cronjob [job_name] --image=[image_name] --schedule=’*/1 * * * *’ --restart=OnFailure --dry-run -o yaml > [file_name].yaml:创建一个CronJob实例,并将其定义文件保存到指定的YAML文件中。
kubectl annotate <RESOURCE_TYPE> <RESOURCE_NAME> =: 给指定类型的资源对象添加注释。
部署和发布
kubectl create deployment {name} --image={image} --replicas={num} --port={port} - 创建deployment
kubectl scale deployment {name} --replicas={num} - 修改deployment的pod数量
kubectl autoscale deployment {name} --cpu-percent={percent} --min={min} --max={max} - 自动扩缩deployment的pod数量
kubectl create service {name} --tcp={port}:{targetport} - 创建service
kubectl expose deployment {name} --port={port} --target-port={targetport} --type={type} - 创建service
k8s中kubectl&&bash命名空间批量操作
kubectl config set-context --current --namespace=argocd 命名空间切换
2. kubectl get pods -A | grep Terminating awk ‘{print "pod: " $2 " -n " $1 }’
| xargs -n1 -I{} bash -c “echo {}” 查看命名空间pod状态为Terminating的pod
3. kubectl get pods -A | grep Terminating awk ‘{print “kubectl delete pod " $2 " -n " $1 " --force” }’ \

| xargs -n1 -I{} bash -c “{}” 删除命名空间pod状态为Terminating的pod

2、k8s资源清单详解
2.1. pod资源对象yaml详解
apiVersion: v1 #必选,版本号,例如v1

kind: Pod #必选,指定创建资源的角色/类型

metadata: #必选,资源的元数据/属性

name: string #必选,资源的名字,在同一个namespace中必须唯一

namespace: string #必选,Pod所属的命名空间

labels: #自定义标签,使这个标签在service网络中备案,以便被获知

  • name: string #自定义标签名字

annotations: #设置自定义注解列表

  • name: string #设置自定义注解名字

spec: #必选,设置该资源的详细定义

containers: #必选,Pod中容器列表

  • name: string #必选,容器名称

image: string #必选,容器的镜像名称

imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像

command: [string] #容器的启动命令列表,如不指定,使用打包时使用的启动命令

args: [string] #容器的启动命令参数列表

workingDir: string #容器的工作目录

volumeMounts: #挂载到容器内部的存储卷配置

  • name: string #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名

mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符

readOnly: boolean #是否为只读模式

ports: #需要暴露的端口库号列表

  • name: string #端口号名称

containerPort: int #容器需要监听的端口号

hostPort: int #容器所在主机需要监听的端口号,默认与Container相同

protocol: string #端口协议,支持TCP和UDP,默认TCP

env: #容器运行前需设置的环境变量列表

  • name: string #环境变量名称

value: string #环境变量的值

resources: #资源限制和请求的设置

limits: #资源限制的设置

cpu: string #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数

memory: string #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数

requests: #资源请求的设置

cpu: string #Cpu请求,容器启动的初始可用数量

memory: string #内存清楚,容器启动的初始可用数量

livenessProbe: #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可

exec: #对Pod容器内检查方式设置为exec方式

command: [string] #exec方式需要制定的命令或脚本

httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port

path: string

port: number

host: string

scheme: string

HttpHeaders:

  • name: string

value: string

tcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式

port: number

initialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒

timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒

periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次

successThreshold: 0

failureThreshold: 0

securityContext:

privileged:false

restartPolicy: [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod

nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定

imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定

  • name: string

hostNetwork:false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络

volumes: #在该pod上定义共享存储卷列表

  • name: string #共享存储卷名称 (volumes类型有很多种)

emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值

hostPath: string #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录

path: string #Pod所在宿主机的目录,将被用于同期中mount的目录

secret: #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部

scretname: string

items:

  • key: string

path: string

configMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部

name: string

items:

  • key: string

path: string点

2.2. Deployment资源对象详解
apiVersion: extensions/v1beta1

kind: Deployment

metadata: #元数据

annotations: #注释信息

http://deployment.kubernetes.io/revision: ‘1’

http://k8s.kuboard.cn/ingress: ‘false’

http://k8s.kuboard.cn/service: NodePort

http://k8s.kuboard.cn/workload: nextcloud

labels: #标签信息

http://k8s.kuboard.cn/layer: ‘’

http://k8s.kuboard.cn/name: nextcloud

name: nextcloud #名称

namespace: nextcloud #命名空间

spec: #定义容器模板,该模板可以包含多个容器

replicas: 3 #副本数量

selector: #标签选择器

matchLabels:

http://k8s.kuboard.cn/layer: ‘’

http://k8s.kuboard.cn/name: nextcloud

strategy: #滚动升级策略

type: RollingUpdate #类型

rollingUpdate: #由于replicas为3,则整个升级,pod个数在2 4个之间

maxSurge: 25% #滚动升级时会先启动25%pod

maxUnavailable: 25% #滚动升级时允许的最大Unavailable的pod个数

template: #镜像模板

metadata: #元数据

labels: #标签

http://k8s.kuboard.cn/layer: ‘’

http://k8s.kuboard.cn/name: nextcloud

spec: #定义容器模板,该模板可以包含多个容器

containers: #容器信息

name: nextcloud #容器名称

image: ‘172.16.20.100/library/nextcloud:yan’ #镜像名称

imagePullPolicy: Always #镜像下载策略

ports:

name: http

containerPort: 80

protocol: TCP

env

resources: #CPU内存限制

limits: #限制cpu内存

cpu: 200m

memory: 200m

requests: #请求cpu内存

cpu: 100m

memory: 100m

securityContext: #安全设定

privileged: true #开启享有特权

volumeMounts: #挂载volumes中定义的磁盘

name: html #挂载容器1

mountPath: /var/www/html

name: session #挂载容器1

mountPath: /var/lib/php/session

volumes: #在该pod上定义共享存储卷列表

name: html #共享存储卷名称 (volumes类型有很多种)

persistentVolumeClaim: #volumes类型为pvc

claimName: html #关联pvc名称

name: session

persistentVolumeClaim:

claimName: session

restartPolicy: Always #Pod的重启策略

#Always表示一旦不管以何种方式终止运行,kubelet都将重启,

#OnFailure表示只有Pod以非0退出码退出才重启,

#Nerver表示不再重启该Pod

schedulerName: default scheduler #指定pod调度到节点

2.3. Service资源对象详解
apiVersion: v1

kind: Service

metadata: #元数据

annotations: #注释信息

http://k8s.kuboard.cn/workload: nextcloud

labels: #标签信息

http://k8s.kuboard.cn/layer: ‘’

http://k8s.kuboard.cn/name: nextcloud

name: nextcloud #名称

namespace: nextcloud #命名空间

spec: #定义Service模板

clusterIP: 10.0.181.206 #指定svcip地址 不指定则随机

#NodePort类型:集群外网络

type: NodePort #类型为NodePort

ports:

name: mnwwwp

nodePort: 30001 #当type = NodePort时,指定映射到物理机的端口号

port: 80 #服务监听的端口号

protocol: TCP #端口协议,支持TCP和UDP,默认TCP

targetPort: 80 #需要转发到后端Pod的端口号

#ClusterIP类型:集群内网络

type: ClusterIP

ports:

name: mnwwwp

port: 80

protocol: TCP

targetPort: 80

name: j5smwx

port: 22

protocol: TCP

targetPort: 22

selector: #label selector配置,将选择具有label标签的Pod作为管理

http://k8s.kuboard.cn/layer: ‘’

http://k8s.kuboard.cn/name: nextcloud

sessionAffinity: None #是否支持session

k8s面试题汇总
简述k8s集群相关组件?
k8smaster集群控制节点,负责整个集群的管理和控制,基本上Kubernetes所有的控制命令都是发给它,它来负责具体的执行过程,包含如下组件:

Kubernetes API Server:作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。
Kubernetes Scheduler:为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
Kubernetes Controller:负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。

  • Replication Controller:管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。

  • Deployment Controller:管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。

  • Node Controller:管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。

  • Namespace Controller:管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。

  • Service Controller:管理维护Service,提供负载以及服务代理。

  • EndPoints Controller:管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。

  • Service Account Controller:管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。

  • Persistent Volume Controller:管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。

  • Daemon Set Controller:管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。

- Job Controller:管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目

  • Pod Autoscaler Controller:实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

简述k8sRC的机制?
Replication Controller用来管理 Pod 的副本,保证集群中存在指定数量的 Pod副本。当定义了RC 并提交至 Kubernetes 集群中之后, Master 节点上的 ControllerManager 组件获悉,并同时巡检系统中当前存活的目标 Pod, 并确保目标 Pod 实例的
简述k8s kube-proxy作用?
kube-pro运行在所有节点上,它监apiserver 中service和endpoint 的 变化情况,创建路由规则以提供服务IP和负载均衡功能。简单理解此进程是 Service的透明代理兼负载均衡器,其核心功能是将到某个Service 的访问请求转发到后端的多个Pod实例上。
数量刚好等于此 RC 的期望值,若存在过多的Pod 副本在运行,系统会停止一些 Pod,反之则自动创建一些 Pod。
简述kube-proxy ipvs iptables异同?
iptables 与 IPVS 都是基于Netfilter实现的,但因为定位不同,二者有着本质的差别,iptables 是为防火墙而设计的; IPVS 则专门用于高性能负载均衡,并使用更高效的数据结构 (Hash 表),允许几乎无限的规模扩张。与 iptables 相比,IPVS 拥有以下明显优势:

为大型集群提供了更好的可扩展性和性能;
支持比iptables 更复杂的复制均衡算法(最小负载、最少连接、加权等);
支持服务器健康检查和连接重试等功能;
可以动态修改ipset 的集合,即使iptables 的规则正在使用这个集合。
简述Pod的生命周期和重启策略?
pod状态与生命周期
Pod的状态如下表所示:

状态值 描述
Pending API Server已经创建该Pod,等待调度器调度
ContainerCreating 拉取镜像启动容器中
Running Pod内容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态
Succeeded|Completed Pod内所有容器均已成功执行退出,且不再重启
Failed|Error Pod内所有容器均已退出,但至少有一个容器退出为失败状态
CrashLoopBackOff Pod内有容器启动失败,比如配置文件丢失导致主进程启动失败
Unknown 由于某种原因无法获取该Pod的状态,可能由于网络通信不畅导致
Pod重启策略和镜像拉取策略
Pod的重启策略(RestartPolicy)应用于Pod内的所有容器,并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某个容器异常退出或者健康检查失败时,kubelet将根据RestartPolicy的设置来进行相应的操作。 Pod的重启策略包括Always、OnFailure和Never,默认值为Always。

Always:当容器进程退出后,由kubelet自动重启该容器;使用默认的重启策略,即 restartPolicy: Always ,无论容器是否是正常退出,都会自动重启容器
OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器;
Never:不论容器运行状态如何,kubelet都不会重启该容器。
镜像拉取策略
Always,总是拉取镜像,即使本地有镜像也从仓库拉取
IfNotPresent ,本地有则使用本地镜像,本地没有则去仓库拉取
Never,只使用本地镜像,本地没有则报错
简述静态Pod和普通Pod区别?
普通的Pod:
普通Pode一旦被创建,就会被放入到etcd中存储,随后会被Kubernetes Master调度到某个具体的Node上并进行绑定(Binding),随后该Pod 被对应的Node上的kubelet进程实例化成一组相关的docker容器运行起来。 当Pod里的某个容器停止时,Kubernetes会自动检测到这个问题并且重新启动这个Pod (重启Pod里的所有容器),如果Pod所在的Node宕机,则会将这个Node上所偶的Pod从新调度到其他节点上。
静态Pod (Static Pod)
静态Pod不存放在Kubernetes的etcd存储里,而是存放在某个具体的Node上的文件中,并且只在此Node上启动运行。
静态Pod是由kubelet进行管理的仅存在于特定Node上的Pod。他们不能通过API Server进行管理,无法与ReplicationController(RC)、Deployment、或者DaemonSet进行关联,并且kubelet也无法对它们进行健康检查。静态Pod总是由kubelet进行创建的,并且总是在kubelet所在的Node上运行的
简述k8s创建Pod的流程?
Kubernetes 中创建一个Pod 涉及多个组件之间联动,主要流程如下:

用户通过 kubectl命名发起请求。
2.apiserver通过对应的 kubeconfig 进行认证,认证通过后将 yaml 中的 Pod 信息存

到 etcd。

3.Controller-Manager 通过 apiserver的watch 接口发现了Pod 信息的更新,执行 该资源所依赖的拓扑结构整合,整合后将对应的信息交给 apiserver,apiserver写到

etcd, 此时Pod 已经可以被调度了。

4.Scheduler 同样通过 apiserver的 watch 接口更新到Pod 可以被调度,通过算法给

Pod 分配节点,并将 pod 和对应节点绑定的信息交给 apiserver,apiserver写到

etcd, 然后将 Pod 交给kubelet。

5.kubelet收到 Pod 后,调用CNI 接口给Pod 创建Pod 网络,调用 CRI接口去启动容

器,调用CSI进行存储卷的挂载。

  1. 网络,容器,存储创建完成后Pod 创建完成,等业务进程启动后, Pod 运行成

功。

Msql
1、MySQL遇到锁表快速解决办法
查看表是否在使用。
show open tables where in_use > 0 ;如果查询结果为空。则证明表没有在使用。如果查询结果不为空,继续后续的步骤。
查看数据库当前的进程,看一下有无正在执行的慢SQL记录线程。
show processlist;show processlist 是显示用户正在运行的线程,需要注意的是,除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程(即与您正在使用的MySQL帐户关联的线程),看不到其它用户正在运行的线程。如果不使用FULL关键字,Info字段中只显示每条语句的前100个字符。
当前运行的所有事务
SELECT * FROM information_schema.INNODB_TRX;
当前出现的锁
SELECT * FROM information_schema.INNODB_LOCKs;
锁等待的对应关系
SELECT * FROM information_schema.INNODB_LOCK_waits;
看事务表INNODB_TRX,里面是否有正在锁定的事务线程,看看ID是否在show processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。搜索的结果是在事务表发现了很多任务,这时候最好都kill掉。
批量删除事务表中的事务
通过information_schema.processlist表中的连接信息生成需要处理掉的MySQL连接的语句临时文件,然后执行临时文件中生成的指令。test为数据库名称,根据实际情况修改。

SELECT concat(‘KILL ‘,id,’;’)
FROM information_schema.processlist p
INNER JOIN information_schema.INNODB_TRX x
ON p.id=x.trx_mysql_thread_id
WHERE db=‘test’;

2、快速定位MySQL中的慢SQL
一般来说一句sql执行超过5s就能算慢SQL,需要优化,

为何要对慢SQL优化?
每一个SQL都需要消耗一定的I/O资源,SQL执行的快慢直接决定了资源被占用时间的长短。假设业务要求每秒需要完成100条SQL的执行,而其中10条SQL执行时间过长,从而导致每秒只能完成90条SQL,所有新的SQL将进入排队等待,直接影响业务,然后用户就各种投诉来了。

master数据库->slave数据库 采用读写分离架构,读在从库slave上执行,写在主库master上执行。但由于从库的数据都是在主库复制过去的,主库如果等待较多的情况,会加大从库的复制延时
执行SQL次数多的优先治理
某张表被高并发集中访问的优先治理
1.1如何发现慢查询SQL?
– 修改慢查询时间,只能当前会话有效;
set long_query_time=1;
– 启用慢查询 ,加上global,不然会报错的;
set global slow_query_log=‘ON’;
– 是否开启慢查询;
show variables like “%slow%”;
– 查询慢查询SQL状况;
show status like “%slow%”;
– 慢查询时间(默认情况下MySQL认位10秒以上才是慢查询)
show variables like “long_query_time”;

mysqldumpslow s c t 10 /var/run/mysqld/mysqldslow.log # 取出使用最多的10条慢查询
mysqldumpslow s t t 3 /var/run/mysqld/mysqldslow.log # 取出查询时间最慢的3条慢查询
mysqldumpslow s t t 10 g “left join” /database/mysql/slowlog #得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow s r t 10 g ‘left join’ /var/run/mysqld/mysqldslow.log # 按照扫描行数最多的

Msql定位慢查询语句脚本

1.2 SQL语句常见优化
不使用子查询(内部执行计划器是先查外表再匹配内表,如果外表数据量很大,查询速度会非常慢)
避免使用函数索引
SELECT * FROM t WHERE YEAR(d) >= 2020;
即使d字段有索引,也会全盘扫描,应该优化为:
SELECT * FROM t WHERE d >= ‘2020-01-01’;
使用IN替换OR
SELECT * FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;
非聚簇索引走了3次,使用IN之后只走一次:
SELECT * FROM t WHERE LOC_IN IN (10,20,30);
分组统计时可以禁止排序
SELECT goods_id,count() FROM t GROUP BY goods_id;
默认情况下MySQL会对所有GROUP BY co1,col2 …的字段进行排序,我们可以对其使用
ORDER BY NULL
禁止排序,避免排序消耗资源
SELECT goods_id,count(
) FROM t GROUP BY goods_id ORDER BY NULL;
3、MySQL中锁的类型有哪些?
行锁,如果查询条件用了索引/主键,那么select * from t_user_message for update就会进行行锁。
表锁,如果是普通字段(没有索引/主键),那么select * from t_user_message for update就会进行锁表。
共享锁,在多个事务里面都可以读取共享锁所锁住的内容。select * from t_user_message lock in share mode;
排斥锁,只能在一个事务里对同样的数据进行加锁,假设A事务对某行数据加入了排它锁之后,其他事务就无法再对该行记录加入排它锁。
Elasticsearch
状态和统计相关命令清单
获取版本和集群名称等信息。
GET /
获取集群健康状态等信息,包括集群名称、节点数、数据节点数、分片等的一些统计信息。
GET /_cluster/health
获取节点列表信息。显示了堆内存、磁盘使用情况,CPU 、负载和主机角色。
用途:用来监视负载和磁盘使用情况以及主机角色。
GET /_cat/nodes?v&h=heap.percent,diskUsedPercent,cpu,load_1m,master,name&s=name
Index Level 索引层面健康
GET /_cluster/health?level=indices&pretty
Shard Level 分片层面健康
GET /_cluster/health?level=shards&pretty
获取索引,文档,缓存,段,节点等的集群统计信息的更深入概述。
用途:有助于基本故障排除。
GET /_cluster/stats
获取节点级别的更多统计信息,包括堆使用情况等。
GET /_nodes/stats

线程相关状态&统计命令清单
很长但有用的线程队列视图
GET /_cat/thread_pool?v&h=node_name,name,type,active,size,queue,queue_size,rejected,largest,completed,min,max&s=node_name,name
查看热点线程,用于排查谁在占用CPU资源等
GET /_nodes/hot_threads/
快速获取索引模式。
例如:所有这些logstash *前缀索引的文档总数的方法。

GET /_cat/count/logstash*?v

索引相关状态&统计命令清单
通配符索引列表获取
包含:大小,文档计数,状态等。
GET /_cat/indices/logstash*?v
找到size 最大的索引
GET /_cat/indices/logstash-*?v&h=index,ss&s=ss:desc
获取状态为黄色的索引
GET /_cat/indices?v&health=yellow
红色 red:至少一个主分片不可用。
黄色 yellow:至少一个副本分片不可用。
绿色 green:集群主、副本分片都可用,集群健康。
设置相关清单
集群设置
最基本的集群设置视图——显示非默认的持久性和瞬态设置信息。
GET /_cluster/settings
更大的列表视图——包括所有默认值,并使用平面视图使其更易于阅读。
GET /_cluster/settings?include_defaults=true&flat_settings=true
索引设置
获取指定索引的设置列表信息。

GET /logstash-cron-2022.08.03/_settings

关闭&删除索引
关闭索引
支持单个或者模糊匹配多个索引。
POST /logstash--2022.03./_close
删除索引
支持单个或者模糊匹配多个

DELETE /logstash--2022.04.

故障排查清单
获取:已分配和未分配的分片。
GET /_cat/shards?v&h=n,index,shard,prirep,state,sto,sc,unassigned.reason,unassigned.details&s=sto,index
查看未分配的分片及原因
GET _cat/shards?v&h=index,shard,prirep,state,unassigned.reason&s=state
查看未分配的细节说明信息
GET /_cluster/allocation/explain
查看指定分片未分配的细节
GET /_cluster/alloGET /_cluster/allocation/explain
{ “index”: “logstash-cloudtrail-2022.10.16”, “shard”: 0, “primary”: true} cation/explain { “index”: “logstash-cloudtrail-2022.10.16”, “shard”: 0, “primary”: true}
下线节点
PUT _cluster/settings?pretty
{
“transient”: {
“cluster.routing.allocation.exclude._ip”: “10.0.0.1”
}
}

模板清单
列举已定义的所有模板
GET /_cat/templates?v&s=order,name
列举指定名称的模板信息
GET /_template/logstash

快照&恢复
列出系统中配置的快照存储库。大多数其他API调用都需要这些名称。
GET /_snapshot
获取任何正在运行的快照的状态和统计信息
GET /_snapshot/_status
获取快照的有用信息
GET /_cat/snapshots/my_repository?v&h=id,status,start_time,duration,indicies,successful_shards,failed_shards,total_shards

分片分配与恢复清单
分片分配查看
GET /_cat/allocation?v
分片恢复查看
GET /_cat/recovery?v
运行任务查看
GET /_cat/pending_tasks?v
清理缓存
POST /_cache/clear

集群迁移
https://github.com/medcl/esm

Nginx
影响nginx服务器性能的指标大致有哪些?
网络:网络的流量,网络是否丢包,网络是否有延迟,这些会影响http的请求与调用;
硬件/系统:代理(cpu),静态(磁盘空间、IO),动态(cpu、内存),硬件有没有磁盘损坏,磁盘速率,文件句柄(文件描述符)等;
服务:连接优化(服务与服务之间保持长连接 http1.1【开启长链接会占用端口,状态会变成TIME_WAIT】 #netstat -an命令查看端口号状态),请求优化,Nginx静态资源服务优化等;
程序:接口性能,处理速度,程序执行效率;
数据库:每个架构服务与服务之间或多或少有一些关联,我们需要将整个架构进行分层,找到对应系统或服务的短板,然后进行优化;
优化方案
系统性能优化
文件句柄:Linux系统中一切皆文件,文件句柄可以理解为是一个索引,文件句柄会随着我们频繁调用进程的而增加。
系统默认对文件句柄有着限制,不会让一个进程无限的调用,所以我们需要限制每一个进程和每个服务使用多大的文件句柄,文件句柄也是必须要调整的优化参数。不修改的话当进程达到限制数量就会报错:Error:too many open files
文件句柄的设置方式,1.系统全局性修改。2.用户局部性修改。3.进程局部性修改。

修改系统设置的文件句柄大小的配置文件vim /etc/security/limits.conf

1. 系统全局性修改

*代表所有用户

  • soft nofile 65536
  • hard nofile 65536

###2. 用户局部性修改

针对root用户,soft仅提醒,hard限制,nofile打开最大文件数

root soft nofile 65536
root hard nofile 65536
###3. 进程局部性修改
vim /etc/nginx/nginx.conf加入:
worker_rlimit_nofile 65536; # 针对Nginx进程

lsof -p 查看Nginx进程占用了多少个文件句柄

lsof -p PID | wc -l

调整内核参数: 让time_wait状态重用(让占用的端口复用)

vim /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1 # 让占用的端口复用
net.ipv4.tcp_timestamps = 1 # 时间戳
#查看自定义设置的内核参数
sysctl -p
#查看系统所有的内核参数
sysctl -a
Nginx代理服务优化(应用层)
通常Nginx作为代理服务,负责转发用户的请求,那么在转发的过程中建议开启HTTP长连接,用户减少握手的次数,降低服务器损耗。
配置Nginx代理服务使用长连接方式keepalive connections(应用层面优化)
vim /etc/nginx/conf.d/proxy.conf
upstream test {
server 10.0.0.1:80;
keepalive 32; # 长连接
keepalived_requests 100; # 设置通过一个keepalive连接提供的最大请求数100。在发出最大请求数后,将关闭连接。
keepalive_timeout 60s; # 设置超时,webserver在处理完一个请求后保持这个TCP连接的打开状态。指定每个TCP连接最多可以保持多长时间。
}
server {

location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1; # 对于http协议应该指定为1.1
proxy_set_header Connection “”; # 清除"connection"头字段 , Connection: keep-alive
proxy_set_header Host $http_host; # 代理服务器匹配请求web01服务器的时候,默认加上Host头信息(域名)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 追加客户端ip地址以及全链路ip地址到web服务器记录日志
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;

当Nginx虚拟服务池其中任意一台服务器返回错误码500,502,503,504等错误时,可以分配到下一台服务器程序继续处理,提高平台访问的成功率

proxy_connect_timeout 60s; # nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 60s;# nginx代理等待后端服务器的响应时间(代理响应超时)
proxy_send_timeout 60s;# 后端服务器数据回传给nginx代理超时时间(回传数据给代理超时)
proxy_buffering on; # nginx会把后端返回的内容先放到缓冲区中,然后再返回给客户端,边收边传,不是全部接收再传给客户端
proxy_buffers_size 4k;# 设置nginx代理保存用户头信息的缓存区大小
proxy_buffers 8 8k; # 设置nginx代理缓冲区大小(88 = 64k)

}
}
静态资源优化
Nginx作为静态资源web服务器,用于静态资源处理,传输非常的高效。Nginx作为静态资源web服务器,用于静态资源处理,传输非常的高效。
静态资源类型 | 种类
浏览器渲染 | html、css、js
图片文件 | jpeg、gif、png
视频文件 | flv、Mp4、avi
其他文件 | txt、doc、pd
浏览器缓存过期校验检查机制
设置文件缓存时间(响应码304)
location ~ .
(png|jpg|gif|jpeg)$ {
expires 1d;# 设置静态资源缓存时间为1天
add_header test KaTeX parse error: Expected 'EOF', got '#' at position 7: host; #̲ 添加头信息 } 设置静态文件… {
add_header test $host;
add_header Cache-Control no-store;
add_header Pragma no-cache;
}
静态资源读取
开启sendfile服务:

  • Nginx主配置文件
    vim /etc/nginx/nginx.conf
    sendfile on;
    tcp_nopush on;
    静态资源压缩
    Nginx将响应报文发送至客户端之前启用压缩功能,然后进行传输,这能够有效的节约宽带,并提高响应至客户端的速度。

压缩图片

location ~ .*(png|jpg|gif|jpeg)$ {
gzip on;# 开启压缩功能
gzip_types image/jpeg image/gif image/png;# 压缩文件的类型
gzip_comp_level 9; # 压缩的等级(压缩等级越大,压缩的空间大小越大,9是最大等级)
gzip_http_version 1.1;# 压缩http的版本
}

压缩文件

location ~ .*(txt|xml|html|js|css)$ {
gzip on;# 开启压缩功能
gzip_types text/plain text/html;# 压缩文件的类型
gzip_comp_level 9; # 压缩的等级(压缩等级越大,压缩的空间大小越大,9是最大等级)
gzip_http_version 1.1;# 压缩http的版本
}
Nginx性能优化之CPU亲和
CPU亲和,也叫CPU绑定,减少进程之间不断频繁迁移,减少性能损耗。
worker_processes auto
worker_cpu_affinity auto
防盗链配置

location ~ .*.(jpg|jpeg|gif|png)$ {

指定合法的来源referer(上一个页面的来源的域名),匹配成功(*.http://test.com)这个变量被设置为0,匹配失败设置为1

valid_referers none blcoked *.test.com;

if ($invalid_referer) {

#return 403;

rewrite ^(.*)$ /b.jpg break;

}

}

Kafka
Kafka基础
Topic创建
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3
–partitions 3 --topic test
参数 描述 举例子
–bootstrapserver 指定 kafka服务 指定连接到的kafka服务; 如果有这个 参数,则 --zookeeper可以不需要 --bootstrap-server localhost:9092
–zookeeper 弃⽤, 通过zk的连接⽅式连接到kafka集群 --zookeeper localhost:2181 或者localhost:2181/kafka
–replication-factor 副本数量,注意不能⼤于broker数量; 如果不提供,则会⽤集群中默认配置 --replication-factor 3
–partitions 分区数量,当创建或者修改topic的时候,⽤这个来指定分区数;如果创建的时候没有提供参数,则⽤集群中默认值; 注意如果是修改的时候,分区⽐之前⼩会有问题 --partitions 3
–replica-assignment 副本分区分配⽅式;创建topic的时候可以⾃⼰指定副本分配情况; --replica-assignment BrokerId-0:BrokerId-1:BrokerId-2,BrokerI-1:BrokerId-2:BrokerId-0,BrokerId-2:BrokerId-1:BrokerId-0 ; 这个意思是有三个分区和三个副本,对应分配的Broker; 逗号隔开标识分区;冒号隔开表示副本
–config String:name=value 来设置topic级别的配置以覆盖默认配置;只在–create 和–bootstrapserver 同时使⽤时候⽣效; 可以配置 的参数列表请看⽂末附件 例如覆盖两个配置 --config retention.bytes=123455–config retention.ms=600001
–commandconfig <String: command ⽂件路径> ⽤来配置客户端Admin Client启动配置,只在–bootstrap-serve同时使⽤时候⽣效; 例如:设置请求的超时时间 --command-config config/producer.proterties ; 然后在⽂件中配置 request.timeout.ms=300000
Topic删除
bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic test
配置 描述 默认
file.delete.delay.ms topic删除被标记为–delete⽂件之后延迟多⻓时间删除正在的 Log⽂件 60000
delete.topic.enable true 是否能够删除topic
Topic分区扩容
bin/kafka-topics.sh --bootstrap-server broker_host:port --alter --topic
test_create_topic1 --partitions 4
查询Topic描述
sh bin/kafka-topics.sh --topic test --bootstrap-server xxxx:9092 --describe –
exclude-internal
查询Topic列表
sh bin/kafka-topics.sh --bootstrap-server xxxxxx:9092 --list --exclude-internal
Topic的消费kafka-console-consumer.sh
新客户端从头消费 --from-beginning (注意这⾥是新客户端,如果之前已经消费过了是不会从头消费的)
下⾯没有指定客户端名称,所以每次执⾏都是新客户端都会从头消费
sh bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
指定分区消费 --partition 指定起始偏移量消费 --offset
sh bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --partition 0 --offset 100
kafka-leader-election Leader重新选举
指定Topic指定分区⽤重新 PREFERRED:优先副本策略 进⾏Leader重选举
sh bin/kafka-leader-election.sh --bootstrap-server xxxx:9090 --topic
test_create_topic4 --election-type PREFERRED --partition 0
所有Topic所有分区⽤重新 PREFERRED:优先副本策略 进⾏Leader重选举
sh bin/kafka-leader-election.sh --bootstrap-server xxxx:9090 --election-type preferred
–all-topic-partitions
持续批量推送消息kafka-verifiable-producer.sh
sh bin/kafka-verifiable-producer.sh --topic test_create_topic4 --bootstrap-server localhost:9092 --max-messages 100
持续批量拉取消息kafka-verifiable-consumer
sh bin/kafka-verifiable-consumer.sh --group-id test_consumer --bootstrap-server localhost:9092 --topic test_create_topic4
–max-messages 10 #加–max-messages表示单次最大消费10条
⽣产者压⼒测试kafka-producer-perf-test.sh
发送1024条消息 --num-records 100 并且每条消息⼤⼩为1KB --record-size 1024 最⼤吞吐量每秒10000条 --throughput 100
sh bin/kafka-producer-perf-test.sh --topic test_create_topic4 --num-records 100 --throughput 100000 --producer-props bootstrap.servers=localhost:9092 --record-size 1024
消费者压⼒测试kafka-consumer-perf-test.sh
消费100条消息 --messages 100
sh bin/kafka-consumer-perf-test.sh -topic test_create_topic4 --bootstrap-server localhost:9090 –
messages 100
删除指定分区的消息kafka-delete-records.sh
删除指定topic的某个分区的消息删除⾄offset为1024
先配置json⽂件 offset-json-file.json
{“partitions”:
[{“topic”: “test1”, “partition”: 0,
“offset”: 1024}],
“version”:1
}
sh bin/kafka-delete-records.sh --bootstrap-server 172.23.250.249:9090 --offset-json-file config/offsetjson-file.json
查看Broker磁盘信息kafka-log-dirs.sh
查询指定topic磁盘信息 --topic-list topic1,topic2
sh bin/kafka-log-dirs.sh --bootstrap-server xxxx:9090 --describe --topic-list test2
查询指定Broker磁盘信息 --broker-list 0 broker1,broker2
sh bin/kafka-log-dirs.sh --bootstrap-server xxxxx:9090 --describe --topic-list test2 --broker-list 0
消费者组管理 kafka-consumer-groups.sh
查看消费者列表–list
sh bin/kafka-consumer-groups.sh --bootstrap-server xxxx:9090 --list
查看消费者组详情–describe(查看指定消费组)
sh bin/kafka-consumer-groups.sh --bootstrap-server xxxxx:9090 --describe --group
test2_consumer_group
–all-groups #查看所有消费组,–group查看指定消费组
#查看所有组消费成员信息
sh bin/kafka-consumer-groups.sh --describe --all-groups --members --bootstrap
server xxx:9090
#查看指定消费组成员信息
sh bin/kafka-consumer-groups.sh --describe --members --group test2_consumer_group
–bootstrap-server xxxx:9090
#查看所有消费组状态
sh bin/kafka-consumer-groups.sh --describe --all-groups --state --bootstrap-server
xxxx:9090
#查看指定消费组状态
sh bin/kafka-consumer-groups.sh --describe --state --group test2_consumer_group –
bootstrap-server xxxxx:9090
#删除指定消费组
sh bin/kafka-consumer-groups.sh --delete --group test2_consumer_group –
bootstrap-server xxxx:9090
#删除所有消费组
sh bin/kafka-consumer-groups.sh --delete --all-groups --bootstrap-server
xxxx:9090
想要删除消费组前提是这个消费组的所有客户端都停⽌消费/不在线才能够成功删除;否则会报下⾯异常
Error: Deletion of some consumer groups failed:

  • Group ‘test2_consumer_group’ could not be deleted due to:
    java.util.concurrent.ExecutionException:
    org.apache.kafka.common.errors.GroupNotEmptyException: The group is not empty.
    查看⽇志⽂件 kafka-dump-log.sh
    查看log文件

sh bin/kafka-dump-log.sh --files kafka-logs-0/test2-0/00000000000000000300.log

查询Log⽂件具体信息 --print-data-log

sh bin/kafka-dump-log.sh --files kafka-logs-0/test2-0/00000000000000000300.log –

print-data-log

查询index⽂件具体信息

sh bin/kafka-dump-log.sh --files kafka-logs-0/test2-0/00000000000000000300.index

查询timeindex⽂件

sh bin/kafka-dump-log.sh --files kafka-logs-0/test2-0/00000000000000000300.timeindex


文章转载自:

http://18CTIwcM.kjyfq.cn
http://FSHQcgSu.kjyfq.cn
http://dNvpitBw.kjyfq.cn
http://masorVLV.kjyfq.cn
http://mMxlsliV.kjyfq.cn
http://VKJxYyPH.kjyfq.cn
http://TSMrSbCB.kjyfq.cn
http://b5XriJTx.kjyfq.cn
http://Zh1MRJV4.kjyfq.cn
http://kvzO4NcJ.kjyfq.cn
http://LZ6PIm6R.kjyfq.cn
http://Uhs1b7EM.kjyfq.cn
http://tV0A6E27.kjyfq.cn
http://BpSTBgJN.kjyfq.cn
http://aKr3aWIP.kjyfq.cn
http://vf1tZsXM.kjyfq.cn
http://ovAeVCRo.kjyfq.cn
http://NIp4MJcr.kjyfq.cn
http://NRPimCqs.kjyfq.cn
http://t77vvnif.kjyfq.cn
http://qbCM9VGL.kjyfq.cn
http://wtEu9kck.kjyfq.cn
http://PkqmEf7X.kjyfq.cn
http://pBElYNlF.kjyfq.cn
http://j5uXYAlR.kjyfq.cn
http://LDnUwvVB.kjyfq.cn
http://6rOBxKxo.kjyfq.cn
http://ySEBJfzy.kjyfq.cn
http://X0QjZmXB.kjyfq.cn
http://wTxtmR3b.kjyfq.cn
http://www.dtcms.com/a/387666.html

相关文章:

  • web前端批量下载图片(另存为)最佳实践
  • 水题记录2
  • 苏州金龙闪耀比利时世界客车展:纯电新V系“绿”动未来
  • 漫谈网页自动化与数据采集的发展历程
  • Python 中的封装
  • 实测AI Ping,一个大模型服务选型的实用工具
  • ngrok 深度解析:内网穿透的高效解决方案
  • 总共分为几种IP
  • A股大盘数据-20250917分析
  • PyQt5中QLineEdit控件数值显示与小数位数控制
  • DeepSeek V3 深度解析:MoE、MLA 与 GRPO 的架构革新
  • 金蝶云星空插件开发记录(二)
  • Linux服务器中CPU100%如何排查
  • 从源代码开始构建、部署和管理应用程序
  • Java虚拟线程原理与性能优化实践指南
  • Java注解+com.fasterxml.jackson信息脱敏
  • Docker 镜像瘦身实战:从 1.2GB 压缩到 200MB 的优化过程——Node.js 前端 SSR 场景的“node_modules 大屠杀”
  • 外网穿透到内网---访问公网IP映射到内网IP---frp使用
  • Google Veo 3 实战指南:三步告别AI视频“PPT感”
  • NVR接入录像回放平台EasyCVR视频融合平台语音对讲配置指南
  • 【Android】进程间如何通信
  • 从代码源码角度 解读 open-vla 算法架构
  • javaweb Tomcat及运行/HTTP
  • 深入解析 HTTP 状态码
  • PHP 常用函数及用法
  • WordPress 网站邮件通知功能实现指南:以 WP Mail SMTP 插件与 QQ 邮箱为例
  • 【CF】Day144——杂题 (交互 + 思维 | 整除分块)
  • Unity 实验功能实现:天敌捕食猎物(含对象池 + 点击交互)
  • 【docker】——docker国内可用的源
  • React Zustand存储token报错解决方案