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...
Dckr-向导式构建工具
Dckr<谨供参考> 最近发现个好东西-Dckr : 一款基于Docker的容器配置及编排的向导式构建工具(支持Docker、Compose、Kubernets、Rancher的资源文件向导式构建) 引自官方: 12345678910111213通过它,你可以轻松完成以下操作: 借助语义化UI向导式构建Dockerfile、docker-compose.yaml、Kubernetes资源文件、Rancher Chart。 支持docker-compose.yaml向Kubernetes资源文件的转换。 支持docker-compose.yaml或Kubernetest(Helm Chart)向Rancher Chart的转换。它的存在意义: 通过语义化UI向导式的指引你去构建相关容器配置、编排文件,降低了你的学习成本。 通过转换功能,能轻松地将不同容器产品的配置文件进行相互转换,极大地提高了你的工作效率。 通过它进行构建的YAML文件是符合规范的,让你摆脱编写YAML文件因缩进等格式问题带来的痛苦。 ...
Endpoints
k8s集群中创建一个名为hello的service,就会生成一个同名的endpoint对象,ENDPOINTS就是service关联的pod的ip地址和端口, 即动态存储pod ip地址和端口对应关系的list,Kubernetes在创建Service时,根据Service的标签选择器(Label Selector)来查找Pod,据此创建与Service同名的EndPoints对象。当Pod的地址发生变化时,EndPoints也随之变化。Service接收到请求时,就能通过EndPoints找到请求转发的目标地址endpoint不可以用来固定podip,endpoint是随着pod的改变而改变,而非pod随着endpoint的改变而改变 手动创建 Endpoint 创建service: 略 创建一个 endpoint.yaml 文件,内容如下(注意替换ip为你容器访问ip(pod ip)): 12345678910apiVersion: v1kind: Endpointsmetadata: name: nginxsubsets: - addresses: -...
HPA(水平伸缩)和PodDisruptionBudget(干扰预算)
HPA我们可以实现通过手工执行kubectl scale命令实现Pod扩容或缩容,但是这显然不符合Kubernetes的定位目标–自动化、智能化。 Kubernetes期望可以实现通过监测Pod的使用情况,实现pod数量的自动调整,于是就产生了Horizontal Pod Autoscaler(HPA)这种控制器。 HPA可以获取每个Pod利用率,然后和HPA中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现Pod的数量的调整。其实HPA与之前的Deployment一样,也属于一种Kubernetes资源对象,它通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性地调整目标Pod的副本数,这是HPA的实现原理 注: 在 K8S 1.18之前,HPA 扩容是无法调整灵敏度的 对于缩容,由 kube-controller-manager 的 --horizontal-pod-autoscaler-downscale-stabilization-window 参数控制缩容时间窗口,默认 5 分钟,即负载减小后至少需要等 5 分钟才会缩容。 对于扩容,由...
deployment的使用
k8s deployment文件属性简介12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667apiVersion: apps/v1 #指定api版本,此值必须在k8s api-versions中kind: Deployment # 指定创建资源的角色/类型metadata: # 资源的元数据/属性 name: # 资源的名字,在同一个namespace中必须唯一 namespace: # 部署在哪个namespace中spec: # 资源规范字段 strategy: # 策略 type: RollingUpdate # 滚动更新策略 selector: # 选择器 matchLabels: # 匹配标签 app: replicas: 1 # 声明副本数目 template: # 模版 metadata: # 资源的元数据/属性 ...
k8s-secret加密之使用bitnami-labs/sealed-secrets进行安全管理
Kubernetes 自己提供了 secret 这种方式,但其是一种编码方式,而非加密方式,如果需要用版本控制系统(比如 git)来对所有的文件、内容等进行版本控制时,这种用编码来处理敏感信息的方式就显得很不安全了(即使是采用私有库),这一点在实现 GitOps 时,是一个痛点。 Sealed Secrets Sealed Secrets 充分利用 kuberntes 的高扩展性,通过 CRD 来创建一个 SealedSecret 对象,通过将加密的内容存储在扩展 SealedSecret 对象中,而 SealedSecret 只能够被运行于目标集群上的 controller 解密,其他人员和方式都无法正确解密原始数据。SealedSecret 对象同时又会生成与其名称相同的 secret 对象,随后就可以按照常规方式使用 secret 对象了。最后将加密后的文件直接推送至版本控制系统即可,而不用担心敏感信息被泄漏. 简单来说就是, 我们需要用 YAML 的形式生成一个 Secret,但是我们希望 YAML 自身的内容是加密的,以保证传输过程中,Secret...
在k8s中,如何使用存储卷的详细介绍
PersistentVolume(PV)和PersistentVolumeClaim(PVC)这两个概念用于pod和volume之间解耦。Pod根据自己的需要提出数据卷的申请,k8s系统将符合条件的数据卷返回给pod。这样一来pod就无需直接和数据卷本身强绑定了。Pod无需知道数据卷的细节信息,比如具体用的是什么存储。 Pod中对数据卷的申请为PVC,用来和PVC绑定的数据卷称为PV。 PV可以有多种存储方式,比如NFS,iSCSI等。 PVC是使用PV资源的声明。 PVC和PV的关系是一对一的, 不能将多个PVC绑定到同一个PV上.PV和PVC的生命周期 供应阶段PV有两种供应方式 static 静态方式由系统管理员创建PV dynamic...
statefulset的使用
StatefulSet和Deployment控制器的区别 statefulSet下的Pod有DNS地址,通过解析Pod的DNS可以返回Pod的IP deployment下的Pod没有DNS 通过StatefulSet和headless service部署的服务效果 为什么要用headless service+statefulSet部署有状态应用?使用headless service+statefulSet可以实现 StatefulSet会为关联的Pod保持一个不变的Pod Name,其hostname格式为$(StatefulSet name)-$(序号【从0开始】) StatefulSet关联到的每一个Pod分配一个dnsName$<Pod Name>.$<service name>.$<namespace name>.svc.cluster.local headless service会为关联的statefulSet分配一个域,通过dns解析该域能获取到每个pod的ip+port<service...
subPath的使用场景及方法
在Pod中共享卷以供多方使用是很有用的。VolumeMounts.subPath属性可用于指定所引用的卷内的子路径,而不是其根路径。 subpath的两种使用场景 1个Pod中可以有多个容器,将不同容器的路径挂载在存储卷volume的子路径,这种场景需要使用到subpath。 volume支持将configMap/secret挂载到容器的路径,但是会覆盖容器路径下原有的文件。如何支持选定configmap/secret的key-value挂载到容器中,且不会覆盖掉原目录下的文件,这个时候可以用subpath。 一个pod多组容器的情况12345678910111213141516171819202122apiVersion: v1kind: Podmetadata: name: pod-subpath-yuhaohaospec: containers: - name: redis-container image: redis volumeMounts: - mountPath: /var/lib #...
使用NFS作为PV的绑定存储卷
NFSNFS 是 Network File System 的缩写,即网络文件系统。功能是让客户端通过网络访问不同主机上磁盘里的数据,主要用在类Unix系统上实现文件共享的一种方法。 本例演示 CentOS 7 下安装和配置 NFS 的基本步骤。 记得保证所有pod可部署机器都要安装NFS服务端或者NFS客户端,否则出现类似错误:wrong fs type, bad option, bad superblock on 192.168.1.5:/home/shared, missing codepage or helper program, or other error...