欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 【k8s集群应用】kubenetes-YAML

【k8s集群应用】kubenetes-YAML

2025/6/20 19:38:04 来源:https://blog.csdn.net/Karoku/article/details/145511619  浏览:    关键词:【k8s集群应用】kubenetes-YAML

文章目录

  • Kubernetes 资源管理:YAML 与 JSON 格式
    • YAML 语法格式
      • YAML 文件示例
        • 1. Deployment 示例
        • 2. Service 示例
    • **常用操作**
      • 创建资源
      • 查看资源
      • 访问测试
      • 打印 API 对象
        • 示例
      • 查看生成的 YAML 格式
        • 示例
      • 查看生成的 JSON 格式
        • 示例
      • 使用 YAML 格式导出并修改配置
        • 导出配置
        • 修改配置(以 nginx-test.yaml 为例)
      • 查看字段帮助信息
    • **Kubernetes 中的端口说明**

Kubernetes 资源管理:YAML 与 JSON 格式

Kubernetes 支持使用 YAMLJSON 格式管理资源对象:

  • JSON:主要用于 API 接口之间的消息传递。
  • YAML:用于配置和管理,具有简洁、易读的特性,适合人类编写和阅读。

YAML 语法格式

  • 大小写敏感
  • 使用缩进表示层级关系
    • 不支持 Tab 键,只使用空格缩进。
    • 缩进的空格数目不重要,但相同层级的元素必须左侧对齐。
  • 符号字符后缩进一个空格
    • 如冒号(:)、逗号(,)、短横杆(-)等。
  • ---:表示 YAML 文件的开始,用于分隔多个文件。
  • #:表示注释。

YAML 文件示例

1. Deployment 示例
apiVersion: apps/v1          # API 版本,如果是业务场景一般首选使用 apps/v1。带有beta字样的代表的是测试版本,不用在生产环境中
kind: Deployment             # 定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:                    # 定义资源的元数据信息,比如资源的名称、namespace、标签等信息name: nginx-deployment     # 资源名称,在同一个namespace空间中必须是唯一的labels:                    # 标签app: nginx
spec:                        # 定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性replicas: 3                # 副本数量selector:                  # 标签选择器matchLabels:             # 定义匹配标签app: nginx             # 需与 .spec.template.metadata.labels 定义的标签保持一致template:                  # Pod 模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配metadata:labels:                # 定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致app: nginxspec:containers:            # 容器定义- name: nginx          # 容器名称,一个 - name: 定义一个容器image: nginx:1.15.4  # 镜像以及版本ports:- containerPort: 80  # 容器端口
  • API 资源版本标签
    • 通过以下命令查看支持的 API 版本:
kubectl api-versions

常用版本:

  • apps/v1:业务场景首选。
  • v1:核心资源(如 Pod、Service)的稳定版本。
  • beta:测试版本,不建议用于生产环境。
2. Service 示例
apiVersion: v1
kind: Service
metadata:name: nginx-service        # 服务名称labels:app: nginx
spec:type: NodePort             # 服务类型ports:- port: 8080               # 服务端口targetPort: 80           # 容器端口nodePort: 30007          # 节点端口selector:app: nginx               # 选择器,匹配 Pod 标签

常用操作

创建资源

kubectl create -f nginx-deployment.yaml
kubectl create -f nginx-service.yaml

查看资源

kubectl get pods -o wide
kubectl get svc

访问测试

在浏览器输入 nodeIP:nodePort 即可访问

http://192.168.80.11:35680
http://192.168.80.12:35680

详解k8s中的port:

  • port
    port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service
  • nodePort
    nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。(默认:30000-32767)
  • targetPort
    targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。
  • containerPort
    containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

打印 API 对象

  • 命令--dry-run=client
示例
# 打印 Pod 配置
kubectl run nginx-test --image=nginx --port=80 --dry-run=client# 打印 Deployment 配置
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client

查看生成的 YAML 格式

示例
# 查看 Pod 的 YAML 配置
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml# 查看 Deployment 的 YAML 配置
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

查看生成的 JSON 格式

示例
# 查看 Pod 的 JSON 配置
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json# 查看 Deployment 的 JSON 配置
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json

使用 YAML 格式导出并修改配置

导出配置
# 导出 Pod 配置到 nginx-test.yaml
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml# 导出 Deployment 配置到 nginx-deploy.yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml > nginx-deploy.yaml
修改配置(以 nginx-test.yaml 为例)
apiVersion: v1
kind: Pod
metadata:labels:run: nginx-testname: nginx-test
spec:containers:- image: nginxname: nginx-testports:- containerPort: 80dnsPolicy: ClusterFirstrestartPolicy: Always

注意

  • creationTimestampresourcesstatus 字段通常被省略,因为 Kubernetes 系统在对象创建时自动填充。

查看字段帮助信息

kubectl explain deployments.spec.template.spec.containers
#或
kubectl explain pods.spec.containers

Kubernetes 中的端口说明

  • port:Service 在集群内部的访问端口,通过 clusterIP:port 访问。
  • nodePort:外部访问 Service 的端口,通过 nodeIP:nodePort 访问(默认范围:30000-32767)。
  • targetPort:Pod 的端口,流量从 portnodePort 转发到 Pod 的 targetPort
  • containerPort:Pod 内容器的端口,targetPort 映射到 containerPort

写yaml太累怎么办?

  • 用 --dry-run 命令生成
kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml
  • 用get命令导出
kubectl get svc nginx-service -o yaml > my-svc.yaml
或
kubectl edit svc nginx-service  #复制配置,再粘贴到新文件

yaml文件的学习方法:
(1)多看别人(官方)写的,能读懂
(2)能照着现场的文件改着用
(3)遇到不懂的,善用kubectl explain … 命令查

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词