iptables规则导致pod无法连接kube-apiserver

前言 最近有一个k8s环境由于搬迁了机房,虽然IP没有变化但是通过后服务还是没有正常启动,于是上服务器检查 排查过程 1 首先查看k8s基础组件是否正常 etcd apiserver scheduler proxy controller-manager 都正常启动,日志也无报错 2 检查网络组件是否正常 coredns calico都未启动成功, 日志有报错连不上apiserver(clusterIP),重启calico发现无任何作用 3 检查calico配置无问题 4 通过其它已正常运行的Pod,发现在pod中确实无法连接apiserver的端口但可以ping通 5 在node上连接apiserver均正常 6 尝试重启服务器 --未解决 7 怀疑防火墙规则异常,尝试清理iptables规则并重启docker后,calico恢复正常,网络通信也正常 最终也是未找到具体影响的规则,建议当机房迁移后虽然IP没变化,还是清理一下防火墙规则 命令 # 清理完防火墙规则后记得重启docker sudo iptables -F sudo iptables

k8s误删pvc状态为Terminating且pv还在恢复方法

有人误删pvc,由于pod还在使用pvc,所以现在的状态为Terminating。 恢复操作: 首先调节pv的回收策略为Retain,pv 的回收策略有三种分别是: Retain:PV的默认回收策略,删除pvc后,挂载卷的数据会保留。可以通过kubectl get pv看到 Recycle:删除卷的内容并使卷可用于再次声明。通过这种方式,持久卷可以被不同的持久卷声明和pod反复使用。但是删除pv以后,挂载卷的数据会被删除掉。 Delete:删除底层存储。 调节pv的回收策略为Retain,如果是Retain则省略此步: kubectl edit pv PVNAME 备份pvc yml kubectl get pvc PVCNAME -o yaml > PVCNAME.yml 停止相关pod,当pod停止后,相关pvc会删除; # 删除pod kubectl -n test scale deploy nginx --replicas=0

k8s hostNetwork 网络的 pod 无法解析 service

因为特殊环境使用的 hostnetwork,发现 pod 无法解析 k8s 的 service,通过google一番解决此问题记录在此 将使用hostnetwork的pod增加一个配置 dnsPolicy: ClusterFirstWithHostNet即可 dnsPolicy为ClusterFirst的pod,/etc/resolv.conf 文件中内容和宿主机内容一致。 dnsPolicy为ClusterFirstWithHostNet的pod,/etc/resolv.conf 文件中内容和宿主机内容不一致,使用的是 k8s 集群内的dns搜索域。 K8S官网资料 Pod 的 DNS 策略 DNS 策略可以逐个 Pod 来设定。目前 Kubernetes 支持以下特定 Pod 的 DNS 策略。 这些策略可以在 Pod 规约中的 dnsPolicy 字段设置: * "Default": Pod 从运行所在的节点继承名称解析配置。参考

k8s停机维护

手动迁移 当需要下线维护某一台node时,可通过如下操作相关命令处理 cordon 标记节点不可调度,后续新的pod不会被调度到此节点,但是该节点上的pod可以正常对外服务; drain 驱逐节点上的pod至其他可调度节点 uncordon 取消不可调度 # 标记节点不可调度 kubectl cordon node1 # 查看节点状态 kubectl get node NAME STATUS ROLES AGE VERSION node1 Ready,SchedulingDisabled master 1d v1.22.0 # 驱逐pod kubectl drain node1 --delete-local-data --ignore-daemonsets --force # 参数如下: # --delete-local-data 删除本地数据,即使emptyDir也将删除; # --ignore-daemonsets

go 打包优化

最近用go写了一些小工具,打包后发现文件比较大,在网上找了一些减少体积的办法记录一下 1 使用最新的go版本 2 使用的打包命令 # -s: 去掉符号信息。 # -w: 去掉DWARF调试信息。 go build -ldflags="-s -w" main.go 3 upx压缩文件,自动使用多种算法尝试压缩 (压缩后可能会导致无法执行,请自行测试) # 压缩级别 压缩算法都可以指定相关参数 # upx更多复杂用法可以参照upx命令帮助或官网 upx.exe -9 --brute .\main.exe

关闭服务器kdump

前言 买一个1GVPS发现内存只有800多M,google一番发现是开启kdump的原因,在此记录一下关闭方法,(高配服务器或者生产环境不建议关闭) 关闭kdump root用户操作 service kdump stop chkconfig kdump off 修改grub文件 vim /etc/default/grub crashkernel改为0M GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=0M rhgb quiet net.ifnames=

x86架构服务器运行arm的镜像

x86架构服务器运行arm的镜像 注册qemu解释器 wget https://github.com/multiarch/qemu-user-static/releases/download/v5.1.0-2/qemu-aarch64-static.tar.gz tar xf qemu-aarch64-static.tar.gz -C /usr/bin/ # 启动 qemu docker run --rm --privileged multiarch/qemu-user-static:register 测试 docker run --rm -t -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/ubuntu:18.04 uname

mysql快速生成批量测试数据

创建数据库和表 DROP database IF EXISTS `test_yc`; create database `test_yc`; use `test_yc`; set global log_bin_trust_function_creators=1; DROP TABLE IF EXISTS `test_user`; CREATE TABLE `test_user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` varchar(20) NOT NULL DEFAULT '', `status` tinyint(

K8S 映射外部服务 Endpoints / ExternalName

具有 IP 地址的数据库 在本例中,在k8s集群外部部署的mysql 192.168.1.2:3306 第一步是创建服务 apiVersion: v1 kind: Service metadata: name: mysql spec: type: ClusterIP ports: - port: 3306 # Service端口 targetPort: 3306 # pod端口 手动创建一个将从此服务接收流量的 Endpoints 对象。 kind: Endpoints apiVersion: v1 metadata: name: mysql subsets: - addresses: - ip: 192.168.1.2 ports: -

下载服务器Nginx-Fancyindex-Theme样式搭建

安装nginx依赖库 tips:如果已经安装过nginx直接看:二、ngx-fancyindex模块安装 nginx安装首先要安装几个依赖库(gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库) 安装gcc gcc-c++ $ yum install -y gcc gcc-c++ 安装PCRE库 $ cd /usr/local/ $ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz $ tar -zxvf pcre-8.36.tar.gz $ cd pcre-8.36 $ ./configure