apiserver报错failed with: failed to retrieve openAPI spec, http error: ResponseCode: 503

今天上k8s集群,kubectl命令操作卡顿,执行kubectlgetnode命令返回有时很快,有时能卡好几十秒。然后检查apiserver日志,发现了以下信息v1beta1.metrics.k8s.io failed with: failing or missing response from https://10.106.18.58:443/apis/metrics.k8s.io/v1beta1: Get https://10.106.18.58...

阅读全文

apiserver报http: TLS handshake error from xxx:xxx: remote error: tls: bad certificate

检查k8s中发现coredns起不来,后面查看apiserver,里面有如下报错信息http: TLS handshake error from xxx:xxx: remote error: tls: bad certificate后面怀疑是之前添加的apiserver中端口范围影响的,然后去修改kube-apiserver.yaml文件apiVersion: v1kind: Podmetadata:  ...

阅读全文

kubelet报错nable to connect to the server: x509: certificate is valid for xxx, not xxx

我当前k8s环境是多master节点,前几天刚续费k8s证书,今天查看所有工作节点均notready,但是master节点正常,查看工作节点kubelet报错日志如下:k8s.io/kubernetes/pkg/kubelet/kubelet.go:450: Failed to list *v1.Service: Get https://192.168.1.220:16443/api/v1/services?limit=500&resourceVersion=0: x509:&...

阅读全文

k8s无头服务headless介绍

我们在k8s中访问POD提供的业务服务时通常都是通过Servicename的负载来访问,其中负载的原理和CoreDNS有关,它是将Servicename解析成ClusterIP,这样我们就可以通过ClusterIP作负载均衡,把流量分布到各个POD上面。ClusterIP的原理一个service可能代理多个endpoint,每个endpoint实际就是一个POD提供,client访问的就是service的ClusterIP,从而通过iptable规则转发到到后端的某一个POD服务。从而达到负载均衡的效果。当servicetype类型设置为Clu...

阅读全文

k8s健康检查Liveness/Readiness/Startup探针介绍

k8s健康检测主要分为以下三种存活性探测(Livenessprobes):主要是探测应用是否还活着。如果检测到应用没有存活就杀掉当前pod并重启。就绪性探测(Readinessprobes):只要是探测应用是否准备好接受请求访问,如果检测应用准备好了,就把请求流量放进来;反之,则把应用节点从注册中心拿掉。启动探测(StartupProbes):对于旧应用需要更长的启动时间,这时候既不想重启应用也不想让请求访问进来,可以设置启动探测给足够的启动时间保证应用启动成功。k8s中ReadinessProbes示例readinessProbe:&nb...

阅读全文

k8s中CRI、OCI、CRI-O、RUNC和containerd介绍

CRI(ContainerRuntimeInterface,容器运行时接口)是kubernetes定义的接口,定义了如何操作容器和镜像的统一规范,它主要包含ImageService和ContainerService。因为它已经是一个标准,所以你可以选择任何一个CRI的实现(containerd和CRI-O)来使用。CRI-O也是一个CRI的实现,它来自于RedHat/IBM等OCI(OpenContainerInitialtive)提供了容器镜像和运行容器的规范。runc是OCI的一个实现,它是一个创建和运行容器进程的工具。RUNC实际上是...

阅读全文

k8s组件kubelet功能和模块详解

kubelet是运行在每个节点上的主要的"节点代理",每个节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,按照PodSpec描述来管理Pod和其中的容器(PodSpec是用来描述一个pod的YAML或者JSON对象)。kubelet通过各种机制(主要通过apiserver)获取一组PodSpec并保证在这些PodSpec中描述的容器健康运行。kubelet默认监听四个端口,分别为10250、10255、10248、4194。LISTEN 0&...

阅读全文

k8s资源中的resourcequotas

k8s中可以对namespace来做资源限制,主要通过ResourceQuota对象来定义资源配额限制,它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命令空间中的Pod可以使用的计算资源的总上限。首先我们可以检查是否本集群开启了资源配额kubectl api-resources | grep quota#返回resourcequotas             ...

阅读全文

k8s设置pod特权privileged的方法

k8s部署es的时候需要初始化很多linux的内核参数。但是文件系统挂载到pod容器中就会变成read-only,难以进行操作实现需求。所以需要给PODprivileged权限,然后在容器的初始化脚本或代码中去修改sysctl参数。创建POD/deployment/daemonset等对象时,给容器的spec指定securityContext.privileged=true即可设置到containers同级即可    securityContext:     ...

阅读全文

docker部署keepalived非抢占单播模式

之前咱们学习了keepalive的各种模式,详情可以查看这个笔记https://sulao.cn/post/877.html,这次我们就在上次学习的基础上部署keepalive非抢占单播模式在配置部署之前我们我们先了解下单播,组播,广播这些词的概念单播:在同一局域网内,两个设备点对点的通信就是单播通信。组播:在同一网络可达范围内,一个网络设备与关心其数据的部分设备进行通信就是组播。广播:在同一网络可达范围内,一个网络设备向本网络内所有设备进行通信就是广播。在组播模式下,keepalived将全部的心跳包信息都会向默认的224.0.0.18的组播地...

阅读全文