当前位置: 首页 > news >正文

Kubernetes YAML配置入门

Kubernetes YAML配置入门指南:从基础语法到实战技巧

  • 前言
  • 操作
      • 1. 如何查看版本
      • 2. YAML格式语法
      • 3. 案例中如何认识资源清单编写
      • 4. Kubernetes中的端口配置详解
      • 5. 如何快速编写YAML文件
        • 使用 `--dry-run` 生成YAML
        • 导出现有资源的YAML
        • 使用 `kubectl explain` 查看字段帮助信息
      • 快速编写YAML的小贴士
  • 结语

前言

  在当今云原生技术迅速发展的时代,Kubernetes(简称K8s)作为容器编排领域的佼佼者,已经成为企业级应用部署和管理的标准平台。无论是初创公司还是大型企业,Kubernetes都以其强大的扩展性、灵活性和自动化能力,成为实现微服务架构和DevOps实践的重要工具。
  然而,对于初学者而言,Kubernetes的学习曲线可能较为陡峭。尤其是其配置文件——YAML格式的编写,往往让人感到困惑。YAML(YAML Ain’t Markup Language)是一种简洁的非标记性语言,虽然内容格式人性化且较易读,但其语法要求严格,稍有不慎便可能导致配置错误,影响应用的正常运行。
  本文旨在帮助读者系统地了解Kubernetes中YAML格式的基础知识,掌握资源清单的编写方法,并通过实际案例展示如何快速、准确地编写和部署YAML文件。我们将深入探讨Kubernetes中常见的端口配置(如portnodePorttargetPortcontainerPort),并通过详细的步骤和示例,帮助读者在实际操作中得心应手。无论你是刚刚接触Kubernetes的新手,还是希望进一步提升配置管理能力的开发者。让我们一起踏上这段探索Kubernetes YAML配置的旅程,掌握这一强大工具的核心技能。

操作

1. 如何查看版本

  在Kubernetes中,了解当前集群支持的API版本是非常重要的,这有助于我们在编写YAML文件时选择合适的API版本标签。通过以下命令,可以查看集群中所有可用的API版本:

kubectl api-versions

在这里插入图片描述

输出示例:

admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1                                # 如果是业务场景一般首选使用 apps/v1
apps/v1beta1                           # 带有beta字样的代表的是测试版本,不用在生产环境中
apps/v1beta2
...
v1

  注意:在生产环境中,建议优先使用稳定版本(如apps/v1),避免使用带有beta字样的测试版本。

2. YAML格式语法

  Kubernetes支持YAML和JSON两种格式来管理资源对象。其中,YAML因其简洁和易读性,成为配置和管理的首选格式。以下是YAML的一些基本语法规则:

  • 大小写敏感:YAML对大小写敏感,Namename被视为不同的字段。
  • 缩进表示层级关系:使用空格缩进来表示层级关系,不支持Tab键制表符缩进。
  • 缩进空格数目不重要:只要相同层级的元素左侧对齐即可,通常建议开头缩进两个空格。
  • 符号字符后缩进一个空格:如冒号(:)、逗号(,)、短横杆(-)等符号后需缩进一个空格。
  • ---表示YAML格式的开始:用于分隔不同的YAML文件或文档。
  • #表示注释:以#开头的行被视为注释,不会被解析。

3. 案例中如何认识资源清单编写

  资源清单是Kubernetes中用于定义和配置资源对象的YAML文件。通过编写资源清单,我们可以声明式地管理集群中的各种资源,如Deployment、Service、Pod等。
以下是一个简单的Nginx Deployment的YAML示例:

apiVersion: apps/v1        # 指定API版本标签,推荐使用 apps/v1
kind: Deployment           # 定义资源类型,此处为Deployment
metadata:                  # 定义资源的元数据信息name: nginx-deployment   # 资源名称,在同一命名空间中必须唯一labels:                  # 定义资源标签app: nginx
spec:                      # 定义Deployment的参数属性replicas: 3              # 定义副本数量为3selector:                # 定义标签选择器matchLabels:           # 定义匹配标签app: nginx           # 需与 .spec.template.metadata.labels 定义的标签保持一致template:                # 定义Pod模板metadata:labels:              # 定义Pod的标签,需与 .spec.selector.matchLabels 保持一致app: nginxspec:containers:          # 定义容器属性- name: nginx        # 容器名称image: nginx:1.15.4 # 容器使用的镜像及版本ports:- containerPort: 80 # 定义容器的对外端口

创建资源对象

kubectl create -f nginx-deployment.yaml

查看创建的Pod资源

kubectl get pods -o wide

在这里插入图片描述

4. Kubernetes中的端口配置详解

  在Kubernetes中,理解不同类型的端口配置对于服务的正确暴露和访问至关重要。以下是常见的几种端口及其作用:

  • port:Kubernetes集群内部访问Service的端口。通过ClusterIP:port可以从Pod所在的Node上访问到Service。
  • nodePort:外部访问Kubernetes集群中Service的端口。通过NodeIP:nodePort可以从外部访问到某个Service。NodePort通常在30000-32767范围内。
  • targetPort:Pod的端口,从portnodePort来的流量经过kube-proxy反向代理负载均衡转发到后端Pod的targetPort上,最后进入容器。
  • containerPort:Pod内部容器的端口,targetPort映射到containerPort

示例:创建一个NodePort类型的Service

apiVersion: v1  
kind: Service  
metadata:name: nginx-servicelabels:app: nginx  
spec:type: NodePort  ports:- port: 80targetPort: 80  selector:app: nginx

创建Service

kubectl create -f nginx-service.yaml 

查看创建的Service

kubectl get svc

在这里插入图片描述
访问服务:在浏览器中输入NodeIP:nodePort,例如http://192.168.10.13:32690http://192.168.10.12:32690
在这里插入图片描述
在这里插入图片描述

5. 如何快速编写YAML文件

  编写YAML文件不必从零开始,Kubernetes提供了多种方法来快速生成和修改YAML模板。

使用 --dry-run 生成YAML

 通过kubectl runkubectl create deployment命令,结合--dry-run=client选项,可以生成相应的API对象YAML,而不实际创建资源。
示例:生成一个Nginx Pod的YAML

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml

在这里插入图片描述
示例:生成一个Nginx Deployment的YAML

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml > nginx-deploy.yaml

在这里插入图片描述
编辑生成的YAML文件
  使用文本编辑器(如vim)打开生成的YAML文件,根据需要进行修改和优化。

vim nginx-test.yaml

  删除不必要的字段:例如creationTimestampresourcesstatus等,这些字段通常可以省略。

导出现有资源的YAML

  通过kubectl get命令,可以将现有的资源导出为YAML文件,便于查看和备份。

示例:导出Service的YAML

kubectl get svc nginx-service -o yaml > my-svc.yaml

在这里插入图片描述
编辑和使用导出的YAML:可以基于导出的YAML文件进行修改,创建新的资源或更新现有资源。

使用 kubectl explain 查看字段帮助信息

  当对某些字段或资源对象的结构不熟悉时,可以使用kubectl explain命令查看详细的帮助信息,帮助理解各字段的含义和用法。
示例:查看Deployment中容器的帮助信息

kubectl explain deployments.spec.template.spec.containers

在这里插入图片描述
在这里插入图片描述

或查看Pod中容器的帮助信息

kubectl explain pods.spec.containers

快速编写YAML的小贴士

  1. 多看别人(官方)写的YAML:通过阅读官方文档或社区提供的YAML示例,能够快速理解常见的配置结构和最佳实践。

  2. 照着现场文件改着用:基于现有的YAML文件进行修改,可以节省大量时间,避免从零开始编写。

  3. 善用 kubectl explain 命令:遇到不懂的字段或配置,及时使用kubectl explain命令查找相关帮助信息,提升配置的准确性和效率。

  4. 使用 --dry-runget 命令生成模板:通过命令行工具快速生成YAML模板,再进行定制化修改,能够显著提高部署效率。

示例:
nginx

vim nginx-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: nginx-deployname: nginx-deploy
spec:replicas: 3selector:matchLabels:app: nginx-deploystrategy: {}template:metadata:creationTimestamp: nulllabels:app: nginx-deployspec:containers:- image: nginxname: nginxports:- containerPort: 80resources: {}
status: {}
vim nginx-service.yaml 
apiVersion: v1
kind: Service
metadata:name: nginx-servicelabels:app: nginx
spec:type: NodePortports:- port: 80targetPort: 80selector:app: nginx

在这里插入图片描述
tomcat

tomcat.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: tomcat-deploymentlabels:app: tomcat
spec:replicas: 1selector:matchLabels:app: tomcattemplate:metadata:labels:app: tomcatspec:initContainers:- name: copy-ky370-indeximage: busybox:1.36command: [ 'sh','-c','mkdir -p /tmp/webapps/ky37 && echo "$INDEX_JSP" > /tmp/webapps/ky37/index.jsp' ]env:- name: INDEX_JSPvalueFrom:configMapKeyRef:name: tomcat-ky37key: index.jspvolumeMounts:- name: webapps-volumemountPath: /tmp/webappscontainers:- name: tomcatimage: tomcat:latestports:- containerPort: 8080volumeMounts:- name: webapps-volumemountPath: /usr/local/tomcat/webappsvolumes:- name: webapps-volumeemptyDir: {}
---
apiVersion: v1
kind: ConfigMap
metadata:name: tomcat-ky37
data:index.jsp: |<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html><head><title>KY37 Page</title></head><body><h1>Hello from KY37 (via Init Container + ConfigMap)</h1><p>Current server time: <%= new java.util.Date() %></p></body></html>
---
apiVersion: v1
kind: Service
metadata:name: tomcat-servicelabels:app: tomcat
spec:selector:app: tomcattype: NodePortports:- protocol: TCPport: 8080targetPort: 8080nodePort: 30001

在这里插入图片描述

结语

  通过本文的详细介绍,我们从Kubernetes的YAML格式基础出发,逐步深入到资源清单的编写、端口配置的详解以及快速编写YAML文件的方法。YAML作为Kubernetes配置的核心语言,其简洁性和可读性为资源管理提供了极大的便利,但同时也要求我们在编写时保持严谨和细致。
  掌握YAML的编写技巧,不仅能够提高Kubernetes资源管理的效率,还能帮助我们更好地理解和应用Kubernetes的强大功能。在实际操作中,结合kubectl命令行工具,我们可以快速生成、修改和部署YAML文件,实现应用的快速迭代和高效管理。
  无论你是Kubernetes的初学者,还是有经验的开发者,持续学习和实践都是提升技能的关键。希望本文能够为你在Kubernetes的学习和实践中提供有价值的参考和指导。未来,随着Kubernetes生态的不断发展和完善,掌握YAML配置将为你打开更多可能性,助力你在云原生领域取得更大的成就。
  让我们继续探索Kubernetes的更多功能,掌握更多实用技巧,共同推动云原生技术的发展与应用!

http://www.dtcms.com/a/474620.html

相关文章:

  • 淘宝网站官网东莞微网站建设多少钱
  • leetcode 118. 杨辉三角 python
  • 中级软件设计师考试选择题——计算机网络典型真题
  • 互联网个人用户网站WordPress移动站
  • ArrayList和LinkedList的区别是什么?(高频)
  • 建设网站的费用属于资产吗广州百度快速排名优化
  • 将 GPU 级性能带到企业级 Java:CUDA 集成实用指南
  • 模型训练中GRPO概念理解
  • <收假风波>
  • 关于做ppt的网站wordpress删除评论框
  • 网站如何设计方案重庆推广一个网站
  • Leetcode 24
  • 后缀学习笔记 | -ability -ibility 系列
  • 若依使用基本步骤
  • win7winlogon完整调试流程
  • SSM高校图书馆网站m7o77(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 网站建设 技术团队建设工程施工合同最新版本
  • AX520CE-- 音视频mdk的初识
  • 状态设计_多重集排列数_剪枝
  • adt-bundle-windows
  • Bootstrap 5入门指南
  • 奥林巴斯读片软件OlyVIA 2.9 下载安装教程怎样下载安装图文教程
  • 18006.STM32通过SPI读取LAN9253数据
  • 无锡网站建设维护梅州建站教程
  • SQLSugar和EF都是数据优先吗?
  • 企业网站功能是什么百度怎么发布网站
  • 八股-2025.10.12
  • Eigen 曲线拟合之四阶多项式(有界约束,投影法)
  • 深度剖析 C++ 之 vector(下)篇
  • Vue计算属性与监视