㈠ 了解Kubernetes资源类型
在深入研究Kubernetes资源之前,让我们先澄清一下“资源”一词在这里指的是什么。我们在Kubernetes集群中创建的任何东西都被视为一种资源:部署、pod、服务等。在本文中,我们将重点介绍CPU和内存等主要资源,以及暂态存储和扩展资源等其他资源类型。
集群管理的一个方面是将这些资源自动分配给在pod中运行的容器,这样,理想情况下,每个容器都有它所需的资源(但没有更多)。
在本文中,我们将重点介绍集群上运行的容器的逻辑资源。我们将分析开发人员每天使用的四种常见Kubernetes资源:CPU、内存、暂态存储和扩展资源。对于每种资源,我们将 探索 如何在Kubernetes中衡量它,回顾如何监控每种特定资源,并强调优化资源使用的一些最佳实践。
CPU
Kubernetes集群通常运行在多台机器上,每台机器都有多个CPU核。它们加起来就是可用内核的总数。
我们不需要使用所有的内核。我们可以以1/1000的增量指定CPU核心的任何部分(例如,半个核心或500百万CPU)。
Kubernetes容器在Linux内核上运行,这允许指定cGroup来限制资源。Linux调度器将使用的CPU时间(由内部时间片定义)与定义的限制进行比较,以决定是否在下一个时间片中运行容器。我们可以使用kubectl top命令查询CPU资源,为pod或节点调用它。
我们可以通过改进算法和编码,或者通过编译器优化,使程序在容器中运行更加高效,从而优化处理器时间的使用。集群用户对预编译容器的速度或效率没有太大影响。
内存
Kubernetes集群中的每台机器也都有内存,加起来就是集群的总数。内核级控制主内存,类似于使用cGroup的CPU时间。如果容器中的例程请求的内存分配超出了硬限制,则表示内存不足错误。
优化资源使用在很大程度上取决于应用程序的开发工作。一个步骤是提高垃圾收集频率,以防止基于堆的镜像分配的内存超过硬限制。同样,kubectl top命令可以提供有关内存使用的信息。
探索 CPU和内存
作为我们的第一个深入示例,让我们将流行web服务器NGINX的三个复制容器部署到本地Kubernetes安装中。我们在笔记本电脑上运行一个单节点“集群”,它只有两个内核和2 GiB的内存。
下面的代码定义了这种pod部署,并将十分之一的核心(100 milli-CPU)和100 MiB的主内存授予三个NGINX容器中的每一个。下面的代码还将它们的使用限制为请求值的两倍。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
cpu: "100m"
memory: "100Mi"
limits:
cpu: "200m"
memory: "200Mi"
ports:
- containerPort: 80
我们可以这样部署到默认命名空间:
kubectl apply -f nginx.yaml
本地集群只有一个节点。使用此命令可返回有关它的详细信息:
kubectl describe nodes docker-desktop
在剪切大部分输出后,我们可以检查一些有关资源使用的信息:
[...]
Namespace Name CPU. Requests CPU Limits Memory Requests Memory Limits Age
--------- ---- ------------ ---------- --------------- ------------- ---
default nginx-deployment-585bd9cc5f-djql8 100m (5%) 200m (10%)100Mi (5%) 200Mi (10%) 66s
default nginx-deployment-585bd9cc5f-gz98r 100m (5%) 200m (10%)100Mi (5%) 200Mi (10%) 66s
default nginx-deployment-585bd9cc5f-vmdnc 100m (5%) 200m (10%)100Mi (5%) 200Mi (10%) 66s
[...]
Resource Requests Limits
-------- -------- ------
cpu 1150m (57%) 600m (30%)
memory 540Mi (28%) 940Mi (49%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
[...]
此信息显示CPU和内存使用请求和限制,就像我们的部署对象指定的那样。它还将值显示为最大可能分配的百分比。
接下来是该节点的当前总数,再次以绝对值和百分比列出。这些数字包括在kube系统命名空间中运行的一些其他容器,我们在这里没有显示这些容器,因此上面的输出中没有包含差异。
上面代码段的最后三行表示CPU和内存之外的其他类型的资源,在本例中,这些资源没有设置请求或限制。
暂态存储
另外一种Kubernetes资源类型是暂态存储。这是在pod生命周期内无法存活的挂载式存储。Kubernetes经常使用暂态存储来缓存或日志,但从不将其用于重要数据,如用户记录。我们可以请求或限制暂态存储,比如主内存,但它通常不是一种有限的资源。
那么,在上面的代码片段中,hugepages-1Gi和hugepages-2Mi是什么意思呢?巨页面是Linux内核的一种现代内存功能,用于为进程分配可配置大小的大型主内存页面。为了提高效率,我们可以这样做。
Kubernetes支持将如此大的页面分配给容器。这些构成了我们可以单独请求的每个页面大小的资源类型。
在指定请求或限制时,我们设置的是内存总量,而不是页数。
limits:
hugepages-2Mi: "100Mi"
hugepages-1Gi: "2Gi"Here, we limit the number of 2 MiB pages to 50 and the number of 1 GiB pages to 2.
扩展资源
集群用户还可以使用扩展资源类型定义自己的资源类型(每个集群或节点)。一旦定义了类型并指定了可用单元,我们就可以使用请求和限制,就像我们目前使用的内置资源一样。
例如:
limits:
cpu: "200m"
myproject.com/handles: 100
此设置将容器限制为核心的20%和项目句柄的100%。
资源请求和限制
请注意,资源请求和限制是我们讨论暂态存储和扩展资源的关键。这是因为最终用户可以在应用程序的部署清单中指定资源请求和限制,这对Kubernetes应该如何处理容器或pod施加了一些规则。
请求指示容器应该拥有多少资源。它们帮助调度器根据请求的资源量和节点上的可用资源量将pod分配给节点。
限制用于指示容器可以使用多少资源的硬上限,在操作系统级别强制执行。请求和限制是可选的,但如果我们不指定限制,容器可以使用节点的大部分资源,这可能会带来负面的成本或性能影响。因此,我们必须谨慎行事。
请记住,虽然一个pod可以包含多个容器,但通常每个pod只有一个容器。我们将资源分配给容器,但pod的所有容器都来自节点级别的公共资源池。
考虑服务质量
到目前为止,我们描述的资源系统是管理计算资源的一种相当简单的方法。Kubernetes提供了一个简单的服务质量(QoS)系统。
QoS描述了一个技术系统在硬件有限的情况下,在保持最佳总体质量的同时提供不同服务级别的方法。Kubernetes QoS系统为pod分配三个级别中的一个:Guaranteed、Burstable和BestEffort。
在pod的生命周期内,Guaranteed级别提供了所需且有限的资源,适合在恒定负载下运行的监控系统等应用。
Burstable服务级别适用于具有基本使用模式的pod,由于需求增加,这些pod的使用模式有时会超过基线。这个级别非常适合数据库或web服务器,它们的负载取决于传入请求的数量。
BestEffort不保证资源可用性。因此,它最适合于批处理作业之类的应用程序,它们可以在需要时重复,或者适合于非任务关键型的暂存环境。
结论
Kubernetes集群维护CPU时间、内存、暂态存储和扩展资源等硬件资源,并将它们分配给正在运行的容器。通过一个请求和限制系统,运维人员可以根据单个容器定制资源分配,然后让Kubernetes系统将它们适当地分配给节点。
扩展资源使我们能够定义自己的资源类型,并以类似的方式使用它们。Kubernetes还根据请求和限制将服务质量指定给pod。然后,它使用这些名称来制定计划和终止决策。
Kubernetes资源优化对于平衡成本和最终用户体验至关重要。然而,使用本文的方法手动分配参数可能会非常耗时、昂贵,而且难以扩展。
原文链接:
https://thenewstack.io/understanding-kubernetes-resource-types/
㈡ 如何在LINUX服务器上搭建群集
1.2.并行技术
这是一个非常简单的建造四节点的小集群系统的例子,它是构建在Linux操作系统上,通过MPICH软件包实现的,希望这个小例子能让大家对集群系统的构建有一个最基本的了解。
2.使用MPICH构建一个四节点的集群系统
这是一个非常简单的建造四节点的小集群系统的例子,它是构建在Linux操作系统上,通过MPICH软件包实现的,希望这个小例子能让大家对集群系统的构建有一个最基本的了解。
2.1
所需设备
1).4台采用Pentium
II处理器的PC机,每台配
置64M内存,2GB以上的硬盘,和EIDE接口的光盘驱动器。
2).5块100M快速以太网卡,如SMC
9332
EtherPower
10/100(其中四块卡用于连接集群中的结点,另外一块用于将集群中的其中的一个节点与其它网络连接。)
3).5根足够连接集群系统中每个节点的,使用5类非屏蔽双绞线制作的RJ45缆线
4).1个快速以太网(100BASE-Tx)的集线器或交换机
5).1张Linux安装盘
2.2
构建说明
对计算机硬件不熟的人,实施以下这些构建步骤会感到吃力。如果是这样,请找一些有经验的专业人士寻求帮助。
1.
准备好要使用的采用Pentium
II处理器的PC机。确信所有的PC机都还没有接上电源,打开PC机的机箱,在准备与网络上的其它设备连接的PC机上安装上两块快速以太网卡,在其它的
PC机上安装上一块快速以太网卡。当然别忘了要加上附加的内存。确定完成后盖上机箱,接上电源。
2.
使用4根RJ45线缆将四台PC机连到快速以太网的集线器或交换机上。使用剩下的1根RJ45线将额外的以太网卡(用于与其它网络相连的那块,这样机构就可以用上集群)连接到机构的局域网上(假定你的机构局域网也是快速以太网),然后打开电源。
3.
使用LINUX安装盘在每一台PC机上安装。请确信在LINUX系统中安装了C编译器和C的LIB库。当你配置TCP/IP时,建议你为四台PC分别指定为192.168.1.1、192.168.1.2、192.168.1.3、192.168.1.4。第一台PC为你的服务器节点(拥有两块网卡的那台)。在这个服务器节点上的那块与机构局域网相连的网卡,你应该为其指定一个与机构局域网吻合的IP地址。
4.当所有PC都装好Linux系统后,编辑每台机器的/etc/hosts文件,让其包含以下几行:
192.168.1.1
node1
server
192.168.1.2
node2
192.168.1.3
node3
192.168.1.4
node4
编辑每台机器的/etc/hosts.equiv文件,使其包含以下几行:
node1
node2
node3
node4
$p#
以下的这些配置是为了让其能使用MPICH’s
p4策略去执行分布式的并行处理应用。
1.
在服务器节点
,建一个/mirror目录,并将其配置成为NFS服务器,并在/etc/exports文件中增加一行:
/mirror
node1(rw)
node2(rw)
node3(rw)
node4(rw)
2.
在其他节点上,也建一个/mirror目录,关在/etc/fstab文件中增加一行:
server:/mirror
/mirror
nfs
rw,bg,soft
0
0
3.
/mirror这个目录从服务器上输出,装载在各个客户端,以便在各个节点间进行软件任务的分发。
4.
在服务器节点上,安装MPICH。MPICH的文档可在
5.任何一个集群用户(你必须在每一个节点新建一个相同的用户),必须在/mirror目录下建一个属于它的子目录,如
/mirror/username,用来存放MPI程序和共享数据文件。这种情况,用户仅仅需要在服务器节点上编译MPI程序,然后将编译后的程序拷贝到在/mirror目录下属于它的的子目录中,然后从他在/mirror目录下属于它的的子目录下使用p4
MPI策略运行MPI程序。
㈢ 从0到1教你如何在Linux系统部署VASP,亲测有效
VASP全称为Vienna Ab-initio Simulation Package,是Hafner小组在维也纳大学开发的电子结构计算和量子力学-分子动力学模拟软件包。VASP是当前主流的第一性原理计算软件,以赝势和平面波基函数为基础,适用于计算周期性结构材料的结构参数、力学性质、电子结构、光学磁学性质等,也可进行从头算分子动力学模拟等计算。近年来,引用量高达800+。
多数科研机构与学校通过购买线上超算资源使用VASP进行计算,但对于常使用Windows系统的初学者,部署和使用软件可能不太友好。本指南将详细阐述在Linux系统中部署VASP的基本方法。后续计划持续发布计算软件相关教程以及Linux系统下使用科学计算软件的常见实践,欢迎对此感兴趣的读者关注公众号《集群计算技术》以获取最新内容。
首先,安装编译环境Intel oneAPI。访问intel.cn官网,下载安装包含Base Toolkit和HPC Toolkit的工具包。选择对应系统版本后,执行安装脚本。推荐先安装Base Toolkit,再安装HPC Toolkit,如无需自定义配置,则遵循默认选项。安装后,路径默认在/opt/intel/oneapi/xxx。
接着,检查必要的编译环境。
安装部署VASP。加载编译依赖环境,解压VASP源码包,进入主目录。准备makefile.include文件(根据系统和编译需求调整对应的编译配置文件),并修改编译选项。使用intel-oneAPI编译器+MKL数学库+intelmpi实现MPI+openmp支持多线程,特别注意注释部分的内容。并行编译gam、std、ncl三个版本。对于非Intel平台,可优化和注意以下事项。完成编译后,生成的可执行文件位于特定目录。
参考以下资源:
1. vasp.at/wiki/index.php/...
2. intel.cn/content/www/cn...