這部分須要有必定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