自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 对容器做iptables防火墙规则

iptables -I DOCKER -s 192.168.133.130(放行备库mysql) -p tcp --dport 3306 -j ACCEPT。

2024-06-06 09:01:59 107

原创 etcd多用途使用脚本

【代码】etcd多用途使用脚本。

2024-05-15 14:46:19 157

原创 pod删除后,kubelet无法回收子路径

在巡检查看一些kubelet日志的时候发现,kubelet日志中有大量的无法移除子路径的报错,对应的pod都是已经删除的。

2024-04-19 09:27:23 238

原创 k8s集群配置NodeLocal DNSCache

在当今的体系结构中,运行在 ‘ClusterFirst’ DNS 模式下的 Pod 可以连接到 kube-dns serviceIP 进行 DNS 查询。node-local-dns 接口不能绑定 kube-dns 的集群 IP 地址,因为 IPVS 负载均衡使用的接口已经占用了该地址。:集群内的服务基本都是通过域名进行访问,coredns在解析压力大时会存在慢或者丢包的情况,导致服务之间解析异常。1、 使用当前的 DNS 体系结构,如果没有本地 kube-dns/CoreDNS 实例,则具有最高。

2024-01-11 10:42:37 1650

原创 解决kubelet报failed to get imageFs info: non-existent label \“docker-images\“

主机重启后,kubelet比docker先启动,会对不健康的pod进行一个资源回收的过程,这个时候docker还没正常启动,kubelet无法调用docker的socket接口对镜像回收,会导致每五分钟一次的循环检查,默认到100次就会触发gc,会导致kubelet的pleg不健康,这个启动顺序还是很重要的。一环境主机重启后,查看kubelet日志经常有大量无法回收镜像文件报错,会导致kubelet的pleg不健康,从而导致kubelet发生重启。

2024-01-08 16:55:40 1594

原创 istio配置http1.0协议

有些任务场景中需要用到istio的http1.0协议,但是这个配置默认是没开启的,需要在istiod的配置中添加对应的环境变量参数即可。

2024-01-08 16:37:56 536

原创 pod容器内无法访问集群外部主机ipv6地址

疑难杂症处理

2023-12-05 17:58:08 367

原创 k8s中pod的hostport端口突然无法访问故障处理

既然访问不通那就先给服务做个全面检查,看看哪里出了问题,看下sftp日志,也没有啥关键报错,接下来查看了下sftp服务的svc端口,发现通过svc地址和端口是能正常访问的,通过pod IP去访问也是可以,这就很奇怪了,唯独用主机ip加hostport端口就访问不通。租户告知生产环境的sftp突然无法访问了,登录环境查看sftp服务运行都是正常的,访问sftp的hostport端口确实不通。: 跟租户沟通,看看能否重启服务试试,发现重启完服务,还是老样子,通过hostport访问依然不通。

2023-11-28 17:06:07 998

原创 一次harbor升级导致镜像项目访问无权限问题

1、根据报错反馈没权限,当时认为可能用户对这个项目是不是权限上有些问题,在harbor的镜像项目用户一栏,查看项目所在的用户是admin,镜像项目也是公开的,按理说权限应该没啥问题的,然后尝试添加一个用户进去,然后绑定到这个镜像项目,并赋予管理员权限,然后用此用户登录harbor,进入这个镜像项目还是报无权限,但是在harbor上新创建项目是没啥问题。如上改为以后无问题,也能有权限进入项目查看镜像了。3、开始登录harbor的pg库进行镜像项目的更改,先查看需要更改的项目,如下。

2023-08-25 17:51:39 472

原创 kubernetes中特定域名使用自定义DNS服务器出现的解析异常

从如上分析来看,既然在coredns中已经配置了外部转发dns服务,租户如果继续在服务中还配置外部dns服务地址,就会导致应用服务会有两个dns nameserver,首先会访问集群内部域名地址会解析到pod中配置的那个外部dns服务中,会出现解析不了的情况,就反馈失败,然后轮到集群内部定义的dns服务就会正常解析成功。把在服务中配置dnscongfig相关参数去掉,让服务统一走集群内的coredns进行转发处理即可。

2023-07-14 17:12:19 1170

原创 一次etcd变更引发的惨案

etcd k8s

2023-04-18 15:21:47 1006

原创 systemd管理自动挂载nfs

在维护的环境中,不少组件使用到nfs存储,有时候主机批量关机重启的时候,无法实现自动挂载,就需要手动去挂载,这是很费力又浪费时间的事。虽然nfs自动挂载写到了/etc/fstab里面了,但是遇到一些复杂挂载时候,可能会导致开机启动过程中卡死的情况。在一些较新的 Linux 发行版中,/etc/rc.local 文件的执行时机已经被修改,其不再能够保证在系统启动时最后执行。Where=/data2 # where 配置的是nfs client需要挂载的路径,此处路径名要和文件名一致。

2023-04-09 17:57:08 1044

原创 ETCD备份恢复脚本

etcd备份恢复

2023-03-13 16:24:36 407

原创 envoy日志格式说明

envoy日志格式参数说明

2023-03-06 22:41:15 607

原创 calico通过宿主机路由自动检测正确ip地址

calico

2023-01-30 16:14:02 359

原创 envoy调整日志级别

envoy调整日志级别

2022-12-09 20:47:40 514

原创 kubernetes中给pod加hosts解析

pod配置hostAliases

2022-12-02 22:09:04 2830 1

原创 解决docker报eeror: write unix /var/run/docker.sock->@ write:broken pipe

docker故障排查

2022-10-21 17:07:43 2167

原创 calico vxlan interface down,导致 calico-node 无法添加路由

关于calico vxlan模式下,无法正常下发路由

2022-07-13 17:10:24 1141

原创 对etcd进行数据拆分

我们现在是一个k8s集群,多个租户共同使用,包括如果后期有新用户上云,申请到的资源同样也会以node节点的形式加入到现有的master节点,这样当一定规模的服务运行在集群中,势必会增加etcd的负担,整个ku8集群的数据都是存放在etcd中,只有进行合理的拆分,才能提升etcd的性能。进行etcd拆分的情况如下图:老版本的etcd仍然提供服务,只存储pod、svc等信息。新版本的etcd提供着存储ku8的events信息。之前就是因为把所有数据存放到一套etcd集群,出现events信息太多导致et

2022-04-24 14:21:44 1023 1

原创 关于文件句柄数和文件描述符的区分

在一次生产环境上,用户那边反馈服务连接redis异常,经过查看redis的日志,报打开文件数过多,通过lsof去查看文件句柄数确实超过了主机限制的句柄数,只能先重启redis进行释放连接数,进行恢复业务。上面是一个处理过程,但是后面和对方人员关于程序是否是打开那么多文件句柄数,产生分歧,对方认为一个进程打开的文件句柄数量可以使用,如下命令进行统计:ls -l /proc/pid1/fd/ | wc -l 进行统计为此,我到自己环境上验证一番,给予解释,争吵是解决不了问题,唯有真理服人了,首先

2022-02-17 17:54:47 1508

原创 Ingress进行灰度发布

现在一些业务在有新版本上线时,通常新版本即使在自己本地测试后,发布到线上环境也可能会出现一些问题,就会回滚到老版本,现在我们新版本的上线都会采取灰度发布,先让一小部分的流量请求到新版本,其余流量请求到老版本,等新版本验证没问题,逐渐让流量都请求到新版本,然后下架老版本。下面就用ingress来做下灰度发布,首先还是需要部署两个服务,一个代表老版本,一个代表新版本,我这边还是用nginx来测试,两个nginx服务部署如下:然后用ingress去分别代理这两个服务,我们这里采取权重的策略,来做流量的分发,达

2022-02-10 10:48:48 2953

原创 Ingress对服务做限流

随着现在更多环境的服务进行上云,对网关这块能实现的功能也比较关注,除了能正常的实现代理的作用,还需要可以进行比如:熔断,链路追踪,限流等,这里主要操作下对ingress的限流。首先还是需要在k8s集群上部署一个服务用来进行测试,我这里部署了一个nginx的pod,然后用ingress代理这个nginx服务,最后在ingress上做限流操作,通过访问ingress查看是否达到限流的作用。下面创建ingress的yaml来代理nginx这个服务并做限流,如下:apiVersion: extensions

2022-02-09 15:53:15 5101

原创 Ingress的代理配置

Ingress的部署这里省略,我的另外一篇博客上已经详细介绍部署过程,这里我们主要操作是给ingress添加域名,并做反向代理。先在k8s上部署一个nginx的pod,然后用ingress来代理这个nginx的pod,实现访问ingress地址就代理到对应的nginx服务,部署nginx服务,并测试能正常访问:接下来用ingress来代理这个部署好的nginx服务,编写ingress代理nginx的yaml如下:apiVersion: extensions/v1beta1kind: Ingress

2022-02-08 17:40:20 2940

原创 部署Ingress

在k8s上部署服务的时候,我们经常通过svc暴露的端口提供对外访问,如果在k8s上部署的服务比较多的话,这样不仅不安全还会使用过多的端口资源,通过部署Ingress可以作为集群内部服务唯一的入口。原理部分就不多说了,其原理和nginx差不多,接下来进行部署,ingress部署分为nginx官方的版本和kubernetes官方的版本,我这边是以部署k8s官方版本的ingress为主,部署ingress的yaml地址如下:https://raw.githubusercontent.com/kubernet

2022-02-08 14:58:13 2008

原创 kubernetes中给服务部署探针

当我们把服务部署到kubernetes集群上,除了基本的监控告警来锁定服务异常,通过人为干预来检查和恢复外,其实kubernetes也提供了针对服务的存活检查,那就是探针。可以通过探针检查服务的存活状态,一旦服务不正常,超过自己设置的检查数,就会重新拉起服务,接下来我们可以配置一个服务做演示:一、首先创建一个服务kubectl create deploy test1 --image=nginx:latest二、进入test的deployment中添加对应的livenessProbe探针并做相关的服务

2021-12-15 14:47:02 1199 1

原创 解决openshift中node节点上的容器无法解析域名

问题描述:因业务增长,需要添加新的node节点到openshift的集群,以满足业务的需求,但是节点加进openshift集群后,发现在主机上用域名和端口的形式是可以访问已经部署的服务,但是在新node节点上启动的容器,进入容器中,用域名加端口的形式访问,报错无法解析,curl 容器的svc ip加端口是没有问题的,具体访问情况如下:在主机上进行测试在新节点的容器内访问服务: 解决问题过程:openshift的解析是通过本地的dnsmasq进行解析的,通过查看容器里面的reslove.conf

2021-12-13 14:37:09 1104

原创 cannot access upload: Transport endpoint is not connected

用户反馈集群中一个服务无法正常上传下载文件了,然后到管理节点查看对应的pod,然后进入pod容器中,到对应的文件上传下载路径,发现目录的所属主和文件权限都变的异常,如下:图中红色圈出来的就是文件上传下载的目录,试着给它权限和执行任何命令都报 cannot access upload: Transport endpoint is not connected。接下来就只能看下这个目录对应挂载盘是否有问题,发现读写是没有问题的,说明存储是ok的,接着看下共享存储的gfs是否正常,发现gfs状态都不正常了,如图

2021-09-10 13:22:50 1700

原创 部署containerd运行时

配置介绍:192.168.247.133 centos7.2 cpu 2 内存2192.168.247.151 centos7.2 cpu 2 内存 2192.168.247.152 centos7.2 cpu 2 内存 2前期配置:关闭防火墙:systemctl stop firewalldSELINUX=disabled主机名称设置:Hostnamectl set-hostname xxxx添加系统参数:设置必需的 sysc

2021-08-22 16:30:06 680

原创 简单部署个minio服务器

简介:MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。应用场景:我之前维护的租户项目以及我自己搭建的博客平台有用到fastdfs,但总体使用上还是觉得minio最佳,比如:fastdfs在相关官方文档上没有minio这么完善;没有minio这种对象存储读写性能佳;minio还提供了方便操作的

2021-08-07 22:05:17 572

原创 Check that device-mapper is available in the kernel

一次主机重启,主机上的docker无法启动,发现docker的挂载盘没有挂上,然后选择手动挂载,结果报错说lv不在,报错截图如下: 接着只能查看下lv到底在不在了,查询如下:通过上图可以看到,lv是存在的,只不过device-mapper显示在内核中是不可用的。解决办法:通过升级内核,升级如下:1、 先下载kernel的安装包,直接进行yum install 2、更改内核启动顺序2.1、grub2-set-default 0 && grub2-mkconfig -o /etc/

2021-07-18 13:25:28 359

原创 网卡mtu值引起的服务访问异常处理过程

一、现象说明我们在k8s集群上部署服务,发现在72段主机上的服务访问是都没有问题的;但是在161段主机有的服务可以访问;有的访问没有返回值;其中在161段主机访问没有返回值的服务;到服务所在的主机是可以访问的。二、解决过程针对上述现象,我们确定了这两个段的ip是在一个vpc的,互相访问是没有问题的,不然也不可能存在有的访问有返回值,有的没有返回值,截图如下: 上图是我把grafana调到161段主机上curl就不正常了,重新把它调度到72段就能正常访问,后面我们部署了个nginx到161段发现也能正

2021-07-09 13:24:30 1178

原创 记录一次mongodb服务无法启动的处理方法

在租户的一个uat环境中,有一套psa模式的mongo,发现其中一个pod是挂掉了,试着重启下pod,也是无法启动起来,这个时候只能看下日志了,发现如下报错: 根据以上报错信息,然后ssh到对应pod的节点主机上,删除掉mongod.lock和WriredTiger.lock这两个文件,然后重启mongo的pod,就正常运行了。...

2021-07-02 13:38:08 295

原创 iptables防火墙对容器暴露的端口做安全限制

1、对容器暴露的3306端口进行封堵:iptables -t mangle -A PREROUTING -p tcp --dport 3306 -m comment --comment “iptables20210527” -j DROP2、查看mangle表的规则: 3、删除mangle表中对应的PREROUTING链的规则:iptables -t mangle -D PREROUTING 24、允许某个ip可以访问:先同意:iptables -t mangle -A PREROUTIN

2021-05-27 17:49:25 470

原创 统计单个数据库中数据量的大小

select concat(round(sum(DATA_LENGTH/1024/1024),2), ‘MB’) as data from information_schema.TABLES where table_schema=‘单库名称’;

2021-05-13 14:47:28 431

原创 keeplive发生脑裂问题处理过程

某上云项目中,k8s管理节点vip突然时不时无法访问了,针对这个问题,首先对vip发起了一个长ping;发现过一个就ping不通了,结果如下:然后查看keeplive的日志,两台主机会发生vip会时不时的争抢:因为我们在这两台主机上部署了三套keeplive,怀疑是这个原因导致,因为其他项目没有出现这个问题(其他项目是没有将几套keeplive都部署在两台主机上的),最终是更改keeplive的配置中virtual_router_id这个参数,然后重启keeplive问题得以解决。注:virtual

2021-05-12 13:16:44 379

原创 kubernetes中kube-controller-manager不断选举leader问题排查

一、某上云项目用网关来代理数据库的背景财务的服务在k8s集群外部,想连接数据库,就只能通过直连数据库的主机ip+prot的形式才能建立连接,但是却达不到高可用的目的,然后通过网关代理数据库的方式以达到高可用的目的。二、某上云项目网关代理数据库出现的问题财务的数据库改为网关代理的方式和外部服务建立连接以来,出现断断续续的服务连接中断,然后外部服务无法再次进行和网关的连接,只有重启外部服务,才能再次的建立连接的情况三、某上云项目网关代理数据库出现问题排查过程先是对数据库和网关的服务运行状态进行了查看,

2021-05-08 17:28:30 1870

原创 解决kubernetes集群中三台apiserver的endpoint轮询问题

某上云环境,在用prometheus采集kubernetes的apiserver的指标的时候,发现只能采集到一个apiserver的指标,经过排查发现kubernetes的apiserver的endpoint的地址一直在轮询改变,如图: 我们集群搭建的三节点的master高可用,按理说会显示kubernetes的endpoint的三个地址才对,但是只显示一个,而且是轮询这就奇怪了,查看kubernetes的管理节点日志都是没啥报错;后来查看apiserver的配置文件发现,三台apiserver的一个配置

2021-04-25 17:30:53 646

原创 一次calico问题排查

k8s集群出现一台主机calico重启,无法重新添加路由当时查看了下kubelet的日志,发现有报错证书无效,查看了集群内其它环境主机,路由都正常,按理说不应该是证书无效才对开始看下calico的日志,发现有报Liveness probe failed: calico/node is not ready: bird/confd is not live: exit status 1 /BIRD is not ready: Error querying BIRD: unable to connect to.

2021-04-22 16:46:29 2147 2

原创 通过etcd去删除kubernetes的资源对象

我们有时会遇到在kubernetes集群中,一些挂掉的pod或者其它资源对象无法正常的删除的时候,我们可以通过etcd去进行删除操作。首先我们需要先到etcd的库中查找我们想要的资源对象:ETCDCTL_API=3 etcdctl get “/registry” --prefix --keys-only | sed ‘/^\s*$/d’接着可以根据查找到的资源对象进行一个删除操作,比如我需要删除一个资源分区:ETCDCTL_API=3 etcdctl del /registry/namespaces

2021-04-22 15:50:08 1007

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除