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

【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: nginx
    spec:
      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-test
  name: nginx-test
spec:
  containers:
  - image: nginx
    name: nginx-test
    ports:
    - containerPort: 80
  dnsPolicy: ClusterFirst
  restartPolicy: 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 … 命令查


http://www.kler.cn/a/538455.html

相关文章:

  • Photoshop自定义键盘快捷键
  • 小鹅通首页网页开发
  • 四种垄断组织形式的简洁解释-AI
  • C#+halcon机器视觉九点标定算法
  • 一步一步生成音乐类小程序的详细指南,结合AI辅助开发的思路
  • VSCode便捷开发
  • QT实现多线程的方法
  • 谷歌浏览器多开指南:如何完成独立IP隔离?
  • 在线免费 HTML 预览导出为图片,并且支持水平切割
  • 基于Flask的汽车质量投诉可视化分析系统的设计与实现
  • 手写一个C++ Android Binder服务及源码分析
  • Java模块化 - 基本介绍
  • 0 CAD开源内核 Truck
  • 【数据结构】(7) 栈和队列
  • 如何在RTACAR中配置IP多播(IP Multicast)
  • 一款由 .NET 官方团队开源的电子商务系统 - eShop
  • python基础语法--笔记1
  • DeepSeek与ChatGPT对比:技术、应用与未来趋势
  • Tekton 可以代替 Jenkins不
  • DNS攻击方式有哪些,应该采取哪些应对措施?
  • c++加载TensorRT调用深度学习模型方法
  • 跟着李沐老师学习深度学习(五)
  • ESP32的IDF实现C语言和C++语言的混合编译
  • P1049 装箱问题(dp)
  • C++ 字符串编码转换
  • kafka生产者之发送模式与ACK