【k8s集群应用】kubenetes-YAML
文章目录
- Kubernetes 资源管理:YAML 与 JSON 格式
- YAML 语法格式
- YAML 文件示例
- 1. Deployment 示例
- 2. Service 示例
- **常用操作**
- 创建资源
- 查看资源
- 访问测试
- 打印 API 对象
- 示例
- 查看生成的 YAML 格式
- 示例
- 查看生成的 JSON 格式
- 示例
- 使用 YAML 格式导出并修改配置
- 导出配置
- 修改配置(以 nginx-test.yaml 为例)
- 查看字段帮助信息
- **Kubernetes 中的端口说明**
Kubernetes 资源管理:YAML 与 JSON 格式
Kubernetes 支持使用 YAML 和 JSON 格式管理资源对象:
- 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
注意:
creationTimestamp
、resources
和status
字段通常被省略,因为 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 的端口,流量从port
或nodePort
转发到 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 … 命令查