最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【环球热闻】云原生学习作业8

来源:博客园

一.Kubernetes Container、Pod、Namespace内存及CPU限制

1,对pod内单个容器资源限制实例yaml文件


【资料图】

apiVersion: v1kind: Podmetadata:  name: nginx-podspec:  containers:  - name: nginx    image: nginx    resources:      requests:          cpu: "250m"        memory: "64Mi"      limits:         memory: "128Mi"        cpu: "500m"

2,对单个pod进行资源限制

apiVersion: v1kind: LimitRangemetadata:  name: limitrange  namespace: myserverspec:  limits:  - type: Container       #限制的资源类型    max:      cpu: "2"            #限制单个容器的最大可以用的CPU      memory: "2Gi"       #限制单个容器的最大可以用的内存    min:      cpu: "500m"         #限制单个容器的最小需要使用CPU      memory: "512Mi"     #限制单个容器的最小需要使用的内存    default:      cpu: "500m"         #默认单个容器的CPU限制      memory: "512Mi"     #默认单个容器的内存限制    defaultRequest:      cpu: "500m"         #默认单个容器的CPU创建请求      memory: "512Mi"     #默认单个容器的内存创建请求    maxLimitRequestRatio:      cpu: 2              #限制CPU limit/request比值最大为2,限制的CPU数除请求的CPU不能大于2      memory: 2           #限制内存limit/request比值最大为2,限制的内存数除请求的内存数不能大于2  - type: Pod    max:      cpu: "4"            #限制单个Pod的最大CPU,所有容器CPU数加起来最大不能超过4      memory: "4Gi"       #限制单个Pod最大内存,所有容器内存加起来最大不能超过4  - type: PersistentVolumeClaim    max:      storage: 50Gi        #限制PVC最大的requests.storage    min:      storage: 30Gi        #限制PVC最小的requests.storage

3,对某个namespace进行资源限制

apiVersion: v1kind: ResourceQuotametadata:  name: quota  namespace: myserverspec:  hard:    requests.cpu: "8"    limits.cpu: "8"    requests.memory: 8Gi    limits.memory: 8Gi    pods: "6"    services: "6"

二 .nodeSelector、nodeName、node亲和与反亲和

1,nodeSelector

nodeSelector是节点选择约束的最简单推荐形式。你可以将nodeSelector字段添加到 Pod 的规约中设置你希望目标节点所具有的节点标签。 Kubernetes 只会将 Pod 调度到拥有你所指定的每个标签的节点上。

示例:

apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: tomcat-deployspec:  replicas: 1  template:    metadata:      labels:        app: tomcat-app    spec:      nodeSelector:        role: backend      containers:      - name: tomcat        image: tomcat        ports:        - containerPort: 8080

2,nodeName

用于强制约束将Pod调度到指定的Node节点上,这里说是“调度”,但其实指定了nodeName的Pod会直接跳过Scheduler的调度逻辑,直接写入PodList列表,该匹配规则是强制匹配。

示例:

apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: tomcat-deployspec:  replicas: 1  template:    metadata:      labels:        app: tomcat-app    spec:      nodeName: k8s.node1       containers:      - name: tomcat        image: tomcat        ports:        - containerPort: 8080

3,node亲和与反亲和

节点亲和性概念上类似于nodeSelector, 它使你可以根据节点上的标签来约束 Pod 可以调度到哪些节点上。 节点亲和性有两种:

  • requiredDuringSchedulingIgnoredDuringExecution: 调度器只有在规则被满足的时候才能执行调度。此功能类似于nodeSelector, 但其语法表达能力更强。
  • preferredDuringSchedulingIgnoredDuringExecution: 调度器会尝试寻找满足对应规则的节点。如果找不到匹配的节点,调度器仍然会调度该 Pod。

示例:

apiVersion: v1kind: Podmetadata:  name: with-node-affinityspec:  affinity:    nodeAffinity:      requiredDuringSchedulingIgnoredDuringExecution:        nodeSelectorTerms:        - matchExpressions:          - key: topology.kubernetes.io/zone            operator: In            values:            - antarctica-east1            - antarctica-west1      preferredDuringSchedulingIgnoredDuringExecution:      - weight: 1        preference:          matchExpressions:          - key: another-node-label-key            operator: In            values:            - another-node-label-value  containers:  - name: with-node-affinity    image: registry.k8s.io/pause:2.0

三.pod亲和与反亲和、污点与容忍、驱逐

1,pod亲和与反亲和

pod 间亲和性与反亲和性可以基于已经在节点上运行的Pod的标签来约束 Pod 可以调度到的节点,而不是基于节点上的标签。

示例:

apiVersion: v1kind: Podmetadata:  name: with-pod-affinityspec:  affinity:    podAffinity:      requiredDuringSchedulingIgnoredDuringExecution:      - labelSelector:          matchExpressions:          - key: security            operator: In            values:            - S1        topologyKey: topology.kubernetes.io/zone    podAntiAffinity:      preferredDuringSchedulingIgnoredDuringExecution:      - weight: 100        podAffinityTerm:          labelSelector:            matchExpressions:            - key: security              operator: In              values:              - S2          topologyKey: topology.kubernetes.io/zone  containers:  - name: with-pod-affinity    image: registry.k8s.io/pause:2.0

2,污点与容忍、驱逐

2.1,节点亲和性是 Pod的一种属性,它使 Pod 被吸引到一类特定的节点。污点(Taint)则相反——它使节点能够排斥一类特定的 Pod。

容忍度(Toleration)是应用于 Pod 上的。容忍度允许调度器调度带有对应污点的 Pod。

污点和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod, 是不会被该节点接受的。

使用命令给节点增加一个污点。比如,

kubectl taint nodes node1 key1=value1:NoSchedule

给节点node1增加一个污点,它的键名是key1,键值是value1,效果是NoSchedule。 这表示只有拥有和这个污点相匹配的容忍度的 Pod 才能够被分配到node1这个节点。

在Pod规约中为Pod设置容忍度,使Pod能调度到设置了污点的node1节点上:

apiVersion: v1kind: Podmetadata:  name: nginx  labels:    env: testspec:  containers:  - name: nginx    image: nginx    imagePullPolicy: IfNotPresent  tolerations:  - key: "example-key"    operator: "Exists"    effect: "NoSchedule"

2.2,驱逐

目前k8s有4个主要的驱逐场景, 分别是手工驱逐,节点的压力驱逐,污点导致驱逐,pod抢占导致驱逐. 一般而言主要关注的是节点压力导致的驱逐.

2.2.1 手工驱逐

可以使用drain手工排空当前的计算节点. 不过在一般实践中都是先禁止调度,而后才是排空当前节点的 pod.

2.2.2节点压力驱逐

节点压力驱逐是 kubelet主动终止 Pod 以回收节点上资源的过程。

kubelet 监控集群节点的内存、磁盘空间和文件系统的 inode 等资源。 当这些资源中的一个或者多个达到特定的消耗水平, kubelet 可以主动地使节点上一个或者多个 Pod 失效,以回收资源防止饥饿。

2.2.3污点驱逐

node在运行过程中,被设置了NoExecute的污点,会影响已经在节点上运行的 Pod,如下

  • 如果 Pod 不能忍受这类污点,Pod 会马上被驱逐。
  • 如果 Pod 能够忍受这类污点,但是在容忍度定义中没有指定tolerationSeconds, 则 Pod 还会一直在这个节点上运行。
  • 如果 Pod 能够忍受这类污点,而且指定了tolerationSeconds, 则 Pod 还能在这个节点上继续运行这个指定的时间长度。

2.2.4pod抢占驱逐

Pod可以有优先级。 优先级表示一个 Pod 相对于其他 Pod 的重要性。 如果一个 Pod 无法被调度,调度程序会尝试抢占(驱逐)较低优先级的 Pod, 以使悬决 Pod 可以被调度。

四.搭建ELK及kafka日志收集环境

1,kafka

2, es

3, kibana

五.实现daemonset和

1,daemonset日志收集

2,sidcar日志收集

关键词: 增加一个