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 #...
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...
使用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...
使用kubeconfig或token进行用户身份认证
参考:https://jimmysong.io/kubernetes-handbook/guide/auth-with-kubeconfig-or-token.html 在开启了 TLS 的集群中,每当与集群交互的时候少不了的是身份认证,使用 kubeconfig(即证书) 和 token 两种认证方式是最简单也最通用的认证方式,在 dashboard 的登录功能就可以使用这两种登录功能。 下文分两块以示例的方式来讲解两种登陆认证方式: 为 brand 命名空间下的 brand 用户创建 kubeconfig 文件 为集群的管理员(拥有所有命名空间的 amdin 权限)创建 token 使用 kubeconfig 方式如何生成kubeconfig文件请参考创建用户认证授权的kubeconfig文件。 注意我们生成的 kubeconfig 文件中没有 token 字段,需要手动添加该字段。 比如我们为 brand namespace 下的 brand 用户生成了名为 brand.kubeconfig 的 kubeconfig 文件,还要再该文件中追加一行 token...
使用metricbeats监控k8s
简介 Metricbeat 是服务器上的轻量级收集器,用于定期收集主机和服务的监控指标【包括events】。 Metribeat 默认收集系统指标,但也包含大量其他模块,用于收集 Nginx、Kafka、MySQL、Redis 等服务的指标。支持的模块的完整列表可以在 Elastic 官网查看:https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html。 kube-state-metrics官方地址:https://github.com/kubernetes/kube-state-metrics 注:对于使用 prometheus-operator/kube-prometheus 的用户, kube-prometheus 将 kube-state-metrics 作为其组件之一。 如果已经安装了 kube-prometheus,则无需安装 kube-state-metrics。 首先,我们需要安装 kube-state-metrics,这是一个组件,它是一个侦听...
几种强制删除资源对象的方式
仅删除1kubectl delete namespace <ns> 强制删除12# grace-period=0: 设置优雅删除时间为0kubectl delete namespace <ns> --force --grace-period=0 修改.spec.finalizer和metadata.finalizer字段12kubectl edit namespace cattle-system查找finalizers,将后面的值置为[] 通过k8s提供的api接口,修改.spec.finalizers和metadata.finalizer字段,将后面的值置为[],从而k8s会直接将该ns删除1234561. kubectl get namespace <ns> -o json > xx.json2. 编辑该xx.json文件,修改.spec.finalizers字段,将后面的值置为[]3. 另开一个终端,开启k8s apiserver的一个http代理,以免必须带上证书才能访问: kubectl proxy --port=80814....
如何合理的解决资源分配问题
资源分配不均匀问题简述 资源相关的打分算法 LeastRequestedPriority 和 MostRequestedPriority 都是基于 request 来进行评分,而不是按 Node 当前资源水位进行调度(在没有安装 Prometheus/Metrics 等资源监控相关组件之前,kube-scheduler 也无法实时统计 Node 当前的资源情况)。 简单来说,k8s在进行调度时,计算的就是requests的值,不管你limits设置多少,k8s都不关心。所以当这个值没有达到资源瓶颈时,理论上,该节点就会一直有pod调度上去。 综上所述,在实际场景就可能会遇到以下几种情况 经常在 K8s 集群种部署负载的时候不设置 CPU requests (这样“看上去”就可以在每个节点上容纳更多 Pod )。在业务比较繁忙的时候,节点的 CPU 全负荷运行。业务延迟明显增加,有时甚至机器会莫名其妙地进入 CPU 软死锁等“假死”状态。 在 K8s...
记一次接口慢调用问题排查
现象 系统的商户端出现响应慢,加载慢的问题 关于慢调用问题 可能带来的危害包括: 前端业务维度:首先慢调用可能会引起前端加载慢的问题,前端加载慢可能会进一步导致应用卸载率高,进而影响品牌的口碑。 项目交付的维度:由于接口慢导致达不到 服务质量目标,进而导致项目延期。 业务架构稳定性:当接口调用慢时,非常容易引起超时,当其他业务服务都依赖这个接口,那么就会引发大量重试,进而导致资源耗尽,最终导致部分服务或者整个服务不可用的雪崩的现象。 问题排查 先排查下其他端是否也存在慢响应等问题,发现加载正常 检查网关日志(orange),发现有大量status:499。 关于status code 499, client has closed...
获取客户端IP之externalTrafficPolicy
externaltrafficpolicy作用阐述把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有 kubernetes 1.7 或更高版本的 kube-dns...
记录k8s-service中的几种类型以及port区别
官方介绍k8s service 分为几种类型,分别为:ClusterIp (默认类型,每个Node分配一个集群内部的Ip,内部可以互相访问,外部无法访问集群内部) NodePort (基于ClusterIp,另外在每个Node上开放一个端口,可以从所有的位置访问这个地址) LoadBalance (基于NodePort,并且有云服务商在外部创建了一个负载均衡层,将流量导入到对应Port。要收费的,一般由云服务商提供,比如阿里云、AWS等均提供这种服务, k3s也默认提供了一个lbs - klipper-lb, 本地集群可以使用metallb, metallb解释文档) ExternalName (将外部地址经过集群内部的再一次封装,实际上就是集群DNS服务器将CNAME解析到了外部地址上,实现了集群内部访问) 例如,以下 Service 定义将 prod 名称空间中的 my-service 服务映射到 my.database.example.com: 12345678apiVersion: v1kind: Servicemetadata:name:...