Nginx 业务 yaml 文件详解:
cat /opt/linux-yml/nginx.yml
kind: Deployment #对象类型,是deployment控制器,kubectl explain Deployment
apiVersion: extensions/v1beta1 #指定这个对象属于哪个api分组,它的API版本是多少,
# kubectl explain Deployment.apiVersion
metadata: #pod的元数据信息,kubectl explain Deployment.metadata
labels: #自定义pod的标签,kubectl explain Deployment.metadata.labels
app: linux-nginx-deployment-label #标签名称为app值为linux-nginx-deployment-label, 后面会用到此标签
name: linux-nginx-deployment #pod的名称
namespace: linux-ns #把pod的创建到指定的namespace,默认是default
spec: #定义deployment中容器的详细信息,kubectl explain Deployment.spec
replicas: 1 #创建出的pod的副本数,即多少个pod,默认值为1
selector: #定义标签选择器
matchLabels: #定义匹配的标签,必须要设置
app: linux-nginx-selector #匹配的目标标签
template: #定义模板,必须定义,模板是起到描述要创建的pod的作用
metadata: #定义模板元数据
labels: #定义模板label,Deployment.spec.template.metadata.labels
app: linux-nginx-selector #定义标签,必须等于 matchLabels 定义的标签
spec: #定义pod信息
containers: #定义pod中容器列表,可以多个至少一个,pod不能动态增减容器(想新添加容器,需要把原有pod删除,重新创建pod)
- name: linux-nginx-container #容器名称
image: harbor.linux.com/web-images/nginx:1.14.2 #镜像地址
#command: ["/apps/tomcat/bin/run_tomcat.sh"] #容器启动执行的命令或脚本
#imagePullPolicy: IfNotPresent #本地有指定的镜像,就不去harbor中拉取
imagePullPolicy: Always #拉取镜像策略;不管本地有没有所指定的镜像,都去harbor拉取
ports: #定义容器端口列表
- containerPort: 80 #定义一个端口
protocol: TCP #端口协议,TCP或者UDP
name: http #端口名称
- containerPort: 443 #定义一个端口
protocol: TCP #端口协议
name: https #端口名称
env: #给容器传递配置的环境变量
- name: "password" #变量名称。必须要用引号引起来
value: "123456" #当前变量的值
- name: "age" #另一个变量名称
value: "18" #另一个变量的值
resources: #对容器资源的请求设置和限制设置
limits: #硬限制;限制容器使用宿主机资源上限
cpu: 2 #cpu的限制,单位为core数,可以写0.5或者500m(毫核)等CPU压缩值,1000毫核
memory: 2Gi #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: #资源请求的设置;当构建pod时,过滤出哪些node节点的剩余资源符合下面所指定的值,则创建pod时,才有可能把pod往该node节点调度;如果不够下面所指定的值,则创建pod时不会把pod往不符合要求的node上调度
cpu: 1 #cpu请求数,容器启动的初始可用数量,可以写0.5或者500m等CPU压缩值
memory: 512Mi #内存请求大小,容器启动的初始可用数量,用于调度pod时候使用
---
kind: Service #对象类型为service;pod要想被外部访问,就必须指定一个service,service会在宿主机打开一个nodeport;service不指定nodeport,则该service仅限于k8s内部调用
apiVersion: v1 #service API版本,service.apiVersion
metadata: #定义service元数据,service.metadata
labels: #自定义service的标签,service.metadata.labels
app: linux-nginx #定义service标签的内容
name: linux-nginx-spec #定义service的名称,此名称会被DNS解析
namespace: linux-ns #该service隶属于的namespaces名称,即把service创建到哪个namespace里面,并且service必须与pod在同一个namespace中,否则在调用时,service找不到所调用的pod
spec: #定义service的详细信息,service.spec
type: NodePort #NodePort表示在宿主机打开一个监听端口;service的类型,定义服务的访问方式,默认为ClusterIP(不会再宿主机打开一个监听端口,只为k8s内部提供服务),service.spec.type
ports: #定义访问端口, service.spec.ports
- name: http #定义一个端口名称
port: 80 #service的端口
protocol: TCP #协议类型;service是k8s内部的一个传输层的负载均衡
targetPort: 80 #目标pod的端口
nodePort: 30001 #node节点暴露的端口
- name: https #SSL 端口
port: 443 #service 443端口
protocol: TCP #端口协议
targetPort: 443 #目标pod端口
nodePort: 30043 #node节点暴露的SSL端口
selector: #service的标签选择器,定义把用户请求转发给指定label标签的pod;service会把符合label标签的pod添加到后端可被调度的endpoint列表中
app: linux-nginx-selector #将流量转发到指定的pod上,须等于Deployment.spec.selector.matchLabels
注意事项
提前创建好yml文件,并创建好pod运行所需要的namespace的yml文件等资源,一般创建namespace的操作,会单独存放在一个yml文件中
cat /opt/linux-yml/linux-ns.yml
apiVersion: v1 #API版本
kind: Namespace #类型为namespac
metadata: #定义元数据
name: linux-ns #namespace名称