1. YAML语法规则:
大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tal键,只允许使用空格 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 ”#” 表示注释,从这个字符一直到行尾,都会被解析器忽略
2. yaml文件参数介绍
apiVersion: apps/v1 '//api版本标签' kind: Deployment '//定义资源类型、角色,deployment是控制器' metadata: '//定义资源的元数据' name: nginx-deployment '//定义资源的名称,在同一个namesapce中必须唯一' labels: '//定义资源的标签' app: nginx spec: '定义容器模板' replicas: 3 '//定义副本数量' selector: '//选择器' matchLabels: '//匹配的标签' app: nginx '//匹配模板名称' template: '//模板' metadata: labels: app: nginx spec: containers: '//定义容器信息' - name: nginx '//-:表示参数,容器名,与标签名要相同' image: nginx:1.15.4 '//容器使用的镜像以及版本' ports: - containerPort: 80 '//定义容器的对外端口'
apiVersion:此处值是v1,这个版本号需要根据安装的Kubernetes版本和资源类型进行变化,记住不是写死的。
kind:此处创建的是Pod,根据实际情况,此处资源类型可以是Deployment、Job、Ingress、Service等。
metadata:包含Pod的一些meta信息,比如名称、namespace、标签等信息。
spec:包括一些container,storage,volume以及其他Kubernetes需要的参数,以及诸如是否在容器失败时重新启动容器的属性。可在特定Kubernetes API找到完整的Kubernetes Pod的属性。
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数据/属性 name: django-pod #资源的名字,在同一个namespace中必须唯一 labels: #设定资源的标签,使这个标签在service网络中备案,以便被获知 k8s-app: django version: v1 kubernetes.io/cluster-service: "true" annotations: #设置自定义注解列表 - name: String #设置自定义注解名字 spec: #设置该资源的内容 restartPolicy: Always #表示自动重启,一直都会有这个容器运行 nodeSelector: #选择node节点14 zone: node1 containers: - name: django-pod #容器的名字 image: django:v1.1 #容器使用的镜像地址 imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略, # Always,每次都检查 # Never,每次都不检查(不管本地是否有) # IfNotPresent,如果本地有就不检查,如果没有就拉取 command: ['sh'] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT args: ["$(str)"] #启动容器的命令参数,对应Dockerfile中CMD参数 env: #指定容器中的环境变量 - name: str #变量的名字 value: "/etc/run.sh" #变量的值 resources: #资源管理 requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行 cpu: 0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m) memory: 32Mi #内存使用量 limits: #资源限制 cpu: 0.5 memory: 32Mi ports: - containerPort: 8080 #容器开发对外的端口 name: uwsgi #名称 protocol: TCP livenessProbe: #pod内容器健康检查的设置 httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常 path: / #URI地址 port: 8080 #host: 127.0.0.1 #主机地址 scheme: HTTP initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始 timeoutSeconds: 5 #检测的超时时间 periodSeconds: 15 #检查间隔时间 #也可以用这种方法 #exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常 # command: # - cat # - /tmp/health #也可以用这种方法 #tcpSocket: //通过tcpSocket检查健康 # port: number lifecycle: #生命周期管理(钩子) postStart: #容器运行之前运行的任务 exec: command: - 'sh' - 'yum upgrade -y' preStop: #容器关闭之前运行的任务 exec: command: ['service httpd stop'] volumeMounts: #挂载设置 - name: volume #挂载设备的名字,与volumes[*].name 需要对应 mountPath: /data #挂载到容器的某个路径下 readOnly: True volumes: #定义一组挂载设备 - name: volume #定义一个挂载设备的名字 #meptyDir: {} hostPath: path: /opt #挂载设备类型为hostPath,路径为宿主机下的/opt
3. 解析k8s中的pod
【Port】: port是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个service
【nodePort】:nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service。
【targetPort】:targetPort是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
【containerPort】:containerPort是pod内部容器的端口,targetPort映射到containerPort。
4. 生成YMAL或者JSON文件
## (1)直接生成yaml文件内容展示命令行界面,并不会保存 # kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml ## (2)直接生成yaml文件内容展示命令行界面,文件另存为 # kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml > my-deployment.yaml ## (3)直接生成json文件内容展示命令行界面,并不会保存 # kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json ## (4)将现有的资源生成模板并命令行界面 # kubectl get deploy/nginx-deployment --export -o yaml ## (5)将现有的资源生成模板保存到文件中 # kubectl get deploy/nginx-deployment --export -o yaml > shuai.yaml