YAML语法规范;在kubernetes k8s中如何通过yaml文件创建pod,以及pod常用字段详解
YAML 语法规范
K8S 里所有的资源或者配置都可以用 yaml 或 Json 定义。YAML 是一个 JSON 的超集,任何有效的 JSON 文件也都是一个有效的YAML文件。
具体参见:「YAML 语言教程与使用案例」
通过yaml创建nginx pod对象
yaml文件
在Kubernetes的 yaml文件中,最好不要出现下划线,可以有中横线。
[root@k8s-master test]# pwd
/root/k8s_practice/test
[root@k8s-master test]# cat nginx_demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
namespace: default
labels:
k8s-app: nginx
environment: dev
annotations:
name: nginx-demo
spec:
containers:
- name: nginx
image: registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17
imagePullPolicy: IfNotPresent
ports:
- name: httpd
containerPort: 80
#除非绝对必要,否则不要为 Pod 指定 hostPort。 将 Pod 绑定到hostPort时,它会限制 Pod 可以调度的位置数
#DaemonSet 中的 Pod 可以使用 hostPort,从而可以通过节点 IP 访问到 Pod;因为DaemonSet模式下Pod不会被调度到其他节点。
#一般情况下 containerPort与hostPort值相同
hostPort: 8090 #可以通过宿主机+hostPort的方式访问该Pod。例如:pod在/调度到了k8s-node02【172.16.1.112】,那么该Pod可以通过172.16.1.112:8090方式进行访问。
protocol: TCP
volumeMounts: #定义容器挂载内容
- name: nginx-site #使用的存储卷名称,跟下面volume字段的某个name值相同,这里表示使用volume的nginx-site这个存储卷
mountPath: /usr/share/nginx/html #挂载至容器中哪个目录
readOnly: false #读写挂载方式,默认为读写模式false
- name: nginx-log
mountPath: /var/log/nginx/
readOnly: false
volumes: #volumes字段定义了paues容器关联的宿主机或分布式文件系统存储卷
- name: nginx-site #存储卷名称
hostPath: #路径,为宿主机存储路径
path: /data/volumes/nginx/html/ #在宿主机上目录的路径
type: DirectoryOrCreate #定义类型,这表示如果宿主机没有此目录,则会自动创建
- name: nginx-log
hostPath:
path: /data/volumes/nginx/log/
type: DirectoryOrCreate
Pod常见操作
[root@k8s-master test]# pwd
/root/k8s_practice/test
[root@k8s-master test]# ll
total 4
-rw-r--r-- 1 root root 1317 Jul 29 16:42 nginx_demo.yaml
# 创建pod
[root@k8s-master test]# kubectl apply -f nginx_demo.yaml
pod/nginx-demo created
# 查看pod。根据结果可见被调度到了 k8s-node02 节点
[root@k8s-master test]# kubectl get pod -o wide # 或者 kubectl get pod -n default -o wide 因为名称空间为default
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-demo 1/1 Running 0 10s 10.244.2.16 k8s-node02 <none> <none&g