- 博客(122)
- 收藏
- 关注
原创 Kubernetes之Headless Services
Kubernetes中的Headless Services(无头服务)是一种特殊类型的服务(Service)定义,它不提供传统意义上的负载均衡和集群IP地址分配。在无头服务中,字段被显式设置为None,Kubernetes不会为该服务分配一个虚拟IP(ClusterIP)地址。
2024-05-09 16:57:15
1278
原创 k8s calico vxlan式详解
之前的文章讲了k8s ipip模式的使用以及流量路径,本篇文章主要是来讲解一下vxlan 模式下pod 流量是如何通信的。
2024-04-23 10:35:53
3500
3
原创 k8s whereabouts 使用
whereabouts是一个cluster-wide(集群级别)的IPAM插件,非常适合用在NetworkAttachment的场景。之前我们描述过k8s为分配地址使用的是ipam,常见的ipam类型为host-local,calico-ipam。whereabouts是一款用于替换host-local的ipam。记录本地或者k8s已经分配的pool和ip地址。通常以 NAD 为地址段设定的模式,一个 nad 中描述 该 地址段的 ip 范围,网关等信息。
2024-04-22 18:17:26
925
3
原创 k8s pod使用sriov
SR-IOV在2010年左右由Intel提出,但是随着容器技术的推广,intel官方也给出了SR-IOV技术在容器中使用的开源组件,例如:sriov-cni和sriov-device-plugin等,所以SR-IOV也开始在容器领域得到的大量使用。在传统的虚拟化中,虚拟机的网卡通常是通过桥接(Bridge或OVS)的方式,因为这种方式最方便,也最简单,但是这样做最大的问题在于性能。
2024-04-22 18:05:08
2090
1
原创 k8s pod 绑核
默认配置下,kubelet/Linux 使用CFS(完全公平调度)算法来为 Pod 分配 CPU,工作负载(Pod 中的进程)会被调度到不同的可用的 CPU 核心,而且大多数工作负载对这种迁移带来的性能损失并不敏感。CFS 是 Linux 内核中 SCHED_NORMAL 类任务(普通进程)的默认调度算法,摒弃了原先的固定时间片优先级概念,致力于公平地将 CPU 时间分配给任务。但是 CPU 缓存的亲和性和调度延迟会对少数进程带来显著影响,这类工作负载需要独占 CPU(“绑核”)。
2024-04-22 17:47:39
1180
1
原创 k8s ingress基础
在k8s集群中,service和pod的ip为内网ip,仅集群内部才可以访问。如果外部应用想要直接访问集群内的服务,就需要把外部请求通过负载均衡转发到service上,然后再由kube-proxy组件将其转发给后端pod。一般service可以通过NodePort和LoadBalancer两种方式对外提供访问,但是这两种方式都有以下缺点NodePort:将service暴露在节点网络上,NodePort背后就是Kube-Proxy,Kube-Proxy是沟通service网络、Pod网络和节点网络的桥梁。
2023-11-10 18:00:45
1530
原创 k8s集群中namespace状态一直显示Terminating
今天在做测试时,在一个namespace下无法启动pod,查看ns状态一直显示Terminating。根据以上现象,怀疑是该ns下有未释放的资源,使用如下命令查看。将空ns通过调用k8s的api接口覆盖掉原来的ns。打开新的终端,再次执行上述命令,返回如下内容。使用–force 删除也是一直卡着的状态。以json格式导出ns的详细信息。使用kube-proxy开启端口。
2023-11-02 16:46:47
585
原创 k8s 多网卡方案multus
Multus CNI 是一种符合CNI规范的开源插件,为实现 K8s环境下容器多网卡而提出的解决方案并与其他 CNI 插件搭配使用。Multus CNI 本身不提供网络配置功能,它是通过用其他满足 CNI 规范的插件进行容器的网络配置。如下图所示,当集群环境存在 Multus CNI 插件并添加额外配置后,将会发现此容器内不再仅有 eth0 接口CNI 是一组限于容器网络面的规范,定义了容器网络资源创建、管理的规则。其自身实现并提供了内置且通用的网络插件,同时为第三方实现其规范预留了扩展。类型。
2023-11-02 15:20:01
2807
8
原创 calico ipam使用
前面的文章pod获取ip地址的过程中提到过calico使用的IP地址的管理模块是其自己开发的模块calico-ipam,本篇文章来讲述下其具体用法。
2023-11-01 15:03:01
671
原创 k8s 资源预留
可压缩资源(CPU)和不可压缩资源可压缩资源比如CPU超配后,在系统满负荷时会划分时间片分时运行进程,系统整体会变慢(一般不会导致太大的问题)。但不可压缩资源如Memory,当系统内存不足时,就有可能触发系统 OOM;这时候根据 oom score 来确定优先杀死哪个进程,而 oom_score_adj 又是影响 oom score 的重要参数,其值越低,表示 oom 的优先级越低。
2023-10-31 19:59:07
14774
原创 k8s pod获取ip地址过程
Kube-controller-manager 为每个节点分配一个 podCIDR。从 podCIDR 中的子网值为节点上的 Pod 分配了 IP 地址。由于所有节点上的 podCIDR 是不相交的子网,因此它允许为每个 pod 分配唯一的IP地址。Kubernetes 集群管理员可配置和安装 kubelet、container runtime、network provider,并在每个节点上分发 CNI 插件。Network provider agent 启动时,将生成 CNI 配置。
2023-10-30 15:46:10
1456
原创 helm 内置对象
前面的文章介绍了 Helm Chart 的一些基本概念和使用,接下来我们重点介绍下 Chart 模板的编写。模板会渲染成 Kubernetes 的资源清单文件,接下来我们将来学习下模板的结构和如何使用它们,以及如何调试。对象从模板引擎传递到模板中,在代码中可以传递对象,也有一种方法可以在模板宏创建新的对象,比如tuple函数。对象可以很简单,也可以包含其他对象或函数,例如,Release 对象就包含几个对象(比如 Release.Name),Files 对象就包含几个函数。
2023-08-10 15:10:07
422
原创 iptables自定义chain
在iptables中,可以创建自定义链(Custom Chains)来组织和管理防火墙规则。自定义链可以以更高层次和更好的可读性来管理规则,使配置和维护更加简单。以下为在iptables中创建和使用自定义链的示例1:创建chain mychain2:添加规则到自定义链禁止192.168.1.0的网段访问本机,丢弃源地址的流量3:调用自定义链这将将所有传入 TCP 端口 80 的流量传递到 MYCHAIN 自定义链进行处理。如果不调用自定义的规则链,则自定义的规则链无效4:删除自定义链。
2023-08-10 14:10:43
2630
原创 helm chart 介绍
Helm 使用一种名为 charts 的包格式,一个 chart 是描述一组相关的 Kubernetes 资源的文件集合,单个 chart 可能用于部署简单的应用,比如 nginx pod,或者复杂的应用,比如一个完成的lnmp应用程序。Charts 是创建在特定目录下面的文件集合,然后可以将它们打包到一个版本化的存档中来部署。接下来我们就来看看使用 Helm 构建 charts 的一些基本方法。
2023-07-28 16:53:47
1664
原创 helm基础
Helm 可以帮助我们管理 Kubernetes 应用程序 - Helm Charts 可以定义、安装和升级复杂的 Kubernetes 应用程序,Charts 包很容易创建、版本管理、分享和分布。Helm 对于 Kubernetes 来说就相当于 centos中的yum ,可以减少复杂的Kubernetes 应用程序的维护成本,接下来讲解一下 Helm 的使用方法。在我们进行上述的安装、升级、回滚等动作时,还可以进行一些参数的添加--timeout。
2023-07-27 16:59:59
281
原创 k8s calico ipip模式详解
Calico 是一种容器之间互通的网络方案。在虚拟化平台中,比如 OpenStack、Docker 等都需要实现 workloads 之间互连,但同时也需要对容器做隔离控制。而在多数的虚拟化平台实现中,通常都使用二层隔离技术来实现容器的网络,这些二层的技术有一些弊端,比如需要依赖 VLAN、bridge 和隧道等技术,其中 bridge 带来了复杂性,vlan 隔离和 tunnel 隧道则消耗更多的资源并对物理环境有要求,随着网络规模的增大,整体会变得越加复杂。
2023-06-28 07:16:47
3231
原创 iptables详解
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。iptables 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。
2023-06-26 15:01:52
7641
原创 k8s configmap 详解
ConfigMap是k8s的一个配置管理组件,可以将配置以key-value的形式传递,通常用来保存不需要加密的配置信息,加密信息则需用到Secret,主要用来应对以下场景:生成为容器内的环境变量;设置容器启动命令的启动参数(需设置为环境变量)以Volume的形式挂载为容器内部的文件或目录。
2023-06-19 17:53:29
5616
原创 openssl证书签发流程详解
openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。构成部分密码算法库密钥和证书封装管理功能SSL通信API接口用途建立 RSA、DH、DSA key 参数建立 X.509 证书、证书签名请求(CSR)和CRLs(证书回收列表)计算消息摘要使用各种 Cipher加密/解密SSL/TLS 客户端以及服务器的测试处理S/MIME 或者加密邮件数字证书标准X.509版本号。
2023-06-13 22:24:52
4551
原创 k8s kube-proxy详解
kube-proxy是kubernetes中网络核心组件,实现了服务暴露和转发等网络功能。kube-proxy支持userspace,ipvs和iptables三种代理模式。userspace性能问题较严重,基本不再使用,应用最多的是iptables和ipvs模式。kube-proxy 以daemonset的方式运行在每个Node计算节点上,负责Pod网络代理, 它会定时通过apiserver从etcd服务获取到service和endpoint资源的变化,维护网络规则和四层负载均衡工作。
2023-06-13 13:46:55
5913
2
原创 k8s CoreDns详解
服务发现是 K8s 的一项很重要的功能。K8s 的服务发现有两种方式,一种是将 svc 的 ClusterIP 以环境变量的方式注入到 pod 中;一种就是 DNS,从 1.13 版本开始,coreDNS 就取代了 kube dns 成为了内置的 DNS 服务器。CoreDNS的kubernetes插件的具体实现遵循k8s官方提供的标准指南,这也是它能够替代kube-dns成为kubebernetes中默认的DNS的重要原因。
2023-06-12 11:05:59
5083
原创 k8s pvc详解
PVC 的全称是:PersistentVolumeClaim(持久化卷声明),PVC 是用户存储的一种声明,PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可以请求特定的存储空间和访问模式。对于真正使用存储的用户不需要关心底层的存储实现细节,只需要直接使用 PVC 即可。PVC作为用户对存储资源的需求申请,主要涉及存储空间请求访问模式PV选择条件和存储类别等信息的设置。
2023-06-05 17:15:43
4785
原创 k8s pv详解
在Kubernetes 中为了让用户更加方便的使用存储,便引入了 PV 和 PVC这两个资源对象来实现对存储的管理。本章节主要介绍PV。PV 的全称是:PersistentVolume(持久化卷),是对底层的共享存储的一种抽象,PV 由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS 等,都是通过插件机制完成与共享存储的对接。PV作为对存储资源的定义,主要涉及存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息的设置。
2023-06-05 16:03:10
1548
原创 storageclass详解
名称后端存储的提供者 (provisioner)后端存储的相关参数配置和回收策略的名称尤为重要,将在创建PVC时引用,管理员应该准确命名具有不同存储特性的StorageClass 一旦被创建,则无法修改,如需更改,则只能删除原 StorageClass资源对象并重新创建。如下为storageclass举例metadata:name: nfsstorageclass.beta.kubernetes.io/is-default-class="true" ###设置为默认的存储类型。
2023-06-02 09:44:22
1295
原创 k8s使用localpath为pod动态提供存储
在k8s环境中,我们经常会使用本机路径作为持久化存储。在k8s官方文档中有两种方式使用本机存储,一种是hostPath,另一种是local volume,这两种都不支持动态扩容,并且程序移植改动比较大,而local-path-provisioner很好的弥补了这一缺陷。
2023-05-24 16:06:28
1408
原创 POD启动时执行多条命令
创建Pod时,可以为其下的容器设置启动时要执行的命令及其参数。如果要设置命令,就填写在配置文件的command字段下,如果要设置命令的参数,就填写在配置文件的args字段下。一旦Pod创建完成,该命令及其参数就无法再进行更改了。如果在配置文件中设置了容器启动时要执行的命令及其参数,那么容器镜像中自带的命令与参数将会被覆盖而不再执行。如果配置文件中只是设置了参数,却没有设置对应的命令,那么容器镜像中自带的命令会使用该新参数作为其执行时的参数。
2023-05-24 16:04:47
1067
原创 hint: running `helm repo update` may help
hint: running `helm repo update` may help
2023-04-12 21:29:42
594
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人