kubectl—yaml文件

151 阅读4分钟

yaml文件

Kubernetes 支持 YAML 和 JSON 格式管理资源对象

  1. JSON 格式:主要用于 api 接口之间消息的传递
  2. YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读

yaml文件语法格式

  • 大小写敏感
  • 使用缩进表示层级关系
  • 不支持Tab键制表符缩进,只使用空格缩进
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
  • 符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等
  • “---”表示YAML格式,一个文件的开始,用于分隔文件间
  • “#”表示注释

查看api资源版本标签

[root@master01 ~]# kubectl api-versions
#查看版本

image.png

案例与解释

[root@master01 ~]# cd /opt/demo/
[root@master01 demo]# ls
[root@master01 demo]# vim demo01.yaml
apiVersion: apps/v1	#指定api版本标签
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	#定义容器的对外的端口
        
[root@master01 damo]# kubectl create -f damo.yaml
#创建资源对象
[root@master01 damo]# kubectl get pods -o wide
#查看创建的pod资源
[root@master01 damo]# kubectl get svc
#查看创建的service

浏览器访问nodeip:nodePort
http://192.168.42.17:31078

image.png

image.png

image.png

image.png

image.png

k8s中的port

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

kubectl run --dry-run=client

打印相应的 API 对象而不执行创建

[root@master01 damo]# kubectl run nginx-test --image=nginx --port=80 --dry-run=client
[root@master01 damo]# kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client
#打印

查看生成yaml格式
[root@master01 damo]# kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml
[root@master01 damo]# kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

查看生成json格式
[root@master01 damo]# kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
[root@master01 damo]# kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json

使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
[root@master01 damo]# kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
[root@master01 damo]# kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml


[root@master01 damo]# vim 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

[root@master01 damo]# kubectl apply -f nginx-test.yaml

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

导模板

[root@master01 damo]# kubectl expose deployment nginx-deployment --port=80 --target-port=80 --name=nginx-service --type=NodePort
#为deployment的nginx-deployment创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
[root@master01 damo]# kubectl get svc nginx-service -o yaml
#将现有的资源生成模板导出
[root@master01 damo]# kubectl get svc nginx-service -o yaml > my-svc.yaml
#保存到文件中

#查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers

image.png

image.png

写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 ... 命令查