激活
激活常用软件的激活配置
goland 激活链接: https://pan.baidu.com/s/1trj3tmMbnyFpK3Y0_KxzoA 提取码: rpie
pycharm 激活链接: https://pan.baidu.com/s/1trj3tmMbnyFpK3Y0_KxzoA 提取码: rpie
kubernets 修改 kube-porxy ipvs 模式
查看kubernetes的proxy模式
看到当前运行的kube-proxy pod
~ # kubectl get pods -n kube-system | grep proxy root@k8s-master01kube-proxy-9ssmd 1/1 Running 0 16mkube-proxy-prs8j 1/1 Running 0 16mkube-proxy-tp9vf 1/1 Running 0 16mkube-proxy-x8xtr 1/1 ...
kubernetes service 到底能不能 ping 通
这个问题其实是在考察对 k8s service 的使用和底层原理的理解。。。
实验环境搭建使用 kind (k8s.io) 可以很方便的在本地搭建实验环境,修改配置即可创建 kubeProxyMode 为 iptables 或 ipvs。
实验涉及的 config 和 yaml 可以在我的 github repo 找到: win5do/k8s-svc-test (github.com)
网络调试工具可以通过创建 netshoot 容器 attach 到目标 network namespace:nicolaka/netshoot: a Docker + Kubernetes network trouble-shooting swiss-army container (github.com)
ClusterIP/NodePort这类 svc 都会分配 ClusterIP,这个 IP 地址是 VIP(虚拟 IP),是在所有 node 上添加一些 netfilter 规则,主要有 iptables 和 ipvs 两种方案,能不能 ping 通要看具体实现。
...
Kubernetes容器netns无法删除问题
场景在k8s+containerd的环境上删除容器失败,容器一直保持在terminating状态。
containerd日志显示”failed to check network namespace closed: remove netns:unlinkat *: device or resource busy” ,不影响新创建的容器运行。
ip netns list 报错 Invalid argument
寻找解决办法百度搜索出来mount信息显示netns还是被mount的,但是umount时又显示not mount查看代码,测试验证都无效果。真的坑!根因其实时 ip netns add命令搞的鬼,和这个命令的行为有关,之前执行过这个命令导致containerd创建的netns不可见。解决办法其实只有umount下/run/netns就好了。
能解决就不会单独写一篇文章了,还是Google搜索引擎强大!
echo 1 > /proc/sys/fs/may_detach_mounts
注:在CentOS7.4引入了一个新的参数来控制内核的行为。 ...
k8s pod 到 svc 不通 排查总结
刚接手一个测试集群,一个平台项目测试,部署到该k8s集群上。部署上去之后就发现各种坑,所以在这里总结一下遇到的问题,及排查思路。。。
基础环境kubernetes:1.16.xcni:calico + BGPuname:3.10.xxx
遇到的坑
跨节点 pod 之间某些可以ping通,某些不能ping通
不能ping通的pod都是在别的主机上
同一个 主机上的pod,有的可以ping通,有的不能ping通
dns svc 的ip 53 端口,不能telnet通。
某些 pod 无法解析svc地址。
使用 busybox 容器,无法解析所有的svc地址。
busybox容器ping命令可以解析出svc IP地址。
故障结论pod内部或者说是集群内部无法解析service ip,不能通过service ip或者service name通信访问
故障分析一般宿主机网络有限制,kube-proxy、calico问题。
故障排查主机网络排查排查防火墙,selinux是否关闭
systemctl status firewalldgetenforce
修改内核参数
net.ip ...
pod中的 dns 配置
Kubernetes集群内置DNS插件CoreDNS,为集群内的工作负载提供域名解析服务。业务在高并发调用场景下,如果使用到域名解析服务,可能会触及到CoreDNS的性能瓶颈,导致DNS请求概率失败,影响用户业务正常运行。在Kubernetes使用的过程中,发现有些场景下工作负载的域名解析存在冗余的DNS查询,使得高并发场景更容易触及DNS的性能瓶颈。根据业务使用场景,对工作负载的DNS配置进行优化,能够在一定程度上减少DNS请求概率失败的问题。
POD DNS 配置项说明在容器里执行cat /etc/resolv.conf命令,能够查看到DNS配置,以Kubernetes集群的容器DNS配置为例:
nameserver 10.247.x.xsearch default.svc.cluster.local svc.cluster.local cluster.localoptions ndots:5
配置项说明:
nameserver:容器解析域名时查询的DNS服务器的IP地址列表。如果设置为10.247.x.x说明DNS对接到Kube-DNS/CoreDNS,如果是 ...
CentOS 7 不收集日志 /var/log/messages 处理
之前一直有日志生成,最后一次轮替日志之后,日志文件都为空,/var/log/message, /var/log/secure 等都不记录了。
背景
重启机器:reboot 无效
重启日志: systemctl start rsyslog 无效
怀疑空间不足,删除/var/log/messages,重新运行rsyslog 无效
重装下rsyslog,于是yum reinstall rsyslog,重新运行rsyslog 无效
解决找到配置文件 /etc/rsyslog.conf修改如下:
解注释:#$ModLoad imklog # reads kernel messages (the same are read from journald)修改为:$ModLoad imklog # reads kernel messages (the same are read from journald)增加注释:$OmitLocalLogging on修改为:#$OmitLocalL ...
连接一个不存在的 IP 地址,会发生什么
概述分享两个题,都是基于场景问的网络问题。
Q1:客户端连接一个不存在的 IP 地址,会发生什么?
Q2:客户端连接一个存在的 IP 地址但是端口不存在,会发生什么?
PS:这里的「连接」指的是 TCP 连接。
结论Q1:客户端连接一个不存在的 IP 地址,会发生什么?这个问题要分两种情况来思考,不同的情况得到的结论是不同的。
第一个情况:目标 IP 地址和客户端的 IP 地址是同一个局域网(网络号相同)。第一种情况,客户端无法发出 SYN 报文,主要卡在数据链路层。
因为目标地址不存在 IP 地址,客户端的内核在发 arp 请求的时候,广播询问这个目标 IP 地址是谁的,由于网络中不存在该目标 IP 地址,所以没有设备应答客户端的 arp 请求。
由于客户端无法拿到目标设备的 MAC,这样就没办法组装 MAC 头的信息,所以 SYN 报文无法发送出去。
第二个情况:目标 IP 地址和客户端的 IP 地址不在同一个局域网(网络号不同)。第二种情况,客户端会先将 SYN 报文发给路由器,然后路由器会继续转发。
由于目标 IP 地址是不存在的,该 SYN 报文会在网络中消亡, ...
安装prometheus
安装git clone https://github.com/prometheus-operator/kube-prometheus.gitcd kube-prometheus# Create the namespace and CRDs, and then wait for them to be availble before creating the remaining resourceskubectl create -f manifests/setup# Wait until the "servicemonitors" CRD is created. The message "No resources found" means success in this context.until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; donekubectl create -f manifests/
卸载kubectl d ...
内核参数配置
系统内核参数
系统内核参数配置路径/usr/lib/sysctl.d/ # 类似于/etc/sysctl.d/,但通常用于系统级别的配置,可能包含由发行版维护的默认配置/usr/local/lib/sysctl.d/*.conf/etc/sysctl.d/ # 里面可以放置多个.conf文件,每个文件都可以包含一组内核参数设置。/etc/sysctl.conf # 最常用的内核参数配置文件,用于持久化地设定内核参数。/lib/sysctl.d/*.conf/run/sysctl.d/ # 这个目录中的文件在系统启动时会被读取和应用,主要用于临时覆盖其他位置的设置/proc/sys/ # 这个目录包含了当前内核参数的运行时状态,可以直接通过文件系统接口修改参数,但修改后的值在重启后不会保留
常用命令sysctl -a # 显示所有可用的内核参数变量和值sysctl fs.file-max # 查看指定参数的值sysctl -w fs.file-max=1000000 # 设定指定参数的值sysctl -p /some/path/t ...