首页 > 其他分享 >2024 年你应该知道的 13 个 Kubernetes 配置

2024 年你应该知道的 13 个 Kubernetes 配置

时间:2024-10-28 09:48:25浏览次数:5  
标签:13 name Kubernetes 应用程序 2024 apiVersion io pod

随着 Kubernetes 继续成为容器编排的基石,掌握其配置和功能对于 DevOps 专业人员来说至关重要。2024 年,某些 Kubernetes 配置因其在云原生环境中增强自动化、安全性和性能的能力而脱颖而出。这篇博文深入探讨了 13 种基本的 Kubernetes 配置,对每种配置进行了深入探讨,并提供了用例、优势和代码示例。

图片

1. 资源请求和限制

理解并正确设置资源请求和限制是 Kubernetes 的基础。它可以确保您的应用程序拥有以最佳方式运行所需的资源,同时防止任何单个应用程序独占集群资源。

 

apiVersion: v1kind: Podmetadata:  name: sample-appspec:  containers:  - name: app-container    image: nginx    resources:      requests:        memory: "64Mi"        cpu: "250m"      limits:        memory: "128Mi"        cpu: "500m"
  • 原因:此配置对于维护单个应用程序和整个集群的稳定性和性能至关重要。它可以防止资源争用,并确保应用程序不会因资源短缺而意外终止。

  • 对象:对于旨在优化应用程序性能和集群资源利用率的 Kubernetes 管理员和开发人员来说必不可少。

  • 何时使用:对每个工作负载应用此配置,以确保可预测的应用程序性能,并防止任何单个应用程序消耗可能影响集群稳定性的不成比例的资源。

  • 链接:https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

2. 存活和就绪探测

活跃度和就绪度探测对于管理 Kubernetes 中应用程序的生命周期至关重要。它们可帮助 Kubernetes 做出明智的决策,确定何时重启容器(活跃度)以及容器何时准备好开始接受流量(就绪度)

 

livenessProbe:  httpGet:    path: /healthz    port: 8080  initialDelaySeconds: 3  periodSeconds: 3readinessProbe:  httpGet:    path: /ready    port: 8080  initialDelaySeconds: 5  periodSeconds: 5
  • 原因:通过确保 Kubernetes 可以根据实际应用程序运行状况而不是仅仅容器运行时状态自动管理容器的状态,它们增强了应用程序的弹性和可用性。

  • 对象:部署需要高可用性和自我修复的关键服务的开发人员和运营商。

  • 何时使用:对正常运行时间至关重要的应用程序实施活跃度探测,对仅在完全初始化并准备好处理请求时才应接收流量的应用程序实施就绪度探测。

  • 链接:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

3. ConfigMaps 和 Secrets

ConfigMaps 和 Secrets 对于从应用程序代码中外部化配置和敏感数据是必不可少的。ConfigMaps 允许您将非机密数据存储在键值对中,而 Secrets 则用于敏感信息。

 

apiVersion: v1kind: ConfigMapmetadata:  name: app-configdata:  config.json: |    {        "database": "sql",        "timeout": "30s",        "featureFlag": "true"    }---apiVersion: v1kind: Secretmetadata:  name: app-secrettype: Opaquedata:  password: cGFzc3dvcmQ=
  • 原因:这些配置将配置和机密与应用程序逻辑分离,简化了跨不同环境的应用程序部署和管理,同时增强了安全性。

  • 谁:对于管理需要配置数据或需要安全处理凭据和其他敏感信息的应用程序的任何 Kubernetes 用户来说都至关重要。

  • 何时使用:使用 ConfigMaps 来配置在环境(开发、准备、生产)之间发生变化的应用程序配置,并使用 Secrets 来配置任何凭证、令牌或敏感信息。

  • 链接:https://kubernetes.io/docs/concepts/configuration/secret/

4. 水平 Pod 自动扩缩器(HPA)

水平 Pod 自动缩放器根据观察到的 CPU 利用率或自定义指标自动调整 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 副本数量。

 

apiVersion: autoscaling/v1kind: HorizontalPodAutoscalermetadata:  name: sample-app-hpaspec:  scaleTargetRef:    apiVersion: apps/v1    kind: Deployment    name: sample-app  minReplicas: 1  maxReplicas: 10  targetCPUUtilizationPercentage: 80
  • 原因:HPA 可确保您的应用程序可以扩展以满足需求,并在需求减少时缩减,从而优化资源使用并保持性能。

  • 对象:希望根据实时需求自动扩展应用程序的管理员和 DevOps 专业人员。

  • 何时使用:非常适合流量可变的应用程序,确保动态分配资源以满足需求,无需人工干预。

  • 链接:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

5. 网络政策

网络策略是 Kubernetes 资源,用于控制 Pod 和网络端点之间的流量,允许您实现微分段并增强 Kubernetes 应用程序的安全性。

 

apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: default-deny-allspec:  podSelector: {}  policyTypes:  - Ingress  - Egress
  • 原因:它们对于保护 Kubernetes 集群内的 Pod 通信至关重要,可确保只有授权的流量才能在 Pod 之间或流向外部服务。

  • 对象:Kubernetes 管理员和需要在其集群内实施严格的网络安全策略的注重安全的工程师。

  • 何时使用:在多租户环境或具有高安全性要求的应用程序中特别有用,以防止未经授权的访问并限制潜在的攻击媒介。

  • 链接:https://kubernetes.io/docs/concepts/services-networking/network-policies/

6. 服务帐户

Kubernetes 中的服务账户用于为 Pod 提供身份,以便其与 Kubernetes API 和集群内的其他服务进行交互。它们对于管理访问控制和确保服务之间的安全通信至关重要。

 

apiVersion: v1kind: ServiceAccountmetadata:  name: my-service-account  namespace: default
  • 在 Pod 中使用服务账户:

     

apiVersion: v1kind: Podmetadata:  name: my-podspec:  containers:  - name: my-container    image: my-image  serviceAccountName: my-service-account
  • 原因:服务帐户对于将 Pod 内部发出的 API 请求归因于特定身份至关重要,从而实现细粒度的访问控制和审计。对于需要访问 Kubernetes API 或其他集群服务的 Pod 来说,它们也是必需的。

  • 对象:需要从 pod 内部安全地管理对 Kubernetes API 和资源的访问的 Kubernetes 集群管理员和开发人员。

  • 何时使用:在部署与 Kubernetes API 交互或需要向集群内的其他服务进行身份验证的应用程序时使用服务账户,尤其是对于需要特定权限的自动化任务或微服务。

  • 链接:https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/

7. Ingress 控制器和 Ingress 资源

入口控制器和资源管理对集群中服务的外部访问(通常是 HTTP),允许您定义将流量路由到不同服务的规则。

 

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: example-ingressspec:  rules:  - host: www.example.com    http:      paths:      - path: /        pathType: Prefix        backend:          service:            name: example-service            port:              number: 80
  • 原因:它们提供一种集中的、可扩展的、安全的方法来管理从互联网对 Kubernetes 服务的访问。

  • 对象:管理面向公众的应用程序的 DevOps 专业人员和 Kubernetes 管理员。

  • 何时使用:对于需要从 Kubernetes 集群外部进行受控访问的任何应用程序都至关重要,尤其是在管理多个服务或执行基于 URL 的路由时。

  • 链接:https://kubernetes.io/docs/concepts/services-networking/ingress/

8. 持久卷 (PV) 和持久卷声明 (PVC)

持久卷 (PV) 和持久卷声明 (PVC) 提供了一种在 Kubernetes 中管理存储的方法,抽象了如何提供存储以及如何使用存储的细节。

 

apiVersion: v1kind: PersistentVolumemetadata:  name: example-pvspec:  capacity:    storage: 10Gi  accessModes:    - ReadWriteOnce  nfs:    path: /path/to/data    server: nfs-server.example.com---apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: example-pvcspec:  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 10Gi
  • 原因:它们对于需要在 Pod 生命周期之外持久存储数据的有状态应用程序至关重要。

  • 人员:从事 Kubernetes 中数据库、文件存储和其他有状态应用程序工作的工程师。

  • 何时使用:每当您的应用程序需要独立于 pod 生命周期的持久数据存储时,确保数据的持久性和可用性。

  • 链接:https: //kubernetes.io/docs/concepts/storage/persistent-volumes/

9.基于角色的访问控制(RBAC)

RBAC 对 Kubernetes 资源实施细粒度的访问控制策略,使用角色和角色绑定来限制集群内的权限。

 

apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata:  namespace: default  name: pod-readerrules:- apiGroups: [""]  resources: ["pods"]  verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata:  name: read-pods  namespace: defaultsubjects:- kind: User  name: "jane"  apiGroup: rbac.authorization.k8s.ioroleRef:  kind: Role  name: pod-reader  apiGroup: rbac.authorization.k8s.io
  • 原因:维护 Kubernetes 集群中的最小权限原则至关重要,确保用户和应用程序只拥有他们需要的权限。

  • 谁:实施安全访问策略的集群管理员和安全意识强的工程师。

  • 何时使用:当您需要保护对 Kubernetes 资源的访问时,尤其是在具有多个用户或团队的环境中,请实施 RBAC。

  • 链接:https://kubernetes.io/docs/reference/access-authn-authz/rbac/

10. 自定义资源定义(CRD)

CRD 允许您通过定义自定义资源来扩展 Kubernetes API,从而引入根据您的需求定制的新功能。

 

apiVersion: apiextensions.k8s.io/v1kind: CustomResourceDefinitionmetadata:  name: crontabs.stable.example.comspec:  group: stable.example.com  names:    kind: CronTab    listKind: CronTabList    plural: crontabs    singular: crontab  scope: Namespaced  versions:  - name: v1    served: true    storage: true    schema:      openAPIV3Schema:        type: object        properties:          spec:            type: object            properties:              cronSpec:                type: string              image:                type: string
  • 原因:CRD 使您能够创建和管理自定义对象,并与 Kubernetes API 和 kubectl 工具无缝集成。

  • 对象:希望将自定义操作或资源引入 Kubernetes 环境的开发人员和运营商。

  • 何时使用:当现有资源不能满足应用程序的特定要求时,非常适合扩展 Kubernetes。

  • 链接:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/

11.污点和容忍度

污点和容忍度共同作用,确保 pod 不会被调度到不适当的节点上。

 

apiVersion: v1kind: Nodemetadata:  name: node1spec:  taints:  - key: "key1"    value: "value1"    effect: NoSchedule
  • 原因:它们提供了一种强大的机制,可以根据硬件、软件和其他自定义要求等因素来控制节点上 pod 的放置。

  • 谁:寻求优化工作负载放置并在多租户环境中实施分离问题的集群管理员。

  • 何时使用:当您需要防止某些 pod 被放置在特定节点上时使用,例如为特定工作负载专用节点。

  • 链接:https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/

12. 亲和性和反亲和性

亲和性和反亲和性设置允许您影响 pod 相对于其他 pod 应该(或不应该)放置的位置。

 

apiVersion: apps/v1kind: Deploymentmetadata:  name: with-pod-affinityspec:  selector:    matchLabels:      app: with-pod-affinity  template:    metadata:      labels:        app: with-pod-affinity    spec:      affinity:        podAffinity:          requiredDuringSchedulingIgnoredDuringExecution:          - labelSelector:              matchExpressions:              - key: security                operator: In                values:                - S1            topologyKey: "kubernetes.io/hostname"        podAntiAffinity:          preferredDuringSchedulingIgnoredDuringExecution:          - weight: 100            podAffinityTerm:              labelSelector:                matchExpressions:                - key: security                  operator: In                  values:                  - S2              topologyKey: "kubernetes.io/hostname"
  • 原因:对于管理整个集群中的 pod 分布以增强容错能力、可用性或满足其他操作要求至关重要。

  • 对象:希望微调 pod 位置以实现性能优化或法规遵从性的管理员和开发人员。

  • 何时使用:在高可用性设置中特别有用,或者由于安全性或合规性原因需要分离工作负载时。

  • 链接:https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/

13. Kubernetes 作业和 CronJobs

Jobs 和 CronJobs 分别管理需要按照指定时间间隔运行一次或重复运行的任务。

 

apiVersion: batch/v1kind: Jobmetadata:  name: example-jobspec:  template:    spec:      containers:      - name: hello        image: busybox        command: ["sh", "-c", "echo Hello Kubernetes! && sleep 30"]      restartPolicy: Never---apiVersion: batch/v1beta1kind: CronJobmetadata:  name: example-cronjobspec:  schedule: "*/5 * * * *"  jobTemplate:    spec:      template:        spec:          containers:          - name: hello            image: busybox            command: ["sh", "-c", "echo Hello Kubernetes! && sleep 30"]          restartPolicy: OnFailure
  • 原因:Jobs 和 CronJobs 对于自动执行 Kubernetes 中的任务(例如备份、维护操作或批处理)至关重要。

  • 谁:在 Kubernetes 环境中自动执行日常任务或运行批处理作业的工程师。

  • 何时使用:为一次性任务实现Jobs或为需要按计划运行的任务设置CronJobs。

  • 链接:https: //kubernetes.io/docs/concepts/workloads/controllers/job/

概括

这些高级 Kubernetes 配置为创建强大、高效且安全的云原生应用程序奠定了基础。了解并利用这些设置可让工程师充分利用 Kubernetes 的强大功能,根据特定需求定制部署,并保持最佳运营标准。

 

图片

    不看的原因 写留言     继续滑动看下一个     运维笑谈     向上滑动看下一个         运维笑谈    

标签:13,name,Kubernetes,应用程序,2024,apiVersion,io,pod
From: https://www.cnblogs.com/cheyunhua/p/18509741

相关文章

  • CSP2024游记
    老年退役菜鸡再回来打一年CSP。初赛考前给学弟出/搬了一堆初赛,自己初赛一点没碰!本来可能要爆金币了,但是初赛实在有点简单了!40min写完也查不出什么错,在睡觉和发呆中度过了剩下的时间。本来以为可能会像去年一样爆一些shaber错误,但是真的AK了。复赛省流:爆金币了。Day-......
  • 20222304 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    实验内容1.1实践内容正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧使用msfvenom生成jar、apk等其他文件使用veil加壳工具使用C+shellcode进行编程通过组合应用各种技术实现恶意代码免杀用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电......
  • CSP-S 2024 游寄
    Day-1最后一场模拟赛了,但是谁家模拟赛不用freopen啊。喜提保龄,我吃柠檬。Day0赶火车。Day1上午出门时被门划伤了。早餐很烂,吃完后到同学房间开摆,包括并不限于打gen,看别人玩原神,看别人当兵王,打牌。中餐还是很烂,看了下Tarjan和exgcd的代码。1:00从酒店出发,到达......
  • CSP2024 游记
    只参加了提高组。初赛赛前复习了一下哈夫曼编码然后打摆。赛时前面的题会的都会了,不会的也带逻辑去蒙了,可能会错一两道吧。后面貌似都比较简单,但是第一个阅读程序我一开始看那个式子首先就把按位或排除了。。。后来手玩了一下发现既不是异或又不是且。。于是我就选了啥也不是,然......
  • 【办公类-53-14】2024年9月周计划系列优化(5天、6天、7天模版)
    11月为了迎接普及普惠督导抽查,所有班级资料都要做到第11周。我拿出去年的周计划代码,重新批量一下。这学期做代码有一个难点——并非全部5天,“国庆节”的4-5周是7天教案放在一个WORD模版上5天模版(一横三竖=4页)节日写法7天模版(一横四竖=5页)而原版的周计划里面也有6天7......
  • YOLOv8改进 | Conv篇 | 2024最新Kolmogorov-Arnold网络架构下的KANConv(包含九种不同类
    一、本文介绍本文给大家带来的改进机制是2024最新的,Kolmogorov-Arnold网络(ConvolutionalKANs),这种架构旨在将Kolmogorov-Arnold网络(KANs)的非线性激活函数整合到卷积层中,从而替代传统卷积神经网络(CNNs)的线性变换。与标准的卷积神经网络(CNN)相比,KANConv层引入了更多的参数,因......
  • 2024-2025-1 20241325王向龙《计算机程序与设计》第五周学习总结
    这个作业属于哪个课程2024-2025-1-计算机基础与程序设计)这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05这个作业的目标①Pep/9虚拟机②机器语言与汇编语言③算法与伪代码④测试:黑盒,白盒作业正文本博客链接https://www.cnblogs.com/wangxiang......
  • 2024HIT哈工大计算机网络实验(详细注释、Java代码实现)
    点此去往代码仓库,持续更新实验内容HIT计算机网络实验大部分好像都是用的C/C++代码,网上找很少看到Java的代码,或者不是很详细,所以我自己总结了一下发在了Github上,有详细注释和内容解释,还有一些写代码时的错误以及找错误的心路历程。如果能够对你有所帮助,麻烦点一点star谢谢啦......
  • 2024-2025-1 20241416《计算机基础与程序设计》第五周学习总结
    这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第五周作业这个作业的目标 Pep/9虚拟机、机器语言与汇编语言、算法与伪代码、测试:黑盒,白盒作业正文 https://www.cnblogs.com/rockytyh/p/18509171教材学习内容总结......
  • 如何设置Kubernetes的资源限制和请求
    开头段落:在Kubernetes中设置资源限制和请求对于确保集群内应用可靠运行以及合理分配资源至关重要。资源请求用于告知Kubernetes调度器该为Pod预留多少资源,资源限制则指定Pod可以使用的最大资源量,确保单个应用不会消耗过多资源而影响集群稳定性。理解并正确设置资源请求和限制可以......