精通Kubernetes:利用YAML轻松管理资源

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 精通Kubernetes:利用YAML轻松管理资源

YAML(另一种标记语言)是一种人类可读的数据序列化格式,通常用于不同系统之间的配置文件和数据交换。与 XML 或 JSON 等其他格式相比,它因其简单性和易用性而广受欢迎


Kubernetes[1] 是流行的开源容器编排系统,它使用 YAML 定义其配置文件(称为清单)。这些清单用于定义和Deployment Pod、服务和Deployment配置等资源。


为什么 YAML 如此受欢迎?


YAML 的简单性和易用性使其成为 Kubernetes 配置的流行选择,因为它允许开发人员快速轻松地定义和Deployment他们的应用程序。此外,YAML 的层次结构使阅读和理解复杂的配置变得容易。


YAML 对于 Kubernetes 很重要,因为它提供了一种简单的、人类可读的格式来定义和Deployment复杂的配置,使开发人员更容易使用系统。


以下是 10 个最重要的 Kubernetes YAML 技巧和示例:


1.使用命名空间来隔离资源


命名空间允许你对资源进行逻辑分组并管理应用程序不同部分的访问控制。例如,你可以为开发、测试和生产环境创建命名空间:


apiVersion: v1
kind: Namespace
metadata:
  name: development


2.使用标签和选择器进行资源管理:


标签和选择器使你可以根据特定条件轻松组织和选择资源。例如,你可以使用应用程序名称标记Deployment,并使用选择器查找属于该Deployment的所有 Pod:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx


3.使用ConfigMaps和Secrets进行配置管理


ConfigMaps 和 Secrets 允许你独立于容器和 Pod 管理配置数据。例如,你可以将环境变量存储在 ConfigMap 中:

apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
data:
  ENV_VAR_1: "value1"
  ENV_VAR_2: "value2"


4. 使用资源限制和请求进行 Pod 和容器资源管理


资源限制和请求允许你指定 Pod 和容器所需的资源量。例如,你可以指定容器的 CPU 和内存限制:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: myimage
    resources:
      limits:
        memory: "64Mi"
        cpu: "500m"
      requests:
        memory: "32Mi"
        cpu: "250m"


5. 使用 InitContainers 进行预配置任务


InitContainers 允许你在主容器启动之前运行任务。例如,你可以在主容器启动之前使用 InitContainer 安装软件包:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  initContainers:
  - name: init-container
    image: busybox
    command: ["/bin/sh", "-c", "apt-get update && apt-get install -y mypackage"]
  containers:
  - name: mycontainer
    image: myimage


6. 使用 Readiness 和 Liveness 探针进行容器健康检查


就绪性和存活性探针允许你检查容器的运行状况并确保它们已准备好为流量提供服务。例如,你可以使用存活性探针来确保容器正确运行:


apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: myimage
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 5


7. 使用Deployment滚动更新部署


RollingUpdate允许你管理Deployment的更改并确保使用滚动更新来逐步Deployment更改:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: example-app
  template:


8. 使用 YAML 注释使你的文件更具可读性:


# This is a comment in a YAML file
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  labels:
    app: example-app


9.使用锚点和锚点别名以避免重复代码


# Anchor definition
anchors:
  pod_template: &pod_template
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        app: example-app
# Aliased resource definition
apiVersion: v1
kind: Pod
metadata:
  name: example-pod1
  <<: *pod_template
apiVersion: v1
kind: Pod
metadata:
  name: example-pod2
  <<: *pod_template


10.在YAML文件中使用环境变量而不是硬编码值


apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: example-image
    env:
    - name: EXAMPLE_VAR
      value: example-value


11.使用ConfigMaps和Secrets来存储敏感信息:


apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap
data:
  key: value
apiVersion: v1
kind: Secret
metadata:
  name: example-secret
stringData:
  username: user
  password: pass

总结


本文介绍了 YAML(Yet Another Markup Language)在 DevOps 和容器编排社区中的流行程度,特别是在使用 Kubernetes、Ansible 和 Docker 等工具的开发人员和组织中。它是一种人类可读的数据序列化格式,常用于配置文件和不同系统之间的数据交换。


在 Kubernetes 中,YAML 用于定义配置文件,包括命名空间跟李、标签和选择器资源管理、ConfigMaps 和 Secrets 配置管理、资源限制和请求、InitContainers 预配置任务、以及容器健康检查等方面。 这种简单易用的格式使得开发人员能够快速定义和部署他们的应用程序,为复杂配置提供了清晰易懂的表示方式,对于 Kubernetes 的重要性也得到了强调。


引用链接


[1] Kubernetes: https://kubetools.collabnix.com/

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
29天前
|
Kubernetes 监控 Cloud Native
"解锁K8s新姿势!Cobra+Client-go强强联手,打造你的专属K8s监控神器,让资源优化与性能监控尽在掌握!"
【8月更文挑战第14天】在云原生领域,Kubernetes以出色的扩展性和定制化能力引领潮流。面对独特需求,自定义插件成为必要。本文通过Cobra与Client-go两大利器,打造一款监测特定标签Pods资源使用的K8s插件。Cobra简化CLI开发,Client-go则负责与K8s API交互。从初始化项目到实现查询逻辑,一步步引导你构建个性化工具,开启K8s集群智能化管理之旅。
33 2
|
24天前
|
Kubernetes 监控 调度
在K8S中,DaemonSet类型资源特性?
在K8S中,DaemonSet类型资源特性?
|
19天前
|
存储 Kubernetes 数据中心
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
|
21天前
|
边缘计算 人工智能 Kubernetes
边缘计算问题之理解 Kubernetes 节点资源的四层分配结构如何解决
边缘计算问题之理解 Kubernetes 节点资源的四层分配结构如何解决
12 1
|
22天前
|
存储 Kubernetes API
|
24天前
|
Kubernetes Linux 调度
在k8S中,Pod如何实现对节点的资源控制?
在k8S中,Pod如何实现对节点的资源控制?
|
24天前
|
Kubernetes 监控 API
在K8S中,RS资源如何实现升级和回滚?
在K8S中,RS资源如何实现升级和回滚?
|
24天前
|
Kubernetes 网络协议 应用服务中间件
在K8S中,SVC资源是否支持在K8S集群外部访问?
在K8S中,SVC资源是否支持在K8S集群外部访问?
|
29天前
|
运维 Kubernetes 大数据
Kubernetes 的架构问题之在Serverless Container场景下尚不支持资源超售如何解决
Kubernetes 的架构问题之在Serverless Container场景下尚不支持资源超售如何解决
52 0
|
14天前
|
Kubernetes Cloud Native 应用服务中间件
Kubernetes 自动伸缩策略:优化资源利用率
【8月更文第29天】在现代云原生环境中,应用的流量往往具有不可预测性。为了应对这种变化,Kubernetes 提供了多种自动伸缩机制来动态调整应用实例的数量和每个实例分配的资源。本文将深入探讨两种主要的自动伸缩工具:水平 Pod 自动伸缩器 (HPA) 和垂直 Pod 伸缩器 (VPA),并提供实际的应用示例。
34 0