Kubernetes
文章平均质量分 87
margu_168
这个作者很懒,什么都没留下…
展开
-
【kubernets】由Evicted状态的Pod探讨k8s中pod的驱逐策略
某天突然发现自己的测试环境中有Evicted状态的pod,于是需要排查原因。从上面可以看到当前节点上有一个处于Evicted状态的Pod,名为,其对应的QoS Classs为Burstable,而此时节点上pod的QoS Classs还有BestEffort。同时通过describe发现该Evicted状态的pod是由于造成的。查看/var/log/messages日志中kubelet的相关日志发现是由于磁盘使用量达到97%(超过默认驱逐阈值85%)导致pod被驱逐。而事实上也如此,通过df。原创 2024-01-29 16:23:26 · 1333 阅读 · 0 评论 -
【kubernets】kubelet证书单独更新
接上一篇文章关于kubernets中的证书管理。本篇文章将单独说明一下kubelet的证书更新。在1.19.16版本中,默认情况下使用 kubeadm alpha certs renew all 不能更新kubelet的证书,其他版本请自行测试。但是某些情况下,我们需要立即对kubelet使用的证书更新,下面的方法大家可以参考一二。原创 2024-01-25 15:21:24 · 796 阅读 · 0 评论 -
【kubernetes系列】kubeadm证书调整
默认情况下,kubeadm 会生成运行一个集群所需的全部证书。你可以通过提供你自己的证书来改变这个行为策略。如果要这样做,你必须将证书文件放置在通过 --cert-dir 命令行参数或者 kubeadm 配置中的 certificatesDir 配置项指明的目录中。默认的值是 /etc/kubernetes/pki。如果在运行 kubeadm init 之前存在给定的证书和私钥对,kubeadm 将不会重写它们。原创 2023-08-30 16:04:55 · 300 阅读 · 0 评论 -
【kubernetes系列】Calico原理及配置
Calico是针对容器,虚拟机和基于主机的本机工作负载的开源网络和网络安全解决方案。Calico支持广泛的平台,包括Kubernetes,OpenShift,Docker EE,OpenStack和裸机服务。Calico在每个计算节点都利用Linux Kernel实现了一个高效的vRouter来负责数据转发。每个vRouter都通过BGP协议把在本节点上运行的容器的路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则。原创 2023-08-30 11:16:25 · 3206 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之Kubelet运行机制和状态更新机制
Kubelet是Kubernetes中的一个重要组件,它负责管理节点上的容器和Pod,并与Master节点进行通信。Kubelet的工作流程包括获取Pod列表、创建Pod、监控容器状态和清理容器。Kubelet的配置包括节点名称、Pod网络、容器运行时和资源限制。计算公式。原创 2023-08-14 09:50:15 · 1024 阅读 · 0 评论 -
【kubernetes系列】flannel三种常见模式分析
对端宿主机的流量可以用类似方法抓取。和两台主机直接通信相比,Flannel UDP模式多了一个 flanneld 进程的处理,该处理会导致数据多次在用户态和内核态传递。如下图所示:第一次,用户态的容器进程发出的 IP 包经过 cni0 网桥进入内核态;第二次,IP 包根据路由表进入 TUN(flannel0)设备,从而回到用户态的 flanneld 进程;第三次,flanneld 进行 UDP 封包之后重新进入内核态,将 UDP 包通过宿主机的 eth0 发出去。原创 2023-08-01 15:35:56 · 1681 阅读 · 0 评论 -
etcd入门和常用操作
etcd 是一个高可用的分布式键值(key-value)数据库,采用了更为简洁的Raft共识算法来实现数据强一致。基于Go语言实现,主要用于共享配置和服务发现。原创 2023-07-26 15:44:29 · 2153 阅读 · 0 评论 -
【kubernetes系列】flannel之vxlan模式分析
在Kubernetes中要保证容器之间网络互通,网络至关重要。而Kubernetes本身并没有自己实现容器网络,而是而是借助CNI标准,通过插件化的方式自由接入进来。原创 2023-07-26 09:54:25 · 1045 阅读 · 0 评论 -
kubernetes中常见的exited code总结
当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果是 Kubernetes 用户,容器故障是 pod 异常最常见的原因之一,了解常见的容器退出码可以帮助在排查时更快捷找到 pod异常的根本原因。可以参考说明:在使用kubernetes时,我们其实不需要记住具体的代码含义,很多时候,我们通过describe中event中的提示信息就能知道容器异常的原因。下面我们将解释如何在宿主机和 Kubernetes 中对失败的容器进行故障排除,并提供有关上面列出的所有退出代码的更多详细信息。容器生命周期。原创 2023-07-24 15:56:21 · 2000 阅读 · 0 评论 -
【kubernetes系列】kubernetes之使用kubeadm搭建高可用集群
版本目前来说,kubernetes集群搭建的方式很多,选择一个稳定的适合自己的很重要。目前使用kubeadm方式搭建k8s集群还是很常见的,使用kubeadm搭建可以很简单差不多两条命令就行,也可以稍微复杂一点做一些基础优化,本文将分享一下使用kubeadm搭建集群并做了一定的优化。原创 2023-07-24 11:28:25 · 1204 阅读 · 0 评论 -
【kubernetes系列】kubernetes之使用ingress访问TCP和 UDP服务
前面我们通过部署nginx-ingress作为一个访问入口,访问的都是支持http类型的服务,但是某些些场景下我们的服务不支持通过http服务访问,如MySQL,但是MySQL支持通过tcp进行访问。如果通过nodeport方式的话,每个节点都会暴露端口,会显得繁琐浪费。而我们集群一般会部署一个nginx-ingress,我们可以通过它来支持tcp的访问。原创 2023-07-20 15:44:47 · 1429 阅读 · 1 评论 -
【kubernetes系列】kubernetes之基础组件高可用方案
从前面的基础章节了解到,kubernetes的mastere节点基础组件大致包括kube-apiserver、kube-controller-manager、kube-scheduler,还有一个重要的数据存储服务etcd。这些主件作为master节点的服务相当重要,很多时候我们都需要保证其高可用。下面将分享在实际工作中的一些常见做法。原创 2023-07-20 13:54:06 · 346 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之资源配置范围管理LimitRange
在默认情况下,Kubernetes不会对Pod加上CPU和内存限制,这意味着Kubernetes系统中任何Pod都可以使用其所在节点的所有可用的CPU和内存。在之前的章节分享了针对集群中某个pod的资源限制,通过配置容器的计算资源Requests和Limits,我们可以限制Pod的资源使用。但对于Kubernetes集群管理员而言,配置每一个Pod的Requests和Limits是烦琐的,而且很受限制。原创 2023-07-19 21:20:28 · 1090 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之资源限制ResourceQuota
当多个用户或团队共享具有固定节点数目的集群时,人们会担心有人使用超过其基于公平原则所分配到的资源量。我们可以通过ResourceQuota来解决这个问题,对每个namespace的资源消耗总量提供限制。它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命名空间中的 Pod 可以使用的计算资源的总上限。提示: 可使用 LimitRange 准入控制器来为没有设置计算资源需求的Pod设置默认值。ResourceQuota官方文档地址。原创 2023-07-19 16:00:03 · 1133 阅读 · 1 评论 -
【kubernetes系列】kubernetes之计算资源管理
CPU是可以压缩资源,所以在CPU不够的时候会压缩限流。而内存是不可压缩资源,所以QoS主要用于内存限制。原创 2023-07-18 21:25:50 · 1021 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之配置dashboard安装使用
Dashboard 是基于网页的 Kubernetes 用户界面。你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,DaemonSet 等等)。但是一般还是图形化界面一般还是给开发或者对kubernetes不太熟悉的人查看使用。原创 2023-07-17 21:33:50 · 1373 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之调度器和调度过程
当用户请求向API server创建新的Pod时,API server检查授权、权限等没有任何问题的话,他会把这个请求交由Scheduler,由Scheduler检查所有符合该Pod要求的列表,开始执行Pod调度逻辑,选定Node完成后会把选择结果返回给API server,并将选定信息写入etcd中。原创 2023-07-17 14:34:02 · 851 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之Ingress
从前面的学习,我们可以了解到Kubernetes暴露服务的方式目前常见的只有三种:LoadBlancer Service、NodePort Service、Ingress;Kubernetes 具有强大的副本控制能力,能保证在任意副本(Pod)挂掉时自动启动一个新的,还可以进行动态扩容等。那么自然随着 Pod 的销毁和创建,Pod IP 也会动态变化;那么通过Pod IP去访问某个服务的话是不现实的,而且如果是多个pod实例,怎么做到负载均衡呢?原创 2023-07-14 10:19:19 · 1117 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之ServiceAccount
默认的service account 仅仅只能获取当前Pod自身的相关属性,无法观察到其他名称空间Pod的相关属性信息。如果想要扩展Pod,假设有一个Pod需要用于管理其他Pod或者是其他资源对象(例如dashboard),是无法通过自身的名称空间的default service account进行获取其他Pod的相关属性信息的,此时就需要进行手动创建一个serviceaccount,并在创建Pod时进行定义使用。原创 2023-07-12 14:29:13 · 1872 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之RBAC
k8s的权限控制在实际工作中不那么经常使用,但是却是很重要的,我们需要深入理解才能很好的解决某些问题。在我们现目前的了解中,常用的授权插件有以下几种:Node(节点认证)ABAC(基于属性的访问控制)RBAC(基于角色的访问控制)Webhook(基于http回调机制的访问控制)kubernetes 集群相关所有的交互都需要通过apiserver来完成,对于这样集中式管理的系统来说,权限管理尤其重要,Kubernetes的授权是基于插件形式的,在1.5版的时候引入了基于角色的访问控制(Role-Bas原创 2023-07-11 15:08:57 · 1197 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之configMap
工作中,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如服务需要配置MySQL、Redis等相关信息。而业务上线一般要经历开发环境、测试环境、预发布环境只到最终的线上环境,每一个环境一般都需要其独立的配置。如果我们不能很好的管理这些配置文件,运维工作将顿时变的无比的繁琐而且很容易出错。工作中最佳实践是将应用所需的配置信息于程序进行分离,这样可以使得应用程序被更好的复用,如将应用打包为容器镜像后,可以通过环境变量或外挂文件的方式在创建容器时进行配置注入。原创 2023-07-06 15:17:40 · 1704 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之Secret凭证
如果–service-account-key-file=未传入任何值,那么将默认使用–tls-private-key-file的值,即API Server的私钥。它们都通过mount 的方式挂载到 pod 中,其中 token 保存的路径是 /var/run/secrets/kubernetes.io/serviceaccount/token ,是 kube-controller-manager 通过–service-account-private-key-file私钥签发的token;原创 2023-07-05 16:31:18 · 1087 阅读 · 0 评论 -
【kubernetes系列】kubernetes中的container的command和args
概述kubernetes中container的command和args主要用于设置运行的命令和参数,它与docker中的entrypoint和cmd有一定的相似之处,但还是有一定的区别。官方文档可参考https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell如下是Docker 与 Kubernetes中对应的字段名称。原创 2023-07-04 21:55:48 · 2894 阅读 · 0 评论 -
【kubernetes系列】kubernetes之initcontainer初始化容器
我们知道一个Pod里面的所有容器是共享数据卷和网络命名空间的,所以Init Container里面产生的数据可以被主容器使用到的。我们可以在集群环境中去查看任意一个Pod对应的运行的Docker容器,我们可以发现每一个Pod下面都包含了一个pause-amd64的镜像,这个就是我们的infra镜像,我们知道Pod下面的所有容器是共享同一个网络命名空间的,这个镜像就是来做这个事情的,所以每一个Pod当中都会包含一个这个镜像,其实就是我们之前了解到的pause容器。##有初始化容器的pod。原创 2023-07-03 16:00:00 · 608 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之Taints和tolerations
节点亲和性是pod的一种属性(优先选择或硬性要求),它使 pod 被优先分配到一类特定的节点上。而Taint则相反,它使节点能够排斥一类特定的 pod。Taints(污点)与tolerations(容忍度)一起工作确保Pod不会被调度到不合适的节点上。Taints是node的属性,单个节点可以添加多个taint(污点),node不接受无法容忍taint(污点)的pod的调度。Toleration(容忍度)是pod的属性,允许(非强制)pod调度到taints(污点)相匹配的node上去。原创 2023-07-03 14:42:36 · 1079 阅读 · 0 评论 -
【kubernetes系列】kubernetes之kube-proxy的工作模式
从kubernetes最早开始,kube-proxy到现在总共支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,iptables 模式从 v1.2 版本开始引入并作为kube-proxy 默认的操作模式。在kubernetes 1.8之后引入了ipvs模式,并且在v1.11中正式使用,其中iptables和ipvs都是内核态也就是基于netfilter,只有userspace模式是用户态。原创 2023-07-03 10:17:55 · 2250 阅读 · 0 评论 -
【kubernetes系列】kubernetes中常用命令总结
查看集群信息#以本地服务部署的组件可以用以下命令查看。原创 2023-06-28 20:28:16 · 635 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之namespace
Namespace(命名空间)是Kubernetes系统中的另一个非常重要的概念,Namespace在很多情况下用于实现多租户的资源隔离。Nameaspace通过将集群内部的资源对象“分配”到不同的Namespce中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。原创 2023-06-28 19:25:02 · 448 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之volume、pv和pvc
为了保证数据的持久性,必须保证数据存放在外部存储。在普通的docker容器中,为了实现数据的持久性存储,我们在宿主机和容器内做映射,可以保证在容器的生命周期结束,数据依旧可以实现持久性存储。但是在k8s中,由于pod分布在各个不同的节点之上,并不能实现不同节点之间持久性数据的共享,并且,在节点故障时,可能会导致数据的永久性丢失。为此,k8s就引入了外部存储卷的功能。Volume是Pod中能够被多个容器访问的共享目录。原创 2023-06-28 16:48:06 · 1039 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之service
Service也是Kubernetes里的最核心的资源对象之一,正是因为对此概念的支持,Kubernetes在某种角度下可以被看成是一种微服务平台。由于Kubernetes中的pod并不稳定,比如由ReplicaSet、Deployment、DaemonSet等副本控制器创建的pod,其副本数量、pod名称、pod所运行的节点、pod的IP地址等,会随着集群规模、节点状态、用户缩放等因素动态变化。原创 2023-06-27 21:25:31 · 690 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之job和cronjob控制器
CronJob 中保存的任务其实是有上限的,spec.successfulJobsHistoryLimit 和 spec.failedJobsHistoryLimit 分别记录了能够保存的成功或者失败的任务上限,超过这个上限的任务都会被删除,默认情况下这两个属性分别为 spec.successfulJobsHistoryLimit=3 和 spec.failedJobsHistoryLimit=1。本章节将分享kubernetes中的job控制器和cronjob控制器,这是用于另外两种场景的pod控制器。原创 2023-06-27 14:20:22 · 603 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之statefulset和daemonset控制器
大部分有状态副本集都会用到持久存储,比如分布式系统来说,由于数据是不一样的,每个节点都需要自己专用的存储节点。而在deployment中pod模板中创建的存储卷是一个共享的存储卷,多个pod使用同一个存储卷,而statefulset定义中的每一个pod都不能使用同一个存储卷,由此基于pod模板创建pod是不适应的,这就需要引入volumeClainTemplate,当在使用statefulset创建pod时,会自动生成一个PVC,从而请求绑定一个PV,从而有自己专用的存储卷。原创 2023-06-26 20:38:16 · 746 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之pod、lable和annotation
说明:kind为Pod表明这是一个Pod的定义,metadata里的name属性为Pod的名字,metadata里还能定义资源对象的标签(Label),这里表明myweb拥有一个name=myweb的标签(Label)。Label可以附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去,Label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。例如:部署不同版本的应用到不同的环境中;原创 2023-06-25 16:40:10 · 928 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之master和node
Node当前的运行状态,Node启动以后会做一系列的自检工作,比如磁盘是否满了,如果满了就标注OutOfDisk=True,否则继续检查内存是否不足(如果内存不足,就标注MemoryPressure=True),最后一切正常,就设置为Ready状态(Ready=True),该状态表示Node处于健康状态,Master将可以在其上调度新的任务了(如启动Pod)。Node 由 Master 管理,Node 上有相应的服务负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。原创 2023-06-25 16:06:36 · 1131 阅读 · 0 评论 -
【kubernetes系列】Kubernetes入门
首先,Pod运行在一个我们称之为节点(Node)的环境中,这个节点既可以是物理机,也可以是私有云或者公有云中的一个虚拟机,通常在一个节点上运行几百个Pod,其次,每个 Pod 里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此它们之间的通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod 中;最后,Kubernetes 是一个完备的分布式系统支撑平台。原创 2023-06-25 15:55:45 · 672 阅读 · 0 评论 -
【kubernetes系列】Kubernetes中的重要概念
Service也是Kubernetes里的最核心的资源对象之一,Kubernetes里的每个Service其实就是我们经常提起的微服务架构中的一个“微服务”,之前我们所说的Pod、RC等资源对象其实都是为这节所说的“服务”------Kubernetes Service作“嫁衣”的。为此,Deployment在内部使用了Replica Set来实现目的,无论从Deployment的作用与目的、它的Yaml定义,还是从它的具体命令行操作来看,我们都可以把它看作RC的一次升级,两者的相似度超过90%。原创 2023-06-25 15:21:53 · 619 阅读 · 0 评论 -
【kubernetes系列】Kubernetes之RC、RS和Deployment
当我们的应用升级时,通常会通过Build一个新的Docker镜像,并用新的镜像版本来替代旧的版本的方式达到目的,在系统升级的过程中,我们希望是平滑的方式,比如当前系统中10个对应的旧版本的Pod,最佳的方式是旧版本的Pod每次停止一个,同时创建一个新版本的Pod,在整个升级过程中,此消彼长,而运行中的Pod数量始终是10个,几分钟以后,当所有的Pod都已经是最新版本时,升级过程完成。Controller 中定义了 Pod 的部署特性,比如有几个副本,在什么样的 Node 上运行等。原创 2023-06-25 14:50:43 · 1255 阅读 · 0 评论 -
【kubernetes系列】Kubernetes Namespace介绍
Namespace(命名空间)是Kubernetes系统中的另一个非常重要的概念,Namespace在很多情况下用于实现多租户的资源隔离。Nameaspace通过将集群内部的资源对象“分配”到不同的Namespce中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。当我们給每个租户创建一个Namespace来实现多租户的资源隔离时,还能结合Kubernetes的资源配额管理,限定不同租户能占用的资源,例如CPU使用量、内存使用量等。原创 2023-05-12 10:42:48 · 261 阅读 · 0 评论 -
【kubernetes系列】kubernetes中的deployment
Deployment是Kubernetes v1.2引入的概念,引入的目的是为了更好地解决Pod的编排问题,功能相对于replicas set、replicats controller来说更加强大。Deployment在内部使用了Replica Set来实现目的,无论从Deployment的作用与目的,它的YAML定义,还是从它的具体命令行操作来看,我们都可以把它看作RC的一次升级,两者相似度超过90%。Deployment相对于RC的一个最大升级是我们随时知道当前Pod“部署”的进度。原创 2023-05-09 21:41:52 · 776 阅读 · 0 评论 -
【kubernetes系列】k8s集群中删Terminating状态的资源
在初学阶段,经常可能遇到删除资源不成功的时候,一直处于Terminating状态。今天介绍删除常用的两种处于Terminating状态的资源namespace和pod。按如下的删除,方框内的,包括小方框的逗号。即可。原创 2023-05-09 14:32:51 · 1143 阅读 · 1 评论