Linux快速编写yaml文件,linuxea:kubernetes v1.11.2编写一个资源清单yaml文件(3)

本文介绍如何使用 YAML 文件定义 Kubernetes Pod 资源,并通过 kubectl 命令创建、查看及删除 Pod。包括 YAML 文件的结构解析、多容器 Pod 的配置实例、Pod 的状态查询与日志获取方法。

创建资源中,apiserver只接受JSON格式的资源定义,此前使用的run命令,只不过是自动转换成JSON格式而已。但是JSON太过于重量,使用YAML格式来提供配置清单,apiserver会自动将yaml无损转换为JSON模式,并且不需要多余的信息,而后在提交执行

而后会通过资源配置清单,创建一个Yaml的文件来管理自主式的POD资源。其中需要遵循几个字段:apiversion,kind,metadata,spec,status

[root@linuxea ~]# kubectl get pod

NAME READY STATUS RESTARTS AGE

client-linuxea 1/1 Running 0 21h

nginx-linuxea-5786698598-8qt5n 1/1 Running 0 21h

nginx-linuxea-5786698598-9w5z7 1/1 Running 0 21h

nginx-linuxea-5786698598-xl9xp 1/1 Running 0 21h

I. yaml文件

查看输出yaml

[root@linuxea ~]# kubectl get pod nginx-linuxea-5786698598-8qt5n -o yaml

属性名 属性值

apiVersion: v1 ===>> k8s名称和版本 ,group/name version

kind: Pod ===>> 类别

metadata: ===>> 原数据

creationTimestamp: 2018-08-23T15:22:34Z

generateName: nginx-linuxea-5786698598-

labels:

pod-template-hash: "1342254154"

run: nginx-linuxea

name: nginx-linuxea-5786698598-8qt5n

namespace: default

ownerReferences:

- apiVersion: apps/v1

blockOwnerDeletion: true

controller: true

kind: ReplicaSet

name: nginx-linuxea-5786698598

uid: 993df65c-a6de-11e8-9c95-88882fbd1028

resourceVersion: "122893"

selfLink: /api/v1/namespaces/default/pods/nginx-linuxea-5786698598-8qt5n

uid: 5c6294c1-a6e8-11e8-9c95-88882fbd1028

spec: ===>> 规格字段,期望的目标的状态,用户定义的

containers:

- image: marksugar/nginx:1.14.a

imagePullPolicy: IfNotPresent

name: nginx-linuxea

ports:

- containerPort: 8787

protocol: TCP

resources: {}

terminationMessagePath: /dev/termination-log

terminationMessagePolicy: File

volumeMounts:

- mountPath: /var/run/secrets/kubernetes.io/serviceaccount

name: default-token-l2x78

readOnly: true

dnsPolicy: ClusterFirst

nodeName: linuxea.node-1.com

priority: 0

restartPolicy: Always

schedulerName: default-scheduler

securityContext: {}

serviceAccount: default

serviceAccountName: default

terminationGracePeriodSeconds: 30

tolerations:

- effect: NoExecute

key: node.kubernetes.io/not-ready

operator: Exists

tolerationSeconds: 300

- effect: NoExecute

key: node.kubernetes.io/unreachable

operator: Exists

tolerationSeconds: 300

volumes:

- name: default-token-l2x78

secret:

defaultMode: 420

secretName: default-token-l2x78

status: ===>> 显示当前资源的当前状态,只读

conditions:

- lastProbeTime: null

lastTransitionTime: 2018-08-23T15:22:34Z

status: "True"

type: Initialized

- lastProbeTime: null

lastTransitionTime: 2018-08-23T15:22:35Z

status: "True"

type: Ready

- lastProbeTime: null

lastTransitionTime: null

status: "True"

type: ContainersReady

- lastProbeTime: null

lastTransitionTime: 2018-08-23T15:22:34Z

status: "True"

type: PodScheduled

containerStatuses:

- containerID: docker://8e340023d553c2de65a043eb9d643c42b9961a75440eda8a0334494e51da0f89

image: marksugar/nginx:1.14.a

imageID: docker-pullable://marksugar/nginx@sha256:103dd97b01c3283b56a587e7d95135f8fc410be1df36477d2d477a41f00daa59

lastState: {}

name: nginx-linuxea

ready: true

restartCount: 0

state:

running:

startedAt: 2018-08-23T15:22:35Z

hostIP: 10.10.240.202

phase: Running

podIP: 172.16.1.14

qosClass: BestEffort

startTime: 2018-08-23T15:22:34Z

大部分的资源配置清单中,都由五个字段组成

apiversion

apiversion: 组名/版本,可参考$kubectl api-versions。其中可以进行多次分组,测试,bete等多版本兼容同时存在

[root@linuxea ~]# kubectl api-versions

admissionregistration.k8s.io/v1beta1

apiextensions.k8s.io/v1beta1

apiregistration.k8s.io/v1

apiregistration.k8s.io/v1beta1

apps/v1

apps/v1beta1

apps/v1beta2

authentication.k8s.io/v1

authentication.k8s.io/v1beta1

authorization.k8s.io/v1

authorization.k8s.io/v1beta1

autoscaling/v1

autoscaling/v2beta1

batch/v1

batch/v1beta1

certificates.k8s.io/v1beta1

events.k8s.io/v1beta1

extensions/v1beta1

networking.k8s.io/v1

policy/v1beta1

rbac.authorization.k8s.io/v1

rbac.authorization.k8s.io/v1beta1

scheduling.k8s.io/v1beta1

storage.k8s.io/v1

storage.k8s.io/v1beta1

v1

kind

kind资源类别。如:Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Service等

metadata

metadata元数据:

​ name: 同一资源下,name是唯一的,受限于namespace

​ labels:标签

annotations:资源注解

​ selfLink

​ 资源引用的PATH注解:/api/群组/版本/namespaces/NAMESPACE(名称空间)/TYPE(资源类别)/NAME

spec:期望状态

spec可能会嵌套很多二级三级字段,不同的资源类型,其spec需要嵌套的字段各不相同。其中标记为resources的是必选字段,其他的均为可选字段。这些用来定义用户的期望状态

status:当前状态

本字段是kubernetes集群维护,用户是不能定义的

假如需要定义一个pod,可使用kubectl explain pod来查看需要的字段说明,此刻若是想知道metadata字段,则可在后面加上.matadate,如: kubectl explain pod.metadata。当然,他可以多层嵌套

[root@linuxea ~]# kubectl explain pod

[root@linuxea ~]# kubectl explain pod.metadata

[root@linuxea ~]# kubectl explain pods.spec

[root@linuxea ~]# kubectl explain pods.spec.containers

[root@linuxea ~]# kubectl explain pods.spec.containers.tty

II. 定义资源

为了测试,定义三个容器在一个pod中,三个容器都不同

[root@linuxea linuxea]# cat pod-demo.yaml

apiVersion: v1

kind: Pod

metadata:

name: pod-demo-linuxea

namespace: default

labels:

www: linuxea-com

tier: backend

spec:

containers:

- name: linuxea-pod1-com

image: "marksugar/nginx:1.14.a"

ports:

- containerPort: 88

- name: linuxea-pod2-com

image: "marksugar/nginx:1.14.b"

ports:

- containerPort: 88

- name: alpine

image: "alpine:3.8"

command:

- "/bin/sh"

- "-c"

- "tail -f /etc/passwd"

使用yaml文件的方式就不在是run,而是create

[root@linuxea linuxea]# kubectl create -f pod-demo.yaml

pod/pod-demo-linuxea created

这里有一个ContainerCreating的过程,而后就running起来

[root@linuxea linuxea]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE

client-linuxea 1/1 Running 0 23h 172.16.2.252 linuxea.node-2.com

pod-demo-linuxea 1/3 ContainerCreating 0 3s 172.16.3.23 linuxea.node-3.com

[root@linuxea linuxea]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE

client-linuxea 1/1 Running 0 23h 172.16.2.252 linuxea.node-2.com

pod-demo-linuxea 3/3 Running 0 3s 172.16.3.23 linuxea.node-3.com

使用kubectl describe pods pod-demo-linuxea查看定义的pod信息

[root@linuxea linuxea]# kubectl describe pods pod-demo-linuxea

Name: pod-demo-linuxea

Namespace: default

Priority: 0

PriorityClassName:

Node: linuxea.node-3.com/10.10.240.146

Start Time: Fri, 24 Aug 2018 15:25:26 +0100

Labels: tier=backend

www=linuxea-com

Annotations:

Status: Running

IP: 172.16.3.23

Containers:

linuxea-pod1-com:

Container ID: docker://7c845c4640e74d6d542a3a18c5b2de69719dc74649207431a62f4f525843f15f

Image: marksugar/nginx:1.14.a

Image ID: docker-pullable://marksugar/nginx@sha256:103dd97b01c3283b56a587e7d95135f8fc410be1df36477d2d477a41f00daa59

Port: 88/TCP

Host Port: 0/TCP

State: Running

Started: Fri, 24 Aug 2018 15:25:26 +0100

Ready: True

Restart Count: 0

Environment:

Mounts:

/var/run/secrets/kubernetes.io/serviceaccount from default-token-l2x78 (ro)

linuxea-pod2-com:

Container ID: docker://0c75ff2650b0b26b7b909858fb9f7d6259b1b17da1b161073757334237711846

Image: marksugar/nginx:1.14.b

Image ID: docker-pullable://marksugar/nginx@sha256:f6998c772d71c6fd0398963b575833bfddac1c996095a3c9a4ba59953d2a05ec

Port: 88/TCP

Host Port: 0/TCP

State: Running

Started: Fri, 24 Aug 2018 15:25:26 +0100

Ready: True

Restart Count: 0

Environment:

Mounts:

/var/run/secrets/kubernetes.io/serviceaccount from default-token-l2x78 (ro)

alpine:

Container ID: docker://df9e005ff05e4e40f3603f7b8704c47424c3c1427a2648514f5778c7fe5ad306

Image: alpine:3.8

Image ID: docker-pullable://alpine@sha256:7043076348bf5040220df6ad703798fd8593a0918d06d3ce30c6c93be117e430

Port:

Host Port:

Command:

/bin/sh

-c

tail -f /etc/passwd

State: Running

Started: Fri, 24 Aug 2018 15:25:27 +0100

Ready: True

Restart Count: 0

Environment:

Mounts:

/var/run/secrets/kubernetes.io/serviceaccount from default-token-l2x78 (ro)

Conditions:

Type Status

Initialized True

Ready True

ContainersReady True

PodScheduled True

Volumes:

default-token-l2x78:

Type: Secret (a volume populated by a Secret)

SecretName: default-token-l2x78

Optional: false

QoS Class: BestEffort

Node-Selectors:

Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s

node.kubernetes.io/unreachable:NoExecute for 300s

Events:

Type Reason Age From Message

---- ------ ---- ---- -------

Normal Scheduled 3m default-scheduler Successfully assigned default/pod-demo-linuxea to linuxea.node-3.com

Normal Pulled 3m kubelet, linuxea.node-3.com Container image "marksugar/nginx:1.14.a" already present on machine

Normal Created 3m kubelet, linuxea.node-3.com Created container

Normal Started 3m kubelet, linuxea.node-3.com Started container

Normal Pulled 3m kubelet, linuxea.node-3.com Container image "marksugar/nginx:1.14.b" already present on machine

Normal Created 3m kubelet, linuxea.node-3.com Created container

Normal Started 3m kubelet, linuxea.node-3.com Started container

Normal Pulled 3m kubelet, linuxea.node-3.com Container image "alpine:3.8" already present on machine

Normal Created 3m kubelet, linuxea.node-3.com Created container

Normal Started 3m kubelet, linuxea.node-3.com Started container

可以使用kubectl logs pod-demo-linuxea查看

[root@linuxea linuxea]# kubectl logs pod-demo-linuxea

Error from server (BadRequest): a container name must be specified for pod pod-demo-linuxea, choose one of: [linuxea-pod1-com linuxea-pod2-com alpine]

或者这样

[root@linuxea linuxea]# kubectl logs linuxea-pod1-com

[root@linuxea linuxea]# kubectl logs linuxea-pod2-com

[root@linuxea linuxea]# kubectl logs linuxea-pod2-com alpine

III. 删除资源

kubectl delete -f pod-demo.yaml即可删除yaml中包含的资源,若是要回复create即可

[root@linuxea linuxea]# kubectl delete -f pod-demo.yaml

pod "pod-demo-linuxea" deleted

除非另有说明,否则本站上的内容根据以下许可进行许可: CC署名-非商业性使用-相同方式共享4.0国际许可协议4.0进行许可

本文作者:www.linuxea.com for Mark

文章链接:http://www.linuxea.com/1937.html (转载请注明本文出处和本章链接)

内容概要:本文系统梳理了计算机组成原理的完整知识体系,重点围绕冯·诺依曼体系结构、五大核心硬件(运算器、控制器、存储器、输入/输出设备)、数据表示与运算、存储层级、CPU架构、总线系统及I/O控制机制展开,深入剖析了硬件底层如何支撑Java程序的运行,特别是与JVM内存模型、多线程并发、IO操作、性能调优等关键技术的紧密关联。文章强调通过理解二进制编码、补码运算、缓存机制、指令流水线、乱序执行、中断与DMA等底层原理,帮助Java开发者从根本上解释浮点精度丢失、数值溢出、线程安全、伪共享、IO阻塞等常见问题,并提供性能优化的硬件级视角。; 适合人群:具备一定Java开发基础,工作1-3年,希望深入理解JVM、并发编程、IO模型底层原理的后端研发人员。; 使用场景及目标:① 理解Java代码从编译到执行的完整软硬件链路;② 掌握JVM内存布局、GC机制、线程上下文切换、volatile与synchronized的硬件实现原理;③ 分析并解决高并发、高性能场景下的性能瓶颈,如缓存命中率低、伪共享、总线争用、IO阻塞等问题;④ 在面试中清晰阐述Java底层与计算机硬件的关联,展现扎实的系统功底。; 阅读建议:建议按照文档提供的“八、学习顺序”分阶段学习,每学完一个硬件模块,立即结合对应的Java技术点(如学到Cache时思考伪共享和@Contended)进行复盘,将抽象硬件原理具象化到日常开发场景中,以达到学以致用的目的。
源码链接: https://pan.quark.cn/s/044c82337b8e Teamcenter 12的中文版帮助文档中,1-1基础模块入门部分,详细介绍了产品设计、产品文档、产品结构、业务流程、客户端与集成接口、AWC、Rich client以及TC的安装与配置等内容,非常适合初学者或者希望了解Teamcenter 12的读者。Teamcenter 12是由Siemens开发的一款功能强大的产品生命周期管理(PLM)软件,它包含了产品设计、产品文档、产品结构、业务流程等多个领域,旨在帮助企业高效地管理产品开发的全过程。以下是对这些核心知识点的具体阐述: 1-1 Teamcenter简介: Teamcenter作为一个综合性的PLM解决方案,提供了一个集中化的平台来存储、管理和协同所有的产品相关信息。它支持跨部门、跨地域的合作,通过集成CAD系统、业务流程管理工具和数据管理功能,确保了数据的一致性和准确性。 1-1 产品设计: Teamcenter能够管理各种工程设计数据,包括3D模型、图纸、参数化数据等。用户可以方便地查找和组织产品设计数据,进行签出和签入操作以保证版本控制,确保在团队协作中避免数据冲突。 1-2 查找和组织产品设计: 在Teamcenter中,用户可以通过高级搜索功能迅速定位所需的设计文件,同时,系统支持自定义视图和分类,使设计数据的组织更加系统化。 1-3 签出和签入产品设计: 签出和签入机制是Teamcenter中防止数据冲突的重要功能。签出允许用户独占性地编辑某个设计文件,而签入则将更新后的文件版本提交回系统,供其他团队成员查看或编辑。 1-4 产品文档: Teamcenter不仅管理设计数据,还涵盖了产品相关的文档,如规格...
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 在电磁模拟技术中,CST(Computer Simulation Technology)是一种被广泛采纳的软件工具,它主要用于电磁场、微波、天线以及射频系统的设计工作。本资料将详细分析CST软件中离散端口的具体配置方法,这些方法对于提升仿真结果的精确度和专业水准具有决定性作用。离散端口在CST软件中扮演着模拟信号输入或输出的重要角色,它们构成了仿真模型不可或缺的部分。在配置离散端口时,一个核心的原则是保证端口的方向与网格线保持一致,这是因为这样做能够有效降低计算过程中产生的误差,并确保仿真数据的有效性。如果未能遵循这一指导原则,可能会引发未知的计算问题,进而导致仿真结果失去可靠性。 在CST软件中配置离散端口,通常需要借助“Pick Points”这一功能。通过选择“Pick Edge Center”选项,端口将被设定在模型边缘的中心位置上。然而,这种做法并不总是能够确保端口与网格线保持平行。在某些特定情形下,模型的几何构造可能不允许直接选取一个与网格线平行的边作为端口的安装位置。 为了克服这一挑战,可以采用多种不同的策略。如果模型本身已经包含一条与馈电口平行的边,那么可以直接利用这条边来建立端口,此时CST软件会自动调整端口使其与网格线对齐。另一种可选的方法是,当模型不具备现成的平行边时,用户可以手动构建一个几何结构,比如一个立方体,并使其边缘与馈电口平行。通过这种方式,新建立的几何结构的边缘就可以作为端口的位置,从而确保端口与网格线的平行关系。 在实施上述操作时,必须关注端口尺寸的合理性和物理意义的一致性。端口的尺寸应当依据实际天线馈电部分的尺寸进行适当调整,过大的端口或...
内容概要:本文围绕基于共识的捆绑算法(Consensus-Based Bundle Algorithm, CBBA)在多智能体系统中的多任务分配问题展开研究,重点应用于远程太空船交会与在轨维修的相对运动规划(RPO)任务。通过构建去中心化的多智能体协作框架,利用CBBA实现任务的有效分配与协调,解决了通信延迟、动态任务插入及多航天器协同作业等复杂约束下的任务规划难题。研究详细阐述了CBBA的算法流程,包括任务打包、竞标机制、共识达成与冲突消解等核心环节,并提供了完整的Matlab代码实现,验证了算法在空间多航天器任务中的收敛性、鲁棒性与可扩展性。; 适合人群:具备控制理论、多智能体系统、航天器动力学或自动化等相关背景,熟悉Matlab编程,从事航天任务规划、集群智能或分布式决策系统研究的科研人员、工程师及研究生。; 使用场景及目标:①应用于空间在轨服务、多航天器集群飞行、空间站维护等复杂协同任务的任务分配场景;②为多智能体协同决策算法的理论研究与工程仿真提供高保真案例支持;③帮助深入理解CBBA算法的分布式优化机制及其在实际动态环境中的实现路径。; 阅读建议:建议结合提供的Matlab代码逐模块分析算法实现,重点关注任务分配过程中的竞标权重设计、共识迭代逻辑与通信拓扑影响,可通过调整任务规模、智能体数量或通信延迟参数进行仿真实验,以全面掌握算法性能边界与优化潜力。
已经博主授权,源码转载自 https://pan.quark.cn/s/d41a32022a78 在Delphi的编程场景中,字符串处理是一项频繁执行的操作,而在这些操作中,对字符串内特定片段的替换是一项核心功能。尽管Delphi自带的`StringReplace`函数能够提供基础的替换功能,但在面对海量数据或超长字符串时,其运行效能可能无法令人满意。为此,程序员们常常探索更为高效的替代方法,例如本例中引用的“Q_Replace.pas”文件所封装的快速字符串替换实现。 `StringReplace`函数的使用规范如下: ```delphi function StringReplace(const S, Find, Replace: string; Flags: TReplaceFlags): string; ``` 该函数需要四个输入参数:源字符串`S`、待查找的片段`Find`、替换后的片段`Replace`以及一个控制替换行为的参数`Flags`。然而,由于`StringReplace`在内部实现上的限制,当涉及到大量的替换操作或处理极长的字符串时,其运行速度会明显降低,这是因为它采用了线性化的搜索与替换机制。 为了提升处理速度,开发者常常会设计个性化的字符串替换程序,例如`Q_Replace`函数。这类程序可能会运用到字符串处理的先进技术,比如采用KMP(Knuth-Morris-Pratt)算法或Boyer-Moore算法,这些算法在处理大量文本信息时展现出优越的搜索性能。这些算法通过事先对搜索模板进行加工,能够避开非必要的字符对比,因此大幅度加快了搜索的节奏。 KMP算法是一种在主字符串中搜寻子字符串的优化搜索方法,它能够越过部分确认不匹配的字符,从而减少了无...
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 Blob类型数据,其完整表述为Binary Large Object,属于数据库系统中的一种字段类型,专门用于存储大规模二进制数据。在SQL Server数据库系统中,此类数据类型通常涵盖了image、varbinary(max)以及binary(max)等具体形式。这些字段类型的主要设计意图在于处理图像、音频、视频以及其他非文本性质的数据格式。在SQL Server环境中,`image`字段类型虽然已经被标记为过时,但为了深入理解blob类型数据的功能机制,我们仍然可以将其作为学习起点。`image`类型能够容纳最高达2^31-1(等同于2GB)的二进制数据量。然而,由于它不支持可变长度特性,即便存储小尺寸文件也会造成空间浪费,因此在新版本的SQL Server系统中,更倾向于推荐采用`varbinary(max)`或`binary(max)`类型。 1. **功能机制**: - 存储方式:Blob数据在数据库中的保存方式并非以字符序列呈现,而是以二进制格式存储,从而规避了字符编码转换可能引发的问题。 - 引用机制:Blob数据并不直接在数据表中展示,而是保存在数据库的特定存储区域,并通过一个指向该数据的指针(也可称为“游标”)在表中记录位置。这种方式能够有效节省存储空间,并且支持对大文件进行迅速访问。 - 数据访问:在需要获取blob数据时,数据库会依据存储的指针定位到实际数据的存放位置,随后将其传输回应用程序。 2. **使用流程**: - 数据插入:当向blob字段中插入数据时,必须先将二进制数据转换为适合数据库存储的格式,例如通过C#的`File.ReadAllBy...
内容概要:本文围绕“可再生能源发电与电动汽车的协同调度策略”开展硕士论文复现研究,基于Matlab代码实现,旨在构建融合风电、光伏等波动性可再生能源与大规模电动汽车接入的电力系统协同优化模型。研究重点在于通过智能优化算法(如遗传算法、粒子群算法等)对电动汽车的充电行为进行时空维度上的有序引导,在满足用户出行需求的前提下,有效平抑可再生能源出力的不确定性,提升电网运行的稳定性、经济性与低碳水平。文中可能涵盖多时间尺度调度、双层优化架构、需求响应机制、鲁棒优化或分布鲁棒优化等先进方法,深入探讨电-车-网协同互动机制,实现系统级资源的高效整合与优化配置。; 适合人群:具备电力系统、能源经济、智能交通或自动化等相关专业背景,熟悉Matlab编程及基本优化理论,正在从事新能源、电动汽车、智能电网等领域科研工作的研究生及科研人员。; 使用场景及目标:①学习并掌握含高比例可再生能源与电动汽车的复杂电力系统优化建模方法;②深入理解并应用智能优化算法(如GA、PSO)解决能源-交通耦合系统协同调度问题;③复现、验证并拓展高水平学术论文(硕士论文、EI期刊等)中的核心模型与仿真结果,为自身科研工作提供技术参考与代码基础。; 阅读建议:此资源以Matlab代码为核心载体,建议读者结合详细的代码注释与算法原理,深入剖析数学模型的构建逻辑、约束条件设定及求解流程,务必动手运行、调试代码,通过调整参数、对比不同算法性能等方式,深刻理解协同调度策略的作用机理与优化效果,从而真正掌握其设计精髓。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值