k8s部署nginx并使用nginx反代paas应用
通过部署在k8s里的nginx反代先前部署到paas的应用(主要涉及deployment/svc/configmap)
其中,反代是指反向代理(Reverse Proxy),是指以代理服务器来接受 internet上 的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而nginx就是这里的代理服务,主要是实现网络转发。
步骤一:编写configmap的yaml文件,并创建configmap资源
编写defualt.conf文件,用于监听nginx的server,文件如下:
server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.xml;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}
server {listen 80;server_name hxy.te.com;location / {proxy_set_header Host $host;proxy_pass http://10.101.17.40;}error_page 500 502 504 503 /50x.html;location = /50x.html {root html;}
}
创建configmap资源
##创建一个名为nginx-config的configmap资源
kubectl create configmap nginx-config --from-file=./default.conf
##查看nginx-config资源
kubectl get configmap nginx-config -o yaml
configMap是K8s中用于数据持久化和共享的资源,其本质就是一个键/值对的映射(键名必须是合法的DNS字段,由数字、字母、破折号、下划线以及圆点构成,值可以是短字面量,也可以是完整的配置文件)。一般包含多个映射条目,其映射条目可以是短字面量,也可以是文件和文件夹。
使用时需要注意:
1.pod在创建时,若有一个容器使用的configmap不存在则该容器会创建失败,其余的容器成功创建,当使用的configmap创建之后,失败的容器则会自动启动可通过设置configMapKeyRef.optional:true字段避免该情况
2.若configmap中环境变量条目的键名不合法,则在创建环境变量时不会将其作为环境变量去创建,会自动忽略错误键名的条目
创建configmap:
kubectl create configmap nginx-html --from-file=./index.html
步骤二:部署svc
利用deployment资源类型去部署nodeport类型的service
deployment可以同时管理多个pod版本,是一种更高阶的资源,创建一个deployment时会创建一个ReplicaSet资源,并由创建的ReplicaSet去管理集群中的pod。因此模式为deployment管理ReplicaSet,ReplicaSet管理Pod。由于deployment直接管理rs,且每一次的应用版本都会对应一个rs,因此deployment对于应用版本的升级和回滚操作非常简单方便
deployment有两种升级策略,分别是rollingpdate和recreate。且deployment的升级是由master处理的,不再是kubectl客户端执行,由kubernetes的控制器管理升级会使升级更加可靠
1.rollingupdate是默认的升级策略,为滚动升级,即创建一个新的pod,删除一个旧的pod
2.recreate会一次性地删除所有旧的pod,然后一次性的创建所有新pod
但是使用deployment时需要注意:
若deployment中pod的模板引用了一个configMap资源,那么更改configmap资源不会触发升级操作,若想要修改应用程序的配置并触发更新的话,则应该创建一个新的configmap,并且修改pod模板引用新的configmap来触发滚动升级
yaml文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxsvcdp
spec:selector:matchLabels:app: nginxreplicas: 3minReadySeconds: 1 #指定最小的成功运行时间strategy: #设置滚动升级的策略rollingUpdate:maxSurge: 1 #设置允许超过副本运行的pod数,默认是25%,即若dp中的副本数为4,那么dp中最多允许5个pod同时运行maxUnavailable: 0 #设置允许副本最多不可用的pod数,默认为25%,即若dp中的副本数为4,那么dp中最多有1个pod处于不可用的状态type: RollingUpdate #设置滚动升级策略的类型template: #指定创建pod的模板metadata:labels:app: nginxspec:containers:- name: nginximage: nginxports:- containerPort: 80readinessProbe: #设置就绪探针的时间,可以避免服务发布但是不能正常提供应用的情况exec: ##指定使用exec类型的就绪探针command:- curl- http://localhost:80volumeMounts:- mountPath: /etc/nginx/conf.dname: config- mountPath: /usr/share/nginx/htmlname: datavolumes:- name: dataconfigMap:name: nginx-htmlitems:- key: index.htmlpath: ./index.html- name: configconfigMap:name: nginx-configitems:- key: default.confpath: ./default.conf--- #资源类型分隔符,用于在一个文件中定义多种类型的资源
apiVersion: v1
kind: Service
metadata:name: nginxdpsvc
spec:type: NodePortselector:app: nginxports:- port: 80targetPort: 80