模板解释
deployment.yaml
apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment #该配置的类型,我们使用的是 Deployment
metadata: #译名为元数据,即 Deployment 的一些基本属性和信息
name: nginx-deployment #Deployment 的名称
labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
app: nginx #为该Deployment设置key为app,value为nginx的标签
spec: #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
replicas: 1 #使用该Deployment创建一个应用程序实例
selector: #标签选择器,与上面的标签共同作用,目前不需要理解
matchLabels: #选择包含标签app:nginx的资源
app: nginx
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
app: nginx
spec: #期望Pod实现的功能(即在pod中部署)
containers: #生成container,与docker中的container是同一种
- name: nginx #container的名称
image: nginx:1.7.9 #使用镜像nginx:1.7.9创建container,该container默认80端口可访问
service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service #Service 的名称
labels: #Service 自己的标签
app: nginx #为该 Service 设置 key 为 app,value 为 nginx 的标签
spec: #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问
selector: #标签选择器
app: nginx #选择包含标签 app:nginx 的 Pod
ports:
- name: nginx-port #端口的名字
protocol: TCP #协议类型 TCP/UDP
port: 80 #集群内的其他容器组可通过 80 端口访问 Service
nodePort: 32600 #通过任意节点的 32600 端口访问 Service
targetPort: 80 #将请求转发到匹配 Pod 的 80 端口
type: NodePort #Serive的类型,ClusterIP/NodePort/LoaderBalancer
在这些代理模型中,绑定到 Service 的 IP:Port 的流量被代理到适当的后端,而客户端不知道任何关于 Kubernetes 或 Services 或 Pod 的信息。
如果要确保来自特定客户端的连接每次都传递到同一个 Pod,可以通过设置service.spec.sessionAffinity为“ClientIP”(默认为“None”),根据客户端的 IP 地址选择会话亲和性。service.spec.sessionAffinityConfig.clientIP.timeoutSeconds您还可以通过适当设置来设置最大会话粘性时间 。(默认值为 10800,即 3 小时)。
以下为例子
deploy.yaml
#Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: 003-paas-static-deploy
namespace: paas-app-dev2
labels:
name: 003-paas-static-deploy
spec:
replicas: 1
template:
metadata:
labels:
name: 003-paas-static-pod
spec:
terminationGracePeriodSeconds: 1 #k8s正确、优雅地关闭应用,等待时间30秒
nodeSelector:
dev2: "true"
hostAliases:
- ip: 10.111.181.127
hostnames:
- "config-server"
containers:
- name: "web"
image: sinoeyes.io/dev2/paas-static:1.0.0
ports:
- containerPort: 20003
env:
- name: JavaOption
value: -server -Xms128m -Xmx128m -XX:-UseGCOverheadLimit
- name: "spring.cloud.config.uri"
value: "http://config-server:31001/"
- name: spring.cloud.config.profile
value: dev2
service.yaml
#Service
apiVersion: v1
kind: Service
metadata:
name: static
namespace: paas-app-dev2
labels:
name: 003-paas-static
spec:
selector:
name: 003-paas-static-pod
sessionAffinity: ClientIP
type: NodePort
ports:
- name: "http"
port: 20003
targetPort: 20003
namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: paas-cloud-dev2
labels:
name: paas-cloud-dev2
---
apiVersion: v1
kind: Namespace
metadata:
name: paas-app-dev2
labels:
name: paas-app-dev2