自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kong和Konga在K8s部署真的很難嗎?

系統(tǒng)
隨著k8s的成熟,在k8s上使用ingress-nginx、traefik、apisix等各類ingress的人也越來(lái)越多。ingress-kong也可以作為k8s的ingress使用,當(dāng)然kong也可以單獨(dú)作為微服務(wù)的gateway網(wǎng)關(guān)來(lái)使用。

[[425668]]

本文轉(zhuǎn)載自微信公眾號(hào)「運(yùn)維開發(fā)故事」,作者小姜。轉(zhuǎn)載本文請(qǐng)聯(lián)系運(yùn)維開發(fā)故事公眾號(hào)。

背景

隨著k8s的成熟,在k8s上使用ingress-nginx、traefik、apisix等各類ingress的人也越來(lái)越多。ingress-kong也可以作為k8s的ingress使用,當(dāng)然kong也可以單獨(dú)作為微服務(wù)的gateway網(wǎng)關(guān)來(lái)使用。

如果kong是作為ingress來(lái)使用,那么需要使用kong鏡像來(lái)部署一個(gè)ingress-kong和一個(gè)kong/kubernetes-ingress-controller鏡像來(lái)部署一個(gè)kong的ingress-controller。還需要部署sa賬號(hào)和rbac,還有CRD資源。

如果kong只是作為一個(gè)gateway來(lái)替換springcloud中的gateway來(lái)使用,那么只需要部署sa賬號(hào)和rbac,然后用kong鏡像部署一個(gè)pod即可當(dāng)做gateway使用,crd也就不需要了。

kong和konga支持MySQL、MongoDB、PostgresSQL三種數(shù)據(jù)庫(kù)。而我這里選擇的是PostgresSQL。因?yàn)楣径际莂ll in docker,all in kubernetes,因此這里也就選擇了在k8s中部署kong和konga。下面記錄了一下部署kong和konga過(guò)程中遇到的一些報(bào)錯(cuò)和排查解決方案思路手段。

部署konga

  1. $ cat kong-ui-pre.yaml 
  2. --- 
  3. apiVersion: apps/v1 
  4. kind: Deployment 
  5. metadata: 
  6.   labels: 
  7.     appName: konga-ui-aggre-sit 
  8.     appEnv: sit 
  9.   name: konga-ui-aggre-sit 
  10.   namespace: kong 
  11. spec: 
  12.   replicas: 1 
  13.   selector: 
  14.     matchLabels: 
  15.       appName: konga-ui-aggre-sit 
  16.       appEnv: sit 
  17.   template: 
  18.     metadata: 
  19.       labels: 
  20.         appName: konga-ui-aggre-sit 
  21.         appEnv: sit 
  22.     spec: 
  23.       imagePullSecrets: 
  24.       - name: registry-auth 
  25.       containers: 
  26.       - env: 
  27.         - name: NODE_ENV 
  28.           value: "production" 
  29.         - name: DB_ADAPTER 
  30.           value: "postgres" 
  31.         - name: DB_HOST 
  32.           value: "你自己的pgsql地址" 
  33.         - name: DB_PORT 
  34.           value: "你自己的pgsql端口" 
  35.         - name: DB_USER 
  36.           value: "kong" 
  37.         - name: DB_PASSWORD 
  38.           value: "你自己的pgsql密碼" 
  39.         - name: DB_DATABASE 
  40.           value: "konga" 
  41.         - name: TOKEN_SECRET 
  42.           value: "自己生成隨機(jī)字符串" 
  43.         - name: NO_AUTH 
  44.           value: "false" 
  45.         - name: NODE_TLS_REJECT_UNAUTHORIZED 
  46.           value: "0" 
  47.         image: registry.ayunw.cn/kube-system/pantsel/konga:0.14.9 
  48.         imagePullPolicy: IfNotPresent 
  49.         livenessProbe: 
  50.           failureThreshold: 3 
  51.           httpGet: 
  52.             path: / 
  53.             port: 1337 
  54.             scheme: HTTP 
  55.           initialDelaySeconds: 5 
  56.           periodSeconds: 10 
  57.           successThreshold: 1 
  58.           timeoutSeconds: 1 
  59.         name: konga-ui-aggre-sit 
  60.         ports: 
  61.         - containerPort: 1337 
  62.           name: kong-ui 
  63.           protocol: TCP 
  64.         readinessProbe: 
  65.           failureThreshold: 3 
  66.           httpGet: 
  67.             path: / 
  68.             port: 1337 
  69.             scheme: HTTP 
  70.           initialDelaySeconds: 5 
  71.           periodSeconds: 10 
  72.           successThreshold: 1 
  73.           timeoutSeconds: 1 
  74.       serviceAccountName: kong-serviceaccount 

我部署kong和konga的時(shí)候使用的是pgsql,根據(jù)GitHub上的文檔上說(shuō)明得知,在使用NODE_ENV為production的時(shí)候需要手動(dòng)去初始化pgsql??戳艘幌耴ong官網(wǎng)的文檔來(lái)初始化,官網(wǎng)文檔:https://docs.konghq.com/install/docker/

初始化pgsql報(bào)錯(cuò)

  1. $ docker run --rm --network=kong-net -e "KONG_DATABASE=postgres" \ 
  2. > -e "KONG_PG_HOST=pgsql地址" \ 
  3. > -e "KONG_PG_USER=konga" \ 
  4. > -e "KONG_PG_PASSWORD=pgsql密碼" \ 
  5. > -e "KONG_PG_DATABASE=konga" \ 
  6. > -e "KONG_PG_PORT=3306" \ 
  7. > registry.ayunw.cn/kong/kong-custom:382-ffaf4d50 kong migrations up 
  8. Unable to find image 'registry.ayunw.cn/kong/kong-custom:382-ffaf4d50' locally 
  9. 382-ffaf4d50: Pulling from kong/kong-custom 
  10. 0a6724ff3fcd: Pull complete 
  11. 274efec6805c: Pull complete 
  12. 4bb58967a4ce: Pull complete 
  13. 3f59fb9af44b: Pull complete 
  14. 7e3ec18b9226: Pull complete 
  15. ce8acfac03f7: Pull complete 
  16. Digest: sha256:453dea194d4e39275ea771d062262f0868e29120fc529702dea10278677413c2 
  17. Status: Downloaded newer image for registry.ayunw.cn/kong/kong-custom:382-ffaf4d50 
  18. Error: [PostgreSQL error] failed to retrieve PostgreSQL server_version_num: temporary failure in name resolution 
  19.  
  20.   Run with --v (verbose) or --vv (debug) for more details 

想了一下,他這個(gè)完全是docker部署kong而不是k8s中部署kong,因此他會(huì)需要?jiǎng)?chuàng)建一個(gè)docker的network為kong-net,然后保證所有kong相關(guān)的服務(wù)都跑在同一個(gè)網(wǎng)絡(luò)中。那我這里是部署在k8s中,且pgsql也是買的云的服務(wù),所以我這里其實(shí)是不應(yīng)該這樣子來(lái)進(jìn)行初始化的。

然后上github,找到https://github.com/pantsel/konga/tree/master文檔上的Production Docker Image步驟中的Prepare the database來(lái)操作。

但是里面可能有一個(gè)參數(shù)解釋的不是很清楚,我自己一開始也是比較模糊的,就是https://github.com/pantsel/konga上Production Docker Image步驟下的Prepare the database步驟中的connection-uri參數(shù),你會(huì)發(fā)現(xiàn)他似乎沒(méi)給出connection-uri的這個(gè)uri的例子是什么樣子的。但是其實(shí)你會(huì)發(fā)現(xiàn)在這個(gè)github中的Production步驟有寫一條url和這個(gè)比較類似的,告訴你在使用MySQL或者PostgresSQL的時(shí)候應(yīng)該怎么初始化,命令是:node ./bin/konga.js prepare --adapter postgres --uri postgresql://localhost:5432/konga。但是注意,這個(gè)命令他應(yīng)該不是在你將konga部署在k8s中來(lái)使用的。但是這里就有一條url:postgresql://localhost:5432/konga,可以用來(lái)參考,那么也就是說(shuō)差不多就是這個(gè)樣子的url了,但是應(yīng)該還需要帶上用戶名和密碼。

其實(shí)這里我還犯了一個(gè)錯(cuò)誤,就是其實(shí)一開始我初始化的pgsql命令中pgsql的url寫錯(cuò)了,看了https://github.com/pantsel/konga/tree/master中的文檔后,手敲命令,將postgresql://localhost:5432/konga敲成了postgre://localhost:5432/konga,所以初始化的時(shí)候也報(bào)錯(cuò)了。

更改后重新初始化

  1. $ docker run registry.ayunw.cn/kube-system/pantsel/konga:0.14.9 -c prepare -a postgres -u postgresql://konga:pgsql密碼@pgsql地址:pgsql端口/konga 
  2. debug: Preparing database... 
  3. Using postgres DB Adapter. 
  4. Failed to connect to DB Error: getaddrinfo EAI_AGAIN konga 
  5.     at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:64:26) { 
  6.   errno: 'EAI_AGAIN'
  7.   code: 'EAI_AGAIN'
  8.   syscall: 'getaddrinfo'
  9.   hostname: 'konga' 

然后想到了因?yàn)?ldquo;#”導(dǎo)致的問(wèn)題。甚至嘗試了將密碼用單引號(hào)或者雙引號(hào)括起來(lái)嘗試,仍然報(bào)錯(cuò),然后將整個(gè)連接pgsql的url全部用單引號(hào)或者雙引號(hào)括起來(lái),也都是沒(méi)有用。再查了一下google發(fā)現(xiàn)需要將“#”符號(hào)改成%23。

再次初始化

  1. $ docker run registry.ayunw.cn/kube-system/pantsel/konga:0.14.9 -c prepare -a postgres -u postgresql://konga:pgsql密碼@pgsql地址:pgsql端口/konga 
  2. debug: Preparing database... 
  3. Using postgres DB Adapter. 
  4. Database exists. Continue... 
  5. debug: Hook:api_health_checks:process() called 
  6. debug: Hook:health_checks:process() called 
  7. debug: Hook:start-scheduled-snapshots:process() called 
  8. debug: Hook:upstream_health_checks:process() called 
  9. debug: Hook:user_events_hook:process() called 
  10. debug: Seeding User... 
  11. debug: User seed planted 
  12. debug: Seeding Kongnode... 
  13. debug: Kongnode seed planted 
  14. debug: Seeding Emailtransport... 
  15. debug: Emailtransport seed planted 
  16. debug: Database migrations completed! 

初始化成功

總結(jié)部署konga遇到的問(wèn)題

1、文檔中寫的connection-uri的話必須不能寫錯(cuò),postgresql不要寫成postgres

2、密碼中有符號(hào)“#”要改成%23

部署kong

  1. --- 
  2. # Source: kong-custom-pre-master/templates/deployment.yaml 
  3. apiVersion: apps/v1 
  4. kind: Deployment 
  5. metadata: 
  6.   name: kong-custom-pre-master 
  7.   namespace: kong 
  8.   labels: 
  9.     appEnv: pre 
  10.     appName: kong-custom 
  11.     appGroup: kong 
  12. spec: 
  13.   replicas: 1 
  14.   progressDeadlineSeconds: 1800 
  15.   minReadySeconds: 5 
  16.   strategy: 
  17.     type: RollingUpdate 
  18.     rollingUpdate: 
  19.       maxUnavailable: 50% 
  20.       maxSurge: 50% 
  21.   selector: 
  22.     matchLabels: 
  23.       appEnv: pre 
  24.       appName: kong-custom 
  25.       appGroup: kong 
  26.   template: 
  27.     metadata: 
  28.       labels: 
  29.         appEnv: pre 
  30.         appName: kong-custom 
  31.         appGroup: kong 
  32.     spec: 
  33.       dnsPolicy: ClusterFirst 
  34.       terminationGracePeriodSeconds: 10 
  35.       serviceAccountName: kong-serviceaccount 
  36.       imagePullSecrets: 
  37.         - name: registry-auth-kong-pro 
  38.       initContainers: 
  39.         - name: wait-for-migrations 
  40.           image: "registry.ayunw.cn/kong/kong-custom:398-c44f9085" 
  41.           command: 
  42.             - /bin/sh 
  43.             - -c 
  44.             - while true; do kong migrations bootstrap; if [[ 0 -eq 0 ]]; then exit 0; fi; sleep 2;  done; 
  45.           env: 
  46.             # 注意這里KONG_DATABASE的value是錯(cuò)誤的,應(yīng)該將Kong改成postgres 
  47.           - name: KONG_DATABASE 
  48.             value: "kong" 
  49.           - name: KONG_PG_USER 
  50.             value: "kong" 
  51.           - name: KONG_PG_PORT 
  52.             value: "pgsql端口" 
  53.           - name: KONG_PG_PASSWORD 
  54.             value: "pgsql密碼" 
  55.           - name: KONG_PG_HOST 
  56.             value: "pgsql地址" 
  57.       containers: 
  58.         - name: kong-custom-pre-master 
  59.           image: "registry.ayunw.cn/kong/kong-custom:398-c44f9085" 
  60.           ports: 
  61.             - name: proxy 
  62.               containerPort: 8000 
  63.               protocol: TCP 
  64.             - name: proxy-ssl 
  65.               containerPort: 9443 
  66.               protocol: TCP 
  67.             - name: metrics 
  68.               containerPort: 8100 
  69.               protocol: TCP 
  70.             - name: admin-url 
  71.               containerPort: 8444 
  72.               protocol: TCP 
  73.           resources: 
  74.             limits: 
  75.               cpu: "5000m" 
  76.               memory: "1024Mi" 
  77.             requests: 
  78.               cpu: "100m" 
  79.               memory: "512Mi" 
  80.           lifecycle: 
  81.             preStop: 
  82.               exec
  83.                 command: 
  84.                 - /bin/sh 
  85.                 - -c 
  86.                 - kong quit 
  87.           env: 
  88.             - name"KONG_PROXY_LISTEN" 
  89.               value: "0.0.0.0:8000, 0.0.0.0:9443 ssl http2" 
  90.             - name"KONG_PORT_MAPS" 
  91.               value: "80:8000, 443:8443" 
  92.             - name"KONG_ADMIN_LISTEN" 
  93.               value: "0.0.0.0:8444 ssl" 
  94.             - name"KONG_STATUS_LISTEN" 
  95.               value: "0.0.0.0:8100" 
  96.             - name"KONG_NGINX_WORKER_PROCESSES" 
  97.               value: "2" 
  98.             - name"KONG_ADMIN_ACCESS_LOG" 
  99.               value: "/dev/stdout" 
  100.             - name"KONG_ADMIN_ERROR_LOG" 
  101.               value: "/dev/stderr" 
  102.             - name"KONG_PROXY_ERROR_LOG" 
  103.               value: "/dev/stderr" 
  104.               # 注意這里KONG_DATABASE的value是錯(cuò)誤的,應(yīng)該將Kong改成postgres 
  105.             - name: KONG_DATABASE 
  106.               value: "kong" 
  107.             - name: KONG_PG_USER 
  108.               value: "kong" 
  109.             - name: KONG_PG_PORT 
  110.               value: "pgsql端口" 
  111.             - name: KONG_PG_PASSWORD 
  112.               value: "pgsql密碼" 
  113.             - name: KONG_PG_HOST 
  114.               value: "pgsql地址" 

查看kong的日志報(bào)錯(cuò)

  1. $ kubectl logs -f --tail=20 -n kong kong-custom-sit-9c5cf7b69-4q29l 
  2.  
  3. stack traceback: 
  4.  [C]: in function 'error' 
  5.  /usr/local/share/lua/5.1/kong/cmd/utils/migrations.lua:16: in function 'check_state' 
  6.  /usr/local/share/lua/5.1/kong/init.lua:455: in function 'init' 
  7.  init_by_lua:3: in main chunk 
  8. nginx: [error] init_by_lua error: /usr/local/share/lua/5.1/kong/cmd/utils/migrations.lua:16: Database needs bootstrapping or is older than Kong 1.0. 
  9.  
  10. To start a new installation from scratch, run 'kong migrations bootstrap'
  11.  
  12. To migrate from a version older than 1.0, migrated to Kong 1.5.0 first
  13. If you still have 'apis' entities, you can convert them to Routes and Services 
  14. using the 'kong migrations migrate-apis' command in Kong 1.5.0. 
  15.  
  16.  
  17. stack traceback: 
  18.  [C]: in function 'error' 
  19.  /usr/local/share/lua/5.1/kong/cmd/utils/migrations.lua:16: in function 'check_state' 
  20.  /usr/local/share/lua/5.1/kong/init.lua:455: in function 'init' 
  21.  init_by_lua:3: in main chunk 

很明顯是因?yàn)闆](méi)有執(zhí)行kong migrations的命令。但是明明在deployment.yaml中的initContainers中已經(jīng)寫了,為何沒(méi)執(zhí)行?

原因

是因?yàn)閗ong的deployment.yaml中的initContainers下的env環(huán)境變量中KONG_DATABASE寫錯(cuò)了,我寫成了kong。而根據(jù)github:https://github.com/pantsel/konga/tree/master上README.md文檔中的Environment variables中所知,KONG_DATABASE這個(gè)變量是要指明使用postgres或者M(jìn)ySQL或者off三個(gè)選項(xiàng)其中的一個(gè)。因?yàn)槲矣玫氖莗gsql,因此這里需要指定postgres,那么初始化就回去pgsql中創(chuàng)建庫(kù)、表、創(chuàng)建數(shù)據(jù)等操作,這樣才會(huì)成功。

更改后,kong啟動(dòng)正常。

寫在最后

 

我在konga的github上沒(méi)找到manifests直接可以用的yaml清單文件,只找到了chart包,因此我是渲染出來(lái)以后然后根據(jù)自己的實(shí)際環(huán)境進(jìn)行了更改。初次使用難免會(huì)遇到雜七雜八的問(wèn)題。其實(shí)也是由于我個(gè)人的不細(xì)心,沒(méi)仔細(xì)多看幾遍文檔導(dǎo)致的。有讀者如果找到了konga的manifests清單文件也可下方留言交流。也提醒各位小伙伴們,平常也需要注意一下習(xí)慣,減少和我犯同樣的錯(cuò)誤!

 

責(zé)任編輯:武曉燕 來(lái)源: 運(yùn)維開發(fā)故事
相關(guān)推薦

2024-04-19 14:44:43

模型K8s人工智能

2009-04-14 08:50:12

微軟IE8瀏覽器

2016-04-21 09:43:33

編程音樂(lè)

2022-01-22 21:38:19

K8SRedisRedis clus

2023-02-27 07:40:00

2023-09-06 08:12:04

k8s云原生

2021-07-03 08:30:16

工具KongaK8S

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2023-02-27 08:25:46

ChatGPTJDGoogle

2021-08-13 07:00:41

云原生k8sspringboot

2021-08-26 07:20:05

云原生K8sSpringboot

2022-09-27 12:00:58

HadoopK8S開源

2020-05-25 13:47:49

K8S,Jenkins

2023-07-04 07:30:03

容器Pod組件

2023-07-11 07:12:21

Hadoop部署mysql

2023-07-10 07:22:16

2010-02-23 16:21:24

Python Win

2010-03-02 17:22:46

Android技術(shù)

2022-01-02 08:42:50

架構(gòu)部署容器

2021-11-04 07:49:58

K8SStatefulSetMySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)