这部分须要有必定k8s的知识基础,建议了解k8s基本使用方法再阅读node
详见个人另一篇文章基于Docker的微服务CI CD流水线 nginx
按照上面内容,准备好以下镜像:git
dev.server:5000/woqu/gateway-woqu:0.0.1-SNAPSHOT
建立Deploymentgithub
apiVersion: extensions/v1beta1 # kubectl api的版本 kind: Deployment # kubernetes的资源类型 对于无状态应用 Deployment便可 metadata: name: gateway-woqu-001-SNAPSHOT # 部署的名称 不能重复 由于我须要多个版本共存所以使用 名称-版本号的命名方式 spec: strategy: rollingUpdate: # 滚动更新策略 maxSurge: 10% # 数值越大 滚动更新时新建立的副本数量越多 maxUnavailble: 10% # 数值越大 滚动更新时销毁的旧副本数量越多 replicas: 3 # 期待运行的Pod副本数量 template: metadata: labels: # 自定义标签 serverType: http env: production version: 0.0.1-SNAPSHOT spec: containers: - name: httpapp image: dev.server:5000/woqu/gateway-woqu:0.0.1-SNAPSHOT readinessProbe: # 一种健康检查决定是否加入到service 对外服务 当接口返回200-400以外的状态码时,k8s会认为这个pod已经不可用,会从Service中移除 httpGet: scheme: HTTP # 支持http https path: /ready port: 7001 initialDelaySeconds: 10 # 容器启动多久后开始检查 periodSecods: 5 # 几秒检查一次 imagePullSecrets: - name: regsecret #获取私有仓库镜像的Secret
建立对应的serviceshell
apiVersion: v1 # kubectl api的版本 kind: Service # kubernetes的资源类型 这里是Service metadata: name: gateway-woqu-001-SNAPSHOT # 服务的名称 不能重复 不能有. 由于我须要多个版本共存所以使用 名称-版本号并去掉.的方式命名 spec: type: ClusterIP # service的类型 ClusterIp类型 只有Cluster内部节点和Pod能够访问 NodePort Cluster外部能够经过<NodeIp>:<NodePort>访问 LoadBalancer负载均衡 selector: # 匹配pod的标签与上文Deployment中的labels一致 serverType: http env: production version: 0.0.1-SNAPSHOT ports: - protocol: TCP # 只有TCP 或 UDP port: 7001 # 服务 监听的端口 targetPort: 7001 # Pod 监听的端口 对应上面的Deployment中的HTTP_PORT
建立对应的ingress(路由)对外提供服务api
apiVersion: extensions/v1beta1 # kubectl api的版本 kind: Ingress # kubernetes的资源类型 这里是Ingress metadata: name: woqu-http # 路由的名称 spec: rules: - host: xx.xxxx.com # 域名 http: paths: - backend: serviceName: gateway-woqu-001-SNAPSHOT # 转发的服务名 servicePort: 7001 # 转发到服务的哪一个端口 对应上文的service port path: / # 匹配路径
为什么不直接使用Service对外提供服务?
其实咱们只须要把Service的类型改为LoadBlancer,阿里云(其余云服务商相似)会给Service添加一个监听的nodePort,再自动建立一个负载均衡,经过tcp转发到Service的nodePort上(这地方阿里云有个bug每次更新Service它都会把转发类型改为tcp),可想而知,当咱们的Service愈来愈多时,nodePort的管理成本也就愈来愈高, k8s提供了另一个资源解决这种问题,就是Ingress,而Nginx-Ingress-Controller的注解能够在这里查询 传送门app
最后,使用kubectl命令部署负载均衡
kubectl apply -f gateway-woqu-deployment.yaml kubectl apply -f gateway-woqu-service.yaml kubectl apply -f woqu-http.yaml