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:     ...

阅读全文

k8s执行命令提示连接服务器was refuused

有时我们在服务器异常重启以后,部署在上面的k8s执行kubectl命令直接提示The connection to the server 192.168.1.72:6443 was refused - did you specify the right host or port?出现这种情况时我们可以先检查kubelet和docker服务的状态,有时我们重启可能需要等一下k8s服务拉起来如果上述方式...

阅读全文

设置k8s节点不调度pod和节点驱逐的方法

在k8s的项目中今天需要停止某一节点的服务,对该节点进行更新、升级、或者是更换硬件时,这个时候需要对节点进行设置,让其不参与k8s的调度,具体的设置方法如下使用cordon设置节点不可调度kubectl cordon node_namekubectl uncordon node_name #取消不可调度当使用cordon来设置节点不可调度时,目前运行在该节点上的POD不受影响,能够继续运行当使用cordon设置以后查看node时,该节status后面会跟一个SchedulingDisabled的状态如...

阅读全文

pod报错no space left on device的解决方法

查看k8s上有一些POD日志中提示Error:failedtocreateFSwatcher:nospaceleftondevice看到这个错误提示第一时间想到的是是不是磁盘用满了,然后我开始检查机器上的资源,包含CPU,内存,硬盘发现上面检查项均为正常的然后describenode发现节点上的配额还有很多,实际使用已分配的资源都不高,然后我翻找资料,有提示相关的内核方面的问题,需要优化调整fs.inotify.max_user_watches的值sysctl fs.inotify.max_user_watches用上述命...

阅读全文