yaml文件
Kubernetes 支持 YAML 和 JSON 格式管理资源对象
- JSON 格式:主要用于 api 接口之间消息的传递
- YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读
yaml文件语法格式
- 大小写敏感
- 使用缩进表示层级关系
- 不支持Tab键制表符缩进,只使用空格缩进
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
- 符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等
- “---”表示YAML格式,一个文件的开始,用于分隔文件间
- “#”表示注释
查看api资源版本标签
[root@master01 ~]# kubectl api-versions
#查看版本
案例与解释
[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
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
导模板
[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
写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文件的学习方法
- 多看别人(官方)写的,能读懂
- 能照着现场的文件改着用
- 遇到不懂的,善用kubectl explain ... 命令查