DNS最佳实践及问题排查
转自: https://help.aliyun.com/document_detail/172339.html#11 DNS最佳实践优化域名解析请求DNS域名解析请求是Kubernetes最高频的网络行为之一,其中很多请求是可以优化和避免的。您可以通过以下方式优化域名解析请求: (推荐)使用连接池:当一个容器应用需要频繁请求另一服务时,推荐使用连接池。连接池可以将请求上游服务的链接缓存在内存中,避免每次访问时域名解析和TCP建连的开销。 使用DNS缓存: (推荐)当您的应用无法改造成通过连接池连接另一服务时,可以考虑在应用侧缓存DNS解析结果,具体操作,请参见使用节点DNS缓存NodeLocal DNSCache。 如果NodeLocal DNSCache无法适用的,可以在容器内置NSCD(Name Service Cache Daemon)缓存。关于如何使用NSCD缓存,请参见在Kubernetes集群中使用NSCD。 优化resolv.conf文件:由于resolv.conf文件中ndots和search两个参数的机制作用,容器内配置域名的不同写法决定了域名解析的效...
记录一次k8s网络DNS问题排查过程
问题1: k8s环境下,服务使用node:xxx-alpine镜像,服务间访问报错: getaddrinfo EAI_AGAIN问题2: 非alpine镜像, 使用clusterip访问频繁出现超时问题: connect ECONNRESET,read ECONNRESET还有服务本身axios报的timeout问题3: 非alpine镜像, 使用dns访问报错: getaddrinfo ENOTFOUND 详细背景见: https://github.com/k3s-io/k3s/issues/5897 问题4: coreDns报错出现error: [ERROR] plugin/errors: 2 . NS: read udp 10.42.2.5:38764->183.60.82.98:53: i/o timeout[DONE]记录问题解决过程问题1问题排查/解决过程 现象1: 问题发生在流量高峰阶段 现象2: 压测tps,200线程仅30多每秒, 吞吐量极差 现象3: 是偶尔性的, 200线程50次仅发现十几条这样的报错日志 原因描述(...
python学习总结
python变量的层级global 当使用global 定义全局变量时,经常会提示:Global variable '变量名' is undefined at the module level 12def test001(self) global user_id 下边是查询后得到得结果 12345678910a = '我是模块中的变量a'def hi(): a = '我是函数里的变量a' print('函数“hi”已经运行!')class Go2: a = '我是类2中的变量a' def do2(self): print('函数“do2”已经运行!') 在整个py文件中,非def和class之外得变量,一般在最上放得变量,才是模块变量 如果是在模块中为全局变量赋值 123456# 定义一个全局变量user_id,但是仍然需要在模块层先定义一个全局变量gloabl user_iddef test001(sel...
Pod/Node亲和性和反亲和性部署
参考:https://cloud.tencent.com/developer/article/1746649 Kubernetes K8S之Node节点亲和性与反亲和性以及Pod亲和性与反亲和性详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/4G/20G 172.16.1.110 10.0.0.110 k8s-node01 CentOS7.7 2C/4G/20G 172.16.1.111 10.0.0.111 k8s-node02 CentOS7.7 2C/4G/20G 172.16.1.112 10.0.0.112 亲和性和反亲和性nodeSelector提供了一种非常简单的方法,将pods约束到具有特定标签的节点。而亲和性/反亲和性极大地扩展了可表达的约束类型。关键的增强是: 1、亲和性/反亲和性语言更具表达性。除了使用逻辑AND操作创建的精确匹配之外,该语言还提供了...
ingress-k3s之traefik的使用
前言Ingress Service可能会有很多,如果每个资源都绑定一个 node port的话,主机则需要开放外围的端口进行服务调用,管理上会比较混乱。 比较优雅的方式是通过一个外部的负载均衡器,比如 nginx ,绑定固定的端口比如80,然后根据域名/服务名向后面的Service Ip转发,但是这里对问题在于:当有新服务加入的时候如何修改 Nginx 配置? 手动改或者 Rolling Update Nginx Pod 都是不现实的。 对于这个问题, k8s 给出的七层解决方案是:Ingress Traefik Træfik 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。Traefix是k3s里面的Ingress Controller。支持负载均衡和反向代理,类似于ngnix。 Traefik 的...
awk命令用法
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号12# 每行按空格或TAB分割,输出文本中的1、4项$ awk '{print $1,$4}' log.txt awk -F #-F相当于内置变量FS, 指定分割字符12# 使用","分割$ awk -F, '{print $1,$2}' log.txt awk -v # 设置变量1$ awk -va=1 '{print $1,$1+a}' log.txt awk -f {awk脚本} {文件名} # 赋值一个用户定义变量1$ awk -f cal.awk log.txt 使用awk取某一行数据中的倒数第N列:$(NF-(n-1)) 比如取/etc/passwd文件中的第2列、倒数第1、倒数第2、倒数第4列(以冒号为分隔符)。($NF表示倒数第一列,$(...
Elasticsearch:Snapshot备份与恢复
SnapshotElasticsearch文档里对于snapshot有如下描述: 1The index snapshot process is incremental. In the process of making the index snapshot Elasticsearch analyses the list of the index files that are already stored in the repository and copies only files that were created or changed since the last snapshot. 这里说snapshot是增量备份的,每次snapshot,Es会分析index文件,并且只备份增量部分。 snapshot是增量备份,对未发生变化的index重复备份几乎没有资源消耗; 删除snapshot不会对其它snapshot产生影响; snapshot是增量备份,对未发生变化的index重复备份几乎没有资源消耗 删除某个snapshot不会对其它snapshot产生影响。 操作建仓...
remoteaddr的一些认识
关于nginx - $remote_addr的解释 nginx的自带变量 $remote_addr 代表客户端的IP remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的. 当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理(比如clb),那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。 但是实际场景中,我们即使有代理,也需要将$remote_addr设置为真实的用户IP, 以下利用with-http_realip_module模块实现安装(nginx或者openresty编译需要加--with-http_realip_module)1./configure ...... --with-http_realip_module 添加如下配置123456789101112131415# 从哪个header头检索出要的IP地址real_ip_...
定时自动重启Pod服务
方法1:滚动重启从1.15版开始,Kubernetes允许您滚动重启部署。作为Kubernetes的新增功能,这是最快的重启方法。 kubectl rollout restart deployment [deployment_name] 上面提到的命令将逐步执行关闭操作,并重新启动deployment中的每个pod容器。在重启过程中应用仍然可用,因为大多数容器仍在运行。 方法2:使用环境变量另一种方法是设置或更改环境变量,以强制Pod重新启动并与您所做的更改同步。 例如,可以更改容器部署日期: kubectl set env deployment [deployment_name] DEPLOY_DATE="$(date)" 在上面的示例中,该命令**set env设置环境变量的更改,deployment [deployment_name]选择您的部署,并DEPLOY_DATE="$(date)"**更改部署日期。 方法3:缩放副本数我们可以使用该**scale**命令来更改deployment的副本数。将此数量设置为0实际上会关闭...
Kubernetes权限管理RBAC详解
摘自: https://blog.csdn.net/qq_35745940/article/details/120693490 一、简介 kubernetes 集群相关所有的交互都通过apiserver来完成,对于这样集中式管理的系统来说,权限管理尤其重要,在1.5版的时候引入了RBAC(Role Base Access Control)的权限控制机制。 启用RBAC,需要在 apiserver 中添加参数–authorization-mode=RBAC,如果使用的kubeadm安装的集群,1.6+版本都默认开启了RBAC。 1$ grep -C3 'authorization-mode' /etc/kubernetes/manifests/kube-apiserver.yaml API Server目前支持以下几种授权策略: AlwaysDeny:表示拒绝所有请求,一般用于测试。 AlwaysAllow:允许接收所有请求。如果集群不需要授权流程,则可以采用该策略,这也是Kubernetes的默认配置。 ABAC(Attribute-Ba...
