美食家大橙子 发表于 2024-11-9 18:55:32

yaml文件编写

Kubernetes 支持YAML和JSON格式管理资源
JSON 格式:主要用于 api 接口之间消息的传递
YAML 格式;用于配置和管理,YAML是一种轻便的非标志性语言,内容格式人性化容易读懂
一,yaml语法格式

1.1 根本语法规则



[*]使用空格进行缩进(不使用制表符),通常使用两个或四个空格。缩进代表层级关系,同级左边对齐。
[*]符号 : 符号 - 符号 , 后面要加上空格
[*]对字母的巨细写敏感
[*]字符串要用双引号 “” 大概单引号 ‘’
[*]多行字符串使用 | 保存换行符,>代表折叠换行符
[*]符号 # 注释
[*]符号 — 表示yaml文件的开始,用来分割文件
1.2 api资源版本标签

kubectl api-servions
admissionregistration.k8s.io/v1   #v1业务场景下首选
admissionregistration.k8s.io/v1beta1#beta代表测试版本,现实生产环境不用
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1   
apps/v1                        
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
extensions/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
https://img-blog.csdnimg.cn/img_convert/ef8e3c803bd7916b18709280d4a57e27.png
1.3nginx-deployment.yaml

(1)编写yaml

mkdir /opt/demo
cd demo/
vim nginx-deployment.yaml

apiVersion: apps/v1                #指定api版本标签大写写要注意kubectl explain deployment
kind: Deployment                #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:                                        #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
name: nginx-deployment        #定义资源的名称,在同一个namespace空间中必须是唯一的
labels:                                #定义Deployment资源标签
    app: nginx       
spec:                                        #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
replicas: 3                        #定义副本数量
selector:                                #定义标签选择器
    matchLabels:                #定义匹配标签
      app: nginx                #需与 .spec.template.metadata.labels 定义的标签保持一致
template:                                #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:
      labels:         #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
      app: nginx
    spec:
      containers:                                #定义容器属性
      - name: nginx                                #定义一个容器名,一个 - name: 定义一个容器
      image: nginx:1.15.4                #定义容器使用的镜像以及版本
      ports:
      - containerPort: 80                #定义容器的对外的端口

#查看资源配置清单
kubectl get deployment nginx -o yaml

#解释资源配置清单
kubectl explain deployment.metadata
kubectl get service nginx -o yaml
kubectl explain service.metadata

#修改资源配置清单并应用
离线修改:
修改yaml文件,并用 kubectl·apply -f·xxxx.yaml·文件使之生效
当apply不生效时,先使用delete清除资源,再apply创建资源

kubectl get service nginx -o yaml >.nginx-svc.yaml#使用重定向的方式生成svc yaml文件
vim nginx-svc.yaml         #修改port:8080
kubectl .delete -f.nginx-svc.yaml
kubectl apply -f .nginx-svc.yaml
kubectl get svc

在线修改:
直接使用·kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port:888)
PS:此修改方式不会对yaml文件内容修改

7 metadata:
pod元数据:
名称:Pod的名称,必须在命名空间内唯一。
命名空间:Pod所属的命名空间,便于资源的组织和管理。
标签和注释:用于标识和选择Pod的元数据
https://img-blog.csdnimg.cn/img_convert/f4fd66fc15a5dea569aced11a8458d12.pnghttps://img-blog.csdnimg.cn/img_convert/ab07cf4a24acefff7f2ee20feaf413c1.png
https://img-blog.csdnimg.cn/img_convert/d6fec1b17d085cc17552fdf405920175.png
https://img-blog.csdnimg.cn/img_convert/3b5cb5d9f3d5db18300ad7854bfc4f54.png
https://img-blog.csdnimg.cn/img_convert/4f41ed301595f38eeb88de529e327baf.png
https://img-blog.csdnimg.cn/img_convert/e4618bbe6824c1fd85415e5f4bd71da4.png
https://img-blog.csdnimg.cn/img_convert/70709d4deaa20f444c7c614d9b1d5dee.png
(2)创建,检察资源

kubectl create -f nginx-deployment.yaml    #创建资源对象
   
   kubectl get pods -o wide                           查看创建的pod资源
https://img-blog.csdnimg.cn/img_convert/b0b5bbcbfc052b180e5f95f9f03458bd.png
1.4创建service服务对外提供访问并测试

(1)编写yaml

vim nginx-service.yaml

apiVersion: v1          # API 版本,指定使用的 Kubernetes API 版本
kind: Service         # 资源类型,表示创建一个 Service
metadata:               # 元数据部分,包含服务的基本信息
name: nginx-service   # 服务名称,用于识别该 Service
labels:               # 标签,用于标识和选择相关资源
    app: nginx          # 标签键值对,便于选择器使用

spec:                   # 规格部分,定义服务的行为
type: NodePort # 服务类型NodePort,允许通过节点的IP和指定端口访问服务,不设置会自定义端口从30000~32767
ports:                # 服务暴露的端口配置
- port: 80            # 服务端口,客户端通过此端口访问服务
    targetPort: 80      # 目标端口,实际后端 Pod 上的端口
selector:             # 选择器,用于将流量路由到特定的 Pods
    app: nginx          # 选择具有相同标签的 Pods
   
    注意标签要和nginx-deployment.yaml一致
    kubectl get service nginx-service -o yaml

https://img-blog.csdnimg.cn/img_convert/756277b183bb4dfcc3bebc30578d47e3.png
(2)创建资源对象,并检察

kubectl create -f nginx-service.yaml   #创建资源对象

kubectl get svc   #查看创建的service
呆板svc中已经有nginx-service
https://img-blog.csdnimg.cn/img_convert/58d1f98f76d27489b8e98d46aa75518a.png
(3)在欣赏器访问

http://192.168.88.30:31642
http://192.168.88.40:31642
https://img-blog.csdnimg.cn/img_convert/a84d0cbc4e6fa9ef445dc77f43f9a4e6.png
https://img-blog.csdnimg.cn/img_convert/35e4064de5c9c80f58eead3514fe7734.png
总结
二,k8s中的pod

port


[*]port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service
nodePort


[*]nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。
targetPort


[*]targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向署理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。
containerPort


[*]containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。
三,从例子中认识资源清单编写

1.创建nginx

1.1编写nginx-1.yaml

cd /opt/demo
vim nginx-1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-1
namespace: default
labels:
    app: myapp
spec:
replicas: 3
selector:
    matchLabels:
      app: myapp
template:
    metadata:
      labels:
      app: myapp
    spec:
      containers:
      - name: myapp
          image: nginx:latest
          ports:
            - name: http
            containerPort: 80

kubectl create -f nginx-1.yaml
kubectl get pod
kubectl get pod -o wide
curl -I 10.244.2.157
kubectl get pod --show-labels
kubectl get pod -A
kubectl describe deployment.apps nginx-1
https://img-blog.csdnimg.cn/img_convert/82830e60eeb6f37e71d36b7c119a38bd.png
https://img-blog.csdnimg.cn/img_convert/2c66bc3ecd69cf14fdea73c86294a782.png
https://img-blog.csdnimg.cn/img_convert/138d41979540968bcc6733115b880bbe.pnghttps://img-blog.csdnimg.cn/img_convert/3562b80f13d12196f87438cc3b93dd49.pnghttps://img-blog.csdnimg.cn/img_convert/0cc36ce770f52d03a24f76ec69806e65.pnghttps://img-blog.csdnimg.cn/img_convert/9021af3d00fb83b816997f1c2bbd156c.pnghttps://img-blog.csdnimg.cn/img_convert/6cc95e680c71a0b3a7b5a1a2611d6d7c.png
1.2创建svc

cd /opt/demo
vim nginx-svc1.yaml

apiVersion: vl
kind: Service
metadata:
name: nginx-1
namespace: default
spec:
type: NodePort
ports:
- port: 8080
    targetPort: 80
    nodePort: 32222
selector:
    app: myapp
   
    kubectl apply -f nginx-svc1.yaml
    kubectl get pod,svc
https://img-blog.csdnimg.cn/img_convert/f2c49fdec8d916a4c25c73cc24537632.pnghttps://img-blog.csdnimg.cn/img_convert/34c8bb84169a4a98a94ce28086b2682a.png
2.创建redis

2.1编写redis-1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-1
labels:
    app: redis
spec:
replicas: 1
selector:
    matchLabels:
      app: redis
template:
    metadata:
      labels:
      app: redis
    spec:
      containers:
      - name: redis
          image: redis:latest
          ports:
            - containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-service4
labels:
    app: redis
spec:
type: NodePort
ports:
- port: 6379
    targetPort: 6370
    nodePort: 32223
selector:
    app: redis

kubectl apply -f redis-1.yaml
kubectl get pod,svc
https://img-blog.csdnimg.cn/img_convert/b4692a6cc6019e46d8d3352e1a76dc98.png
https://img-blog.csdnimg.cn/img_convert/029fb53ccd1b289dd8f1082302a6bc48.pnghttps://img-blog.csdnimg.cn/img_convert/6b2561dcaa8cbb3c2ebe757497c5e5fc.png
四,快速创建yaml文件

1.kubectl run --dry-run=client 打印相应的 API 对象而不执行创建

kubectl run nginx-test --image=nginx --port=80 --dry-run=client
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client
https://img-blog.csdnimg.cn/img_convert/ec1ea256dbc4b5f79eed7fcb45911c0c.png
2.检察生成yaml格式

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml
https://img-blog.csdnimg.cn/img_convert/48de2b60ba9e5c89ea3fb8b2728caa23.png
https://img-blog.csdnimg.cn/img_convert/780727d54512b79aadf6060d64521f29.png
3.检察生成json格式

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json
https://img-blog.csdnimg.cn/img_convert/63188ecff35a237bbe8febf3b19210f0.png
https://img-blog.csdnimg.cn/img_convert/2b29b07da24d83cb10aefe2eab2cbd95.png
https://img-blog.csdnimg.cn/img_convert/4382798c00ede962264f7da074ffc4b1.png
4.使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml> nginx-deploy.yaml
https://img-blog.csdnimg.cn/img_convert/60a964c69a5731779eb48b1d584f065d.pnghttps://img-blog.csdnimg.cn/img_convert/3b868b74686ff482dbf9c0e8270fa547.png
https://img-blog.csdnimg.cn/img_convert/ca19aa8617a0cde6e8043a77fcbcb79c.png
5.生成的yaml文件

vim nginx-test.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null   #删除
labels:
    run: nginx-test
name: nginx-test
spec:
containers:
- image: nginx
    name: nginx-test
    ports:
    - containerPort: 80
    resources: {}             #删除
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}                  #删除
6.将现有的资源生成模板导出

kubectl get svc nginx-service -o yaml
https://img-blog.csdnimg.cn/img_convert/42a80e13e6c64a26b20ef82e0bc7913b.png
https://img-blog.csdnimg.cn/img_convert/bb39d25d3e0d2b5cd7fc74b653e68375.png
7.生存到文件中

kubectl get svc nginx-service -o yaml
> my-svc.yaml https://img-blog.csdnimg.cn/img_convert/90c4e991033e9bdc3f14577f7090196e.png
8.检察字段资助信息,可一层层的检察相关资源对象的资助信息

kubectl explain deployments.spec.template.spec.containers

kubectl explain pods.spec.containers
总结
1.快速创建yaml文件
(1)–dry-run 下令生成
kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml
(2)get下令导出
kubectl get svc nginx-service -o yaml
> my-svc.yaml或kubectl edit svc nginx-service#复制配置,再粘贴到新文件 2.yaml文件的学习方法:
(1)多看官方写的,能读懂理解的
(2)能照着现场的文件改着用
(3)遇到不懂的,用kubectl explain 下令检察
3.yaml文件构成
(1)控制定义,主要用来形貌资源预设的状态,控制类型:deployment,statusfulset,service。需要控制副本数量,使用的容器镜像,预先设置的配置参数和环境变量
metadata,selector,template,spec
(2)被控制对象,被控制器(deployment,statusfulset)管理的资源实例(pod),对控制对象的定义,状态由yaml文件决定

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: yaml文件编写