日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
k8s部署高可用配置中心apollo-手動(dòng)驗(yàn)證成功

前言

在前一篇文章中簡(jiǎn)單地介紹了《5分鐘通過(guò)docker快速部署并使用apollo配置中心》,用戶(hù)可以快速地了解到配置中心apollo的基本使用,但是在生產(chǎn)環(huán)境中我們往往需要高可用的部署配置中心,這樣我們就得有k8s來(lái)進(jìn)行部署。在apollo的官方文檔中有關(guān)于k8s部署的文章(https://github.com/ctripcorp/apollo/tree/master/scripts/apollo-on-kubernetes),但是在執(zhí)行的過(guò)程中是會(huì)遇到一定的坑的。包括實(shí)際部署中遇到的,鏡像的制作、portal服務(wù)的多實(shí)例支持、ingress的創(chuàng)建都沒(méi)有說(shuō)到,本人在部署的過(guò)程中已經(jīng)全部解決以上問(wèn)題,希望可以幫到?jīng)]有部署過(guò)的用戶(hù)。

我們提供的服務(wù)有:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、扎囊ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的扎囊網(wǎng)站制作公司

部署成功頁(yè)面

下面是部署完成后,訪問(wèn)apollo的登錄頁(yè)面

登錄頁(yè)面

輸入用戶(hù)名密碼:apollo/admin,部署環(huán)境完成portal頁(yè)面圖

部署完成apollo后頁(yè)面

k8s的dashboard部署頁(yè)面,本文部署了dev, fat, pro三個(gè)環(huán)境。

部署環(huán)境完成k8s后dashboard圖

部署過(guò)程

本文在部署的時(shí)候使用了當(dāng)前最新的apollo版本為:1.7.1,所以下面的所有構(gòu)建也是基于當(dāng)前版本的。

一、構(gòu)建鏡像

首先從git上下載源碼,可以從github下載:https://github.com/ctripcorp/apollo;也可以從gitee下載:https://gitee.com/nobodyiam/apollo,國(guó)內(nèi)的會(huì)快一點(diǎn)。然后進(jìn)入到目錄

 
 
 
  1. /scripts/apollo-on-kubernetes

去構(gòu)建鏡像。

1、 直接使用編譯的的包進(jìn)行安裝,獲取 apollo 壓縮包

可以直接從官網(wǎng)下載,因?yàn)間ithub實(shí)在是太慢了。建議直接從我的百度云下載。

A、下載比較慢,直接用我百度云

  • 鏈接:https://pan.baidu.com/s/1eLL2ocYE1uzXcvzO2Y3dNg
  • 提取碼:nfvm

B、從 https://github.com/ctripcorp/apollo/releases 下載預(yù)先打好的 java 包

 
 
 
  1. (1)進(jìn)入scripts/apollo-on-kubernetes/
  2. 執(zhí)行 wget https://github.com/ctripcorp/apollo/releases/download/v1.7.1/apollo-portal-1.7.1-github.zip
  3. (2)進(jìn)入scripts/apollo-on-kubernetes/
  4. 執(zhí)行 wget https://github.com/ctripcorp/apollo/releases/download/v1.7.1/apollo-adminservice-1.7.1-github.zip
  5. (3)進(jìn)入scripts/apollo-on-kubernetes/
  6. 執(zhí)行 wget https://github.com/ctripcorp/apollo/releases/download/v1.7.1/apollo-configservice-1.7.1-github.zip

2、解壓壓縮包, 獲取程序 jar 包

不要忘記重命名,把版本號(hào)去掉。

 
 
 
  1. 解壓 apollo-portal-1.7.1-github.zip
  2. 獲取 apollo-portal-1.7.1.jar, 重命名為 apollo-portal.jar, 放到 scripts/apollo-on-kubernetes/apollo-portal-server
  3. 解壓 apollo-adminservice-1.7.1-github.zip
  4. 獲取 apollo-adminservice-1.7.1.jar, 重命名為 apollo-adminservice.jar, 放到 scripts/apollo-on-kubernetes/apollo-admin-server
  5. 解壓 apollo-configservice-1.7.1-github.zip
  6. 獲取 apollo-configservice-1.7.1.jar, 重命名為 apollo-configservice.jar, 放到 scripts/apollo-on-kubernetes/apollo-config-server

3、構(gòu)建鏡像

注意:因?yàn)樵S多地方都要同時(shí)改,在構(gòu)建的時(shí)候要確定命名空間,我使用zizai。

要構(gòu)建如下的鏡像:alpine-bash-3.8-image,apollo-config-server,apollo-admin-server和apollo-portal-server,對(duì)應(yīng)的鏡像文件,在對(duì)應(yīng)的目錄下:

構(gòu)建鏡像要去到對(duì)應(yīng)的Dockerfile同級(jí)目錄下去執(zhí)行。

例如,去到scripts/apollo-on-kubernetes/apollo-config-server下執(zhí)行:

 
 
 
  1. docker build -t apollo-config-server:v1.7.1 .

注意,總共要構(gòu)建4個(gè)鏡像。整體的思路是:先構(gòu)建鏡像,然后打tag,再推到倉(cāng)庫(kù)里去。

在對(duì)應(yīng)目錄下,總結(jié)整體腳本如下:

 
 
 
  1. alpine-bash-3.8-image的鏡像:
  2. docker build -t alpine-bash:3.8 .
  3. docker tag alpine-bash:3.8  hub.thinkinpower.net/zizai/alpine-bash:3.8
  4. docker push hub.thinkinpower.net/zizai/alpine-bash:3.8
  5. apollo對(duì)應(yīng)的鏡像:
  6. docker build -t apollo-config-server:v1.7.1 .
  7. docker tag apollo-config-server:v1.7.1  hub.xx.net/zizai/apollo-config-server:v1.7.1
  8. docker push hub.xx.net/zizai/apollo-config-server:v1.7.1
  9. docker build -t apollo-admin-server:v1.7.1 .
  10. docker tag apollo-admin-server:v1.7.1  hub.xx.net/zizai/apollo-admin-server:v1.7.1
  11. docker push hub.xx.net/zizai/apollo-admin-server:v1.7.1
  12. docker build -t apollo-portal-server:v1.7.1 .
  13. docker tag apollo-portal-server:v1.7.1  hub.thinkinpower.net/zizai/apollo-portal-server:v1.7.1
  14. docker push hub.thinkinpower.net/zizai/apollo-portal-server:v1.7.1

二、部署apollo到kubernetes

1、創(chuàng)建數(shù)據(jù)庫(kù)腳本

說(shuō)明一下:

  • 在實(shí)際的生產(chǎn)環(huán)境使用中,通過(guò)分布式存儲(chǔ)來(lái)實(shí)現(xiàn)的磁盤(pán)在mysql這種IO密集性應(yīng)用中,性能問(wèn)題會(huì)顯得非常突出。所以在實(shí)際應(yīng)用中,一般不會(huì)把mysql這種應(yīng)用直接放入kubernetes中管理,而是使用專(zhuān)用的服務(wù)器來(lái)獨(dú)立部署。而像web這種無(wú)狀態(tài)應(yīng)用依然會(huì)運(yùn)行在kubernetes當(dāng)中,這個(gè)時(shí)候web服務(wù)器要連接kubernetes管理之外的數(shù)據(jù)庫(kù),有兩種方式:一是直接連接數(shù)據(jù)庫(kù)所在物理服務(wù)器IP,另一種方式就是借助kubernetes的Endpoints直接將外部服務(wù)器映射為kubernetes內(nèi)部的一個(gè)服務(wù)。

我們使用外面的mysql作為數(shù)據(jù)庫(kù),不會(huì)將mysql部署到k8s里。

執(zhí)行目錄scripts/apollo-on-kubernetes/db下的腳本。Apollo服務(wù)端共需要兩個(gè)數(shù)據(jù)庫(kù):ApolloPortalDB和ApolloConfigDB。每一個(gè)配置的config一個(gè)數(shù)據(jù)庫(kù)腳本,portal一個(gè)數(shù)據(jù)庫(kù)腳本。數(shù)據(jù)庫(kù)腳本見(jiàn):https://github.com/ctripcorp/apollo/tree/master/scripts/apollo-on-kubernetes/db,在git里已經(jīng)有。如果apollo 開(kāi)啟了 4 個(gè)環(huán)境, 即 dev、test-alpha、test-beta、prod, 在MySQL 中導(dǎo)入 scripts/apollo-on-kubernetes/db 下的文件。

2、部署k8s的yaml文件

官網(wǎng)的yaml可以下載修改就可以了,因?yàn)槲矣米约旱膫}(cāng)庫(kù)的鏡像,并且多次測(cè)試,我主要有如下的修改:

(1)配置文件要?jiǎng)h除掉安全提示:

 
 
 
  1. securityContext: 
  2. privileged: true

(2)添加倉(cāng)庫(kù)的密鑰:

 
 
 
  1. imagePullSecrets: 
  2. - name: registry-harbor

(3)下面修改為每次都拉鏡像:Always

 
 
 
  1. imagePullPolicy: Always

(4)添加mysql的配置信息

我只用3個(gè)環(huán)境,需要修改的文件如圖:

因?yàn)樾薷牡帽容^多,我將在下面列出每一個(gè)文件。我只拿開(kāi)發(fā)環(huán)境apollo-env-dev的作為一個(gè)示例,其它的只是對(duì)應(yīng)修改就可以了。在執(zhí)行的時(shí)候,建議大家從下面的(3)、(2)、(1)的順序執(zhí)行下面的文件。

(1)、service-apollo-admin-server-dev.yaml

 
 
 
  1. ---
  2. # configmap for apollo-admin-server-dev
  3. kind: ConfigMap
  4. apiVersion: v1
  5. metadata:
  6.   namespace: zizai
  7.   name: configmap-apollo-admin-server-dev
  8. data:
  9.   application-github.properties: |
  10.     spring.datasource.url = jdbc:mysql://service-mysql-for-apollo-dev-env.zizai:3306/DevApolloConfigDB?characterEncoding=utf8
  11.     spring.datasource.username = admin
  12.     spring.datasource.password = mysql-admin
  13.     eureka.service.url = http://statefulset-apollo-config-server-dev-0.service-apollo-meta-server-dev:8080/eureka/,http://statefulset-apollo-config-server-dev-1.service-apollo-meta-server-dev:8080/eureka/,http://statefulset-apollo-config-server-dev-2.service-apollo-meta-server-dev:8080/eureka/
  14. ---
  15. kind: Service
  16. apiVersion: v1
  17. metadata:
  18.   namespace: zizai
  19.   name: service-apollo-admin-server-dev
  20.   labels:
  21.     app: service-apollo-admin-server-dev
  22. spec:
  23.   ports:
  24.     - protocol: TCP
  25.       port: 8090
  26.       targetPort: 8090
  27.   selector:
  28.     app: pod-apollo-admin-server-dev
  29.   type: ClusterIP
  30.   sessionAffinity: ClientIP
  31. ---
  32. kind: Deployment
  33. apiVersion: apps/v1
  34. metadata:
  35.   namespace: zizai
  36.   name: deployment-apollo-admin-server-dev
  37.   labels:
  38.     app: deployment-apollo-admin-server-dev
  39. spec:
  40.   replicas: 3
  41.   selector:
  42.     matchLabels:
  43.       app: pod-apollo-admin-server-dev
  44.   strategy:
  45.     rollingUpdate:
  46.       maxSurge: 1
  47.       maxUnavailable: 1
  48.     type: RollingUpdate
  49.   template:
  50.     metadata:
  51.       labels:
  52.         app: pod-apollo-admin-server-dev
  53.     spec:
  54.       imagePullSecrets:           # dokcer倉(cāng)庫(kù)密碼,不需要的可以去掉
  55.         - name: registry-harbor
  56.       affinity:
  57.         podAntiAffinity:
  58.           preferredDuringSchedulingIgnoredDuringExecution:
  59.           - weight: 100
  60.             podAffinityTerm:
  61.               labelSelector:
  62.                 matchExpressions:
  63.                 - key: app
  64.                   operator: In
  65.                   values:
  66.                   - pod-apollo-admin-server-dev
  67.               topologyKey: kubernetes.io/hostname
  68.       
  69.       volumes:
  70.         - name: volume-configmap-apollo-admin-server-dev
  71.           configMap:
  72.             name: configmap-apollo-admin-server-dev
  73.             items:
  74.               - key: application-github.properties
  75.                 path: application-github.properties
  76.       
  77.       initContainers:
  78.         - image: hub.thinkinpower.net/zizai/alpine-bash:3.8
  79.           imagePullPolicy: Always
  80.           name: check-service-apollo-config-server-dev
  81.           command: ['bash', '-c', "curl --connect-timeout 2 --max-time 5 --retry 60 --retry-delay 1 --retry-max-time 120 service-apollo-config-server-dev.zizai:8080"]
  82.       
  83.       containers:
  84.         - image: hub.thinkinpower.net/zizai/apollo-admin-server:v1.7.1
  85.           imagePullPolicy: Always
  86.           name: container-apollo-admin-server-dev
  87.           ports:
  88.             - protocol: TCP
  89.               containerPort: 8090
  90.           volumeMounts:
  91.             - name: volume-configmap-apollo-admin-server-dev
  92.               mountPath: /apollo-admin-server/config/application-github.properties
  93.               subPath: application-github.properties
  94.           
  95.           env:
  96.             - name: APOLLO_ADMIN_SERVICE_NAME
  97.               value: "service-apollo-admin-server-dev.zizai"
  98.           
  99.           readinessProbe:
  100.             tcpSocket:
  101.               port: 8090
  102.             initialDelaySeconds: 10
  103.             periodSeconds: 5
  104.           
  105.           livenessProbe:
  106.             tcpSocket:
  107.               port: 8090
  108.             initialDelaySeconds: 120
  109.             periodSeconds: 10
  110.           
  111.       dnsPolicy: ClusterFirst
  112.       restartPolicy: Always

(2)、service-apollo-config-server-dev.yaml

 
 
 
  1. ---
  2. # configmap for apollo-config-server-dev
  3. kind: ConfigMap
  4. apiVersion: v1
  5. metadata:
  6.   namespace: zizai
  7.   name: configmap-apollo-config-server-dev
  8. data:
  9.   application-github.properties: |
  10.     spring.datasource.url = jdbc:mysql://service-mysql-for-apollo-dev-env.zizai:3306/DevApolloConfigDB?characterEncoding=utf8
  11.     spring.datasource.username = admin
  12.     spring.datasource.password = mysql-admin
  13.     eureka.service.url = http://statefulset-apollo-config-server-dev-0.service-apollo-meta-server-dev:8080/eureka/,http://statefulset-apollo-config-server-dev-1.service-apollo-meta-server-dev:8080/eureka/,http://statefulset-apollo-config-server-dev-2.service-apollo-meta-server-dev:8080/eureka/
  14. ---
  15. kind: Service
  16. apiVersion: v1
  17. metadata:
  18.   namespace: zizai
  19.   name: service-apollo-meta-server-dev
  20.   labels:
  21.     app: service-apollo-meta-server-dev
  22. spec:
  23.   ports:
  24.     - protocol: TCP
  25.       port: 8080
  26.       targetPort: 8080
  27.   selector:
  28.     app: pod-apollo-config-server-dev
  29.   type: ClusterIP
  30.   clusterIP: None
  31.   sessionAffinity: ClientIP
  32. ---
  33. kind: Service
  34. apiVersion: v1
  35. metadata:
  36.   namespace: zizai
  37.   name: service-apollo-config-server-dev
  38.   labels:
  39.     app: service-apollo-config-server-dev
  40. spec:
  41.   ports:
  42.     - protocol: TCP
  43.       port: 8080
  44.       targetPort: 8080
  45.       nodePort: 30002
  46.   selector:
  47.     app: pod-apollo-config-server-dev 
  48.   type: NodePort
  49.   sessionAffinity: ClientIP
  50. ---
  51. kind: StatefulSet
  52. apiVersion: apps/v1
  53. metadata:
  54.   namespace: zizai
  55.   name: statefulset-apollo-config-server-dev
  56.   labels:
  57.     app: statefulset-apollo-config-server-dev
  58. spec:
  59.   serviceName: service-apollo-meta-server-dev
  60.   replicas: 3
  61.   selector:
  62.     matchLabels:
  63.       app: pod-apollo-config-server-dev
  64.   updateStrategy:
  65.     type: RollingUpdate
  66.   template:
  67.     metadata:
  68.       labels:
  69.         app: pod-apollo-config-server-dev
  70.     spec:
  71.       imagePullSecrets:           # dokcer倉(cāng)庫(kù)密碼,不需要的可以去掉
  72.         - name: registry-harbor
  73.       affinity:
  74.         podAntiAffinity:
  75.           preferredDuringSchedulingIgnoredDuringExecution:
  76.           - weight: 100
  77.             podAffinityTerm:
  78.               labelSelector:
  79.                 matchExpressions:
  80.                 - key: app
  81.                   operator: In
  82.                   values:
  83.                   - pod-apollo-config-server-dev
  84.               topologyKey: kubernetes.io/hostname
  85.       volumes:
  86.         - name: volume-configmap-apollo-config-server-dev
  87.           configMap:
  88.             name: configmap-apollo-config-server-dev
  89.             items:
  90.               - key: application-github.properties
  91.                 path: application-github.properties
  92.       
  93.       containers:
  94.         - image: hub.thinkinpower.net/zizai/apollo-config-server:v1.7.1
  95.           imagePullPolicy: Always
  96.           name: container-apollo-config-server-dev
  97.           ports:
  98.             - protocol: TCP
  99.               containerPort: 8080
  100.           volumeMounts:
  101.             - name: volume-configmap-apollo-config-server-dev
  102.               mountPath: /apollo-config-server/config/application-github.properties
  103.               subPath: application-github.properties
  104.           
  105.           env:
  106.             - name: APOLLO_CONFIG_SERVICE_NAME
  107.               value: "service-apollo-config-server-dev.zizai"
  108.           
  109.           readinessProbe:
  110.             tcpSocket:
  111.               port: 8080
  112.             initialDelaySeconds: 10
  113.             periodSeconds: 5
  114.           
  115.           livenessProbe:
  116.             tcpSocket:
  117.               port: 8080
  118.             initialDelaySeconds:  120
  119.             periodSeconds: 10
  120.           
  121.       dnsPolicy: ClusterFirst
  122.       restartPolicy: Always

(3)、service-mysql-for-apollo-dev-env.yaml

 
 
 
  1. ---
  2. # 為外部 mysql 服務(wù)設(shè)置 service
  3. kind: Service
  4. apiVersion: v1
  5. metadata:
  6.   namespace: zizai
  7.   name: service-mysql-for-apollo-dev-env
  8.   labels:
  9.     app: service-mysql-for-apollo-dev-env
  10. spec:
  11.   ports:
  12.     - protocol: TCP
  13.       port: 3306
  14.       targetPort: 3306
  15.   type: ClusterIP
  16.   sessionAffinity: None
  17. ---
  18. kind: Endpoints
  19. apiVersion: v1
  20. metadata:
  21.   namespace: zizai
  22.   name: service-mysql-for-apollo-dev-env
  23. subsets:
  24.   - addresses:
  25.       - ip: 10.29.254.48
  26.     ports:
  27.       - protocol: TCP
  28.         port: 3306

3、添加Ingress

官網(wǎng)給的示例是用k8s的NodePort來(lái)訪問(wèn),但是在實(shí)際中,我們用會(huì)用Ingress來(lái)訪問(wèn)Portal。

注意:因?yàn)槲覀冊(cè)诓渴餻ortal的時(shí)候是多實(shí)例的,所以Ingress要添加保持會(huì)話,要不頁(yè)面會(huì)登錄不了,進(jìn)入不了portal頁(yè)面。具體為:

 
 
 
  1. metadata:
  2.   annotations:
  3.     nginx.ingress.kubernetes.io/affinity: "cookie"  # 解決會(huì)話保持
  4.     nginx.ingress.kubernetes.io/session-cookie-name: "route"
  5.     nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
  6.     nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"

ingress的代碼示例為如下:

 
 
 
  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4.   name: zizai-apollo-portal
  5.   namespace: zizai
  6.   annotations:
  7.     nginx.ingress.kubernetes.io/affinity: "cookie"  # 解決會(huì)話保持
  8.     nginx.ingress.kubernetes.io/session-cookie-name: "route"
  9.     nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
  10.     nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
  11. spec:
  12.   rules:
  13.     - host: zizai-apollo-portal.test.thinkinpower.net
  14.       http:
  15.         paths:
  16.           - path: /
  17.             backend:
  18.               serviceName: service-apollo-portal-server
  19.               servicePort: 8070

4、配置nginx

添加nginx訪問(wèn)到Ingress里:

nginx配置文件:zizai-apollo-portal.test.thinkinpower.net.conf

 
 
 
  1. server {
  2.   listen     80;
  3.   server_name  zizai-apollo-portal.test.thinkinpower.net;
  4.   access_log  /data/logs/nginx/zizai-apollo-portal.test.thinkinpower.net.access.log  main;
  5.   error_log  /data/logs/nginx/zizai-apollo-portal.test.thinkinpower.net.error.log;
  6.   root   /data/webapps/zizai-apollo-portal.test.thinkinpower.net/test/static;
  7.   index  index.html index.htm;
  8.   client_max_body_size 50m;
  9.   location   / {
  10.     proxy_set_header Host $http_host;
  11.     proxy_set_header X-Real-IP $remote_addr;
  12.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13.     proxy_pass http://kubernetes;  # 指向集群的
  14.   }
  15. }

這樣就可以根據(jù)域名:http://zizai-apollo-portal.test.thinkinpower.net 訪問(wèn)portal了。

(1)創(chuàng)建的部署:

(2)創(chuàng)建的有部署副本:

(3)創(chuàng)建的service:

(4)創(chuàng)建的ingress:

(5)創(chuàng)建的配置字典:

三、簡(jiǎn)單使用

本文章將只有簡(jiǎn)單的使用,后面會(huì)有文章介紹詳細(xì)的使用,需要的可以在本文留言。

1、創(chuàng)建項(xiàng)目

2、選擇一個(gè)環(huán)境添加變量timeout

3、如果是在添加環(huán)境的過(guò)程中,刷新頁(yè)面會(huì)有“添加補(bǔ)缺環(huán)境”的提示

添加補(bǔ)缺環(huán)境

就這樣實(shí)現(xiàn)了k8s部署高可能的apollo。有建議的可以在評(píng)論區(qū)留言。謝謝!


當(dāng)前題目:k8s部署高可用配置中心apollo-手動(dòng)驗(yàn)證成功
網(wǎng)站地址:http://www.5511xx.com/article/ccsidhh.html