![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
K8S
文章平均质量分 69
summer_west_fish
本科毕业深圳大学,拥有Java开发10年的经验。 拥有Devops、敏捷和项目管理多年的经验,并且获得PMP、ACP和DOP等相关证书。
展开
-
WRK 压测工具使用
ThreadStats:线程统计信息。原创 2024-07-12 17:21:09 · 168 阅读 · 0 评论 -
Kubernetes K8S之调度器kube-scheduler详解
在 Kubernetes 中,调度是指将 Pod 放置到合适的 Node 节点上,然后对应 Node 上的 Kubelet 才能够运行这些 pod。调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被调度到 Node 上的 Pod。调度器会将发现的每一个未调度的 Pod 调度到一个合适的 Node 上来运行。调度器会依据下文的调度原则来做出调度选择。原创 2024-07-12 16:54:29 · 612 阅读 · 0 评论 -
Kubernetes中 Requests 和 Limits 的初步理解
我们都知道 Kubernetes 中最小的原子调度单位是Pod,那么就意味着资源管理和资源调度相关的属性都应该Pod对象的字段,其中我们最常见的就是 Pod 的 CPU 和内存配置,而为了实现 Kubernetes 集群中资源的有效调度和充分利用,Kubernetes采用 requests 和 limits 两种限制类型来对CPU和内存资源进行容器粒度的分配。其次,是Burstable级别的Pod,这个级别的Pod至少设置了1个CPU或者内存的requests,但又不满足最高级别的Qos条件。原创 2024-05-24 16:16:30 · 810 阅读 · 0 评论 -
Knative
Knative 专注于解决容器为核心的 Serverless 应用的构建、部署和运行的问题,它构建在 Kubernetes 和 Istio 平台之上,整合了 Kubernetes 提供的 deployment、replicaset 和 pods 等容器管理能力,与 Istio 提供的 ingress、LB、dynamic route 等网络管理功能。Knative 的开发人员可以使用熟悉的语言、框架和方式来部署任何工作负载,包括函数、应用与容器。- 源到容器的构建编排。原创 2024-04-08 14:29:41 · 175 阅读 · 0 评论 -
如何决定K8S Pod的剔除优先级
节点内存压力问题的出现,从之前的排查来看可能跟低版本的DCE有关,也有可能是节点产生了较多的cache占用了较多的内存,我们的建议是重启节点(之前同样问题的节点重启后暂时没出现过),如果不能重启节点,我们的建议是对节点进行扩容,通过k8s原理来看,在节点出现资源紧张的情况下,会对该节点的pod做驱逐排名,而resources设置了1:1相比于设置了1:n的,排名会更后,所以就出现了calico-node等pod被优先驱逐的情况。Pod的优先级是由用户设置的,并且可以通过权重来区分不同的优先级。原创 2024-02-06 18:44:34 · 1513 阅读 · 0 评论 -
OpenTelemetry
通俗来讲,可观测性被定义为根据系统产生的输出数据,如日志,指标和链路追踪来衡量当前系统运行状态的能力。可观测性目前被广泛的用于提升分布式 IT 系统的稳定性(系统复杂度成倍提升,在故障或者异常时很难快速定位和解决),它利用指标、日志和链路追踪三种类型数据,为分布式系统内部运行状态提供了深度透视能力,协助 DevOps 工程师解决各种问题并提升系统性能。转载 2024-01-18 18:13:34 · 186 阅读 · 0 评论 -
net.ipv4.ip_forward
net.ipv4.ip_forward 是 Linux 内核中的一个参数,用于控制 IP 转发功能。IP 转发是指在一个路由器或者网络设备上接收到一个 IP 数据包后,根据目标 IP 地址的路由信息将数据包发送到合适的接口,使其能够到达目标主机。启用 IP 转发功能后,Linux 系统将能够实现路由转发功能,将数据包从一个网络接口转发到另一个网络接口。在 Linux 中,net.ipv4.ip_forward 的默认值通常是 0,表示禁止 IP 转发。原创 2024-01-17 09:41:15 · 1966 阅读 · 0 评论 -
K8S中SC、PV、PVC的理解
存储类(StorageClass)定义了持久卷声明(PersistentVolumeClaim)所需的属性和行为,而持久卷(PersistentVolume)是实际的存储资源,持久卷声明(PersistentVolumeClaim)是 Pod 对持久卷的请求。原创 2024-01-09 17:25:54 · 873 阅读 · 0 评论 -
ServiceMesh
它不是一个“服务”的网格,而是一个“代理”的网格,服务可以插人这个“代理”的网格中,从而使网络抽象化。服务不直接通过网络调用服务,而是调用它们本地的 Sidecar代理,而 Sidecar代理又代表了服务管理请求,从而封装了服务间通信的复杂性。相互连接的Sidecar代理实现了所谓的数据平面,这与用于配置代理和收集指标的服务网格组件(控制平面)形成对比。在服务网格中,代理被称为数据层或数据平面(Data Plane),管理流程被称为控制层或控制平面(Control Plane)。原创 2024-01-06 20:07:11 · 369 阅读 · 0 评论 -
Flink访问K8S中namespace
【代码】Flink访问K8S中namespace。原创 2024-01-03 18:31:00 · 375 阅读 · 0 评论 -
Calico IP_AUTODETECTION_METHOD
模式时,确保 Kubernetes 集群正常运行,Calico 与 Kubernetes API 服务器正常通信,并且 Pod 的 IP 地址能够被正确分配和获取。这样,Calico 将能够有效地管理和路由容器的流量。是一种特殊的模式,用于在 Kubernetes 环境中检测容器的 IP 地址。的配置项用于指定 Calico 如何检测容器的 IP 地址。在 Calico 中,原创 2023-12-22 09:55:47 · 1098 阅读 · 1 评论 -
MetalLB/Metal Load Balancer
当流量到达时,物理网络设备将流量路由到MetalLB的VIP,然后MetalLB将其转发到实际运行服务的Pod。它使用集群中的物理节点作为虚拟IP(VIP)的代理,节点将收到的请求转发给实际运行服务的Pod。它的主要目标是为裸金属(Bare Metal)环境中的Kubernetes集群提供负载均衡服务,而无需依赖云服务提供商的负载均衡解决方案。在BGP 模式下,MetalLB使用 BGP 协议来通知集群中的路由器,告诉它们应该将流量路由到MetalLB的VIP。原创 2023-12-07 11:28:26 · 492 阅读 · 0 评论 -
Linux Control Cgroups
无论 Docker 如何进行隔离,无法否认的是我们在当前宿主机中运行的所有容器,它依赖的硬件资源都只是当前机器。其实启动的每一个容器进程,它本身其实就是当前宿主机的进程之一,那么本质上来说,它也会和宿主机中的其他进程进行资源的竞争。原创 2023-11-16 16:09:51 · 143 阅读 · 0 评论 -
Linux - Namespace
Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。Linux 内核出现 namespace 的一个主要目的就是实现轻量级虚拟化(容器)服务。在同一个 namespace 下的进程可以感知彼此的变化,而对外界的进程一无所知,从而达到隔离的目的。原创 2023-11-16 12:14:25 · 1154 阅读 · 0 评论 -
Docker Rootfs
在 Linux 操作系统中,这两部分是分开存放的,操作系统只有在开机启动时才会加载指定版本的内核镜像。。所以宿主机操作系统的内核,它对于该机器上的所有容器来说是一个全局变量,牵一发而动全身。由于 rootfs 的存在,容器才有了一个被反复宣传至今的重要特性:一致性。由于 rootfs 里打包的不只是应用,而是整个操作系统的文件和目录,也就意味着,应用以及它运行所需要的所有依赖,都被封装在了一起。有了容器镜像“打包操作系统”的能力,这个最基础的依赖环境也终于变成了应用沙盒的一部分。原创 2023-11-15 18:07:53 · 361 阅读 · 0 评论 -
Docker存储驱动之- overlay2
docker支持多种graphDriver,包括vfs、devicemapper、overlay、overlay2、aufs等等,其中最常用的就是aufs了,但随着linux内核3.18把overlay纳入其中,overlay的地位变得更重,最近也在自己的虚拟机上用overlay2作为docker存储驱动实验了一番,下面来做一个简单的笔记和总结。因为在docker中,image是由多个layer组合而成的,换句话就是layer是一个共享的层,可能有多个image会指向某个layer。原创 2023-11-15 17:31:40 · 981 阅读 · 0 评论 -
Karmada更高效地实现故障转移
随着云原生技术的发展,其应用场景不断扩大。越来越多的企业开始将应用程序部署在 Kubernetes 集群中,随着 Kubernetes 集群规模的不断扩大,也带来了许多管理挑战,例如多集群间负载均衡、资源调度、故障转移等问题。在多云多集群场景中,为了提高业务的高可用性,工作负载可能会被部署在多个不同的集群。在 Karmada 中,当集群发生故障,或是用户不希望在某个集群上继续运行工作负载时,集群状态将被标记为不可用,并被添加上一些污点。原创 2023-11-14 17:46:49 · 409 阅读 · 0 评论 -
Karmada调度器
调度器就像一个发动机,如果没有了发动机输入动力,是无法正常运行的。就像 Kubernetes 的调度器,它会负责根据节点的资源状态、Pod 的运行状态,判断 Pod 是调度到怎样的集群节点上去。对于 Karmada 这样的多云能力的调度器来说,调度能力也是大家非常关注的一个能力。主要体现在,能不能通过调度的能力,将多集群的资源负载,控制在相对均衡的水位线,以及需要被调度的资源对象,以怎样的方式被调度到不同的集群上。原创 2023-11-14 17:28:24 · 454 阅读 · 0 评论 -
Kubernetes Pod的hostNetwork & dnsPolicy
1、hostNetwork的作用将 Kubernetes(k8s)中的Pod的hostNetwork: true属性设置为true时,该Pod将与其所在节点共享网络命名空间。这意味着Pod将使用主机的网络栈和IP地址,而不是由Kubernetes创建并管理的专用网络栈。设置hostNetwork: true后,Pod将使用宿主机的网络配置,包括主机上的网络接口、IP地址、路由表等。这使得Pod能够直接访问主机上的网络资源,例如监听主机端口或通过主机上的网络设备进行通信。原创 2023-11-14 11:18:06 · 948 阅读 · 0 评论 -
K8s之CRD
定义CRD的规范,包括资源名称、API版本、字段等。使用kubectl或其他Kubernetes API工具创建自定义资源。metadata:spec:names:- mycrd在这个规范中,我们定义了一个名为“my-crds”的自定义资源,其API版本为“v1alpha1”,并且定义了该资源的字段和属性。原创 2023-11-07 11:36:19 · 744 阅读 · 0 评论 -
什么是 HwameiStor?
HwameiStor 是一款 Kubernetes 原生的容器附加存储 (CAS) 解决方案,将 HDD、SSD 和 NVMe 磁盘形成本地存储资源池进行统一管理, 使用 CSI 架构提供分布式的本地数据卷服务,为有状态的云原生应用或组件提供数据持久化能力。发生问题时,会自动将应用调度到高可用数据节点上,保证应用的连续性。可以自动发现、识别、管理、分配磁盘。聚合 HDD、SSD、NVMe 类型的磁盘,提供非低延时,高吞吐的数据服务。可以根据集群规模大小进行动态的扩容,灵活满足应用的数据持久化需求。原创 2023-11-06 10:59:37 · 143 阅读 · 0 评论 -
K8S基础架构租赁(Lease )
分布式系统通常需要租约(leases),租约提供了锁定共享资源和在一组成员之间协调活动的机制。在Kubernetes中,租约的概念由协调(k8s.io) API组中的Lease对象表示。在Kubernetes中,Lease对象用于协调集群中的节点和组件之间的通信和协作。例如,每个节点都会创建一个Lease对象,以向其他节点宣告自己的存在,并定期发送心跳信号以表明其健康状态。此外,Lease对象还可用于组件级别的领导者选举,例如选举控制器中的主节点。原创 2023-10-26 11:42:42 · 582 阅读 · 0 评论 -
Kubernetes中如何使用CNI?
它的全称是 Container Network Interface,即容器网络的 API 接口。它是 K8S 中标准的一个调用网络实现的接口。Kubelet 通过这个标准的 API 来调用不同的网络插件以实现不同的网络配置方式。实现了这个接口的就是 CNI 插件,它实现了一系列的 CNI API 接口。常见的 CNI 插件包括 Calico、flannel、Terway、Weave Net 以及 Contiv。原创 2023-10-23 16:27:44 · 425 阅读 · 0 评论 -
如何分析K8S中的OOMKilled问题(Exit Code 137)
当 Kubernetes 集群中的容器超过其内存限制时,Kubernetes 系统可能会终止该容器并显示“OOMKilled”错误,这表明该进程由于内存不足而被终止。此错误的退出代码是 137。原创 2023-10-17 17:13:28 · 3083 阅读 · 0 评论 -
K8S命令 - 查看Prometheus资源
kubectl -n dao-system get prometheusrules.monitoring.coreos.comkubectl describe prometheusrules.monitoring.coreos.com -n dao-system insight-alert-c6566be8-6875-4307-91fc-f153ef8c706b原创 2023-09-25 17:34:40 · 122 阅读 · 0 评论 -
Docker安装MongoDB
MongoDB 是一个免费的开源跨平台面向文档的 NoSQL 数据库程序。原创 2023-09-20 17:36:13 · 499 阅读 · 0 评论 -
Ingress Controller
在云原生生态中,通常来讲,入口控制器( Ingress Controller )是 Kubernetes 中的一个关键组件,用于管理入口资源对象。Ingress 资源对象用于定义来自外网的 HTTP 和 HTTPS 规则,以控制进入集群内服务的流量。而 Ingress Controller 则是真正实现 Ingress 规则的组件。从更为准确的角度而言,入口控制器( Ingress Controller )管理 L4 和 L7 层请求的南北向流量,也就是我们所说的从集群外部进入或离开集群的流程。原创 2023-09-20 14:15:23 · 896 阅读 · 3 评论 -
Kubernetes禁止调度
节点上的Taints可以使节点变得“有毒”,只有具有相应Toleration的Pod才能调度到这些节点上。如果您希望完全禁止Pod调度到某些节点上,可以确保这些节点不拥有所需的标签,这将阻止Pod调度到这些节点。这将使Pod只能调度到具有"nodename=forbidden"标签的节点上,如果没有这样的节点,Pod将无法调度。根据您的需求,您可以选择适合您情况的方法来禁止Pod的调度到特定节点上。这将允许具有相应Toleration的Pod调度到带有相应Taint的节点上,但其他Pod将被阻止调度。原创 2023-09-06 17:47:51 · 458 阅读 · 0 评论 -
Kubernetes亲和性
对于 Kubernetes 中的亲和性(Affinity),强亲和性(Hard Affinity)和弱亲和性(Soft Affinity)之间的主要区别在于容器是否要求绝对满足亲和性规则以进行调度。表示容器在选择节点时的权重,较高的权重会更有可能使容器在匹配规则的节点上运行,但不会强制要求这一点。原创 2023-09-06 17:40:15 · 114 阅读 · 0 评论 -
如何屏蔽有问题的pod?
使用Istio的DestinationRule资源,您可以为您的服务定义策略,包括流量的负载均衡、连接超时等。您可以在DestinationRule中配置负载均衡策略,以确保流量只被路由到健康的Pod。原创 2023-09-01 14:53:40 · 154 阅读 · 0 评论 -
K8S Nginx Ingress实现金丝雀发布
通过给 Ingress 资源指定 Nginx Ingress 所支持的 annotation 可实现金丝雀发布。需给服务创建2个 Ingress,其中1个常规 Ingress另1个为带固定的 annotation 的 Ingress,称为 Canary Ingress。Canary Ingress 一般代表新版本的服务,结合另外针对流量切分策略的 annotation 一起配置即可实现多种场景的金丝雀发布。表示如果请求头中包含指定的 header 名称,并且值为always。原创 2023-08-28 15:02:29 · 1346 阅读 · 0 评论 -
Calico
Calico 是一个开源的网络和网络安全解决方案,用于容器、虚拟机和裸机环境中的 Kubernetes 集群。Calico IPv4 Cross VXLAN 隧道模式提供了一种基于 VXLAN(虚拟扩展局域网)隧道的网络模式,使得位于不同主机上的 Pod 可以通过隧道进行通信,就像它们在同一扁平的局域网中一样。在 Kubernetes 集群中,容器和 Pod 可能分布在不同的主机节点上,因此需要一个网络解决方案来实现它们之间的通信。这允许在不同的物理网络上创建一个逻辑的扁平网络,从而支持跨主机的通信。原创 2023-08-28 09:35:18 · 112 阅读 · 0 评论 -
K8S ServiceAccount
一、ServiceAccount通常被用于授权Pod与集群中的其他资源和服务进行通信,以及访问一些需要权限的操作。ServiceAccount为Pod提供了一个身份,使得Pod能够与Kubernetes API进行交互。Kubernetes API会根据ServiceAccount的身份进行授权判断。通过ServiceAccount,Kubernetes管理员可以对Pod进行权限控制,限制它们能够访问的资源和操作,从而增强集群的安全性。原创 2023-08-07 16:49:00 · 1935 阅读 · 0 评论 -
GraalVM
GraalVM 和 Kata 都可以用于容器化环境中,GraalVM 提供高性能的运行时环境,适合在容器中执行各种类型的代码,而 Kata 提供更高级别的容器隔离,增强了容器的安全性。Kata 是一个轻量级的容器运行时环境,旨在提供额外的安全性保护,通过在容器中使用轻量级虚拟机(如Firecracker)来实现容器的隔离。GraalVM 是一个通用虚拟机,旨在提供多语言支持和高性能执行环境,可以执行多种编程语言的代码,并支持在不同语言之间互操作。GraalVM 提供运行时环境的安全性。原创 2023-08-06 14:24:16 · 359 阅读 · 0 评论 -
WebAssembly
总的来说,WebAssembly 是为了提高Web应用程序的性能和安全性而设计的,它解决了传统Web开发中的性能问题,提供了更多的编程语言选择,并提供了高效的跨平台执行环境。由于它的优势和特点,WebAssembly 在Web开发中逐渐得到广泛应用。WebAssembly(简称Wasm)是一种面向Web的二进制指令格式,用于在现代Web浏览器中运行高性能的可移植代码。WebAssembly 的主要设计目的是增强Web应用程序的性能和安全性。原创 2023-08-06 14:18:10 · 495 阅读 · 0 评论 -
Mecha
Mecha 是一个开源的多云 Kubernetes 管理平台,旨在简化和统一在多个云提供商上运行 Kubernetes 集群的管理和操作。它是由阿里巴巴集团开发和维护的项目。Mecha 的主要目标是提供一个统一的界面和工具,使用户能够更轻松地在不同的云提供商上创建、部署、扩展和管理 Kubernetes 集群,从而降低多云部署和管理的复杂性。它提供了一套功能强大的工具和自动化机制,使用户能够在多云环境下无缝地迁移、管理和调整 Kubernetes 集群。原创 2023-08-06 12:24:32 · 165 阅读 · 0 评论 -
xDS协议
xDS 协议是基于 gRPC 的,可以支持多种编程语言和平台,使得配置管理系统和 Envoy 可以在不同的环境中灵活部署和交互。Envoy 可以根据配置管理系统的动态变化实时更新路由规则、负载均衡策略、健康检查等配置,从而实现对流量的动态调整和管理。通过动态配置和负载均衡,xDS 可以实现服务的高可用性和容错能力,使得服务能够适应动态变化的网络环境。总之,xDS 协议是 Envoy Proxy 用于动态配置的一组管理接口,用于监听器配置,定义了 Envoy 接收请求的网络监听端口和配置。原创 2023-08-06 11:46:08 · 444 阅读 · 0 评论 -
创建Helm脚本
Helm 是 Kubernetes 的包管理工具,它可以帮助您简化和自动化 Kubernetes 应用程序的部署和管理。使用 Helm,您可以创建和管理称为 Helm Chart 的应用程序打包,这些 Chart 包含了 Kubernetes 资源和配置信息,可以在不同的 Kubernetes 集群上部署和管理应用程序。在 Helm 中,通过执行 `helm create` 命令,您可以快速创建一个新的 Helm Chart。原创 2023-08-03 17:40:34 · 510 阅读 · 0 评论 -
Openshift
OpenShift 是一个由 Red Hat 公司开发和维护的容器应用平台,OpenShift 可以在本地部署或者使用 Red Hat 的托管服务(OpenShift Online、OpenShift Dedicated)。原创 2023-07-31 11:52:07 · 198 阅读 · 0 评论 -
Kata Containers
综上所述,Kata Containers 提供了一种虚拟化容器的解决方案,可以提供更高的安全性和隔离性,同时保持与容器生态系统的兼容性。它适用于需要更强安全隔离或对性能有一定要求的场景。但也需要权衡资源消耗和启动时间等因素。原创 2023-07-31 10:43:42 · 487 阅读 · 0 评论