k8s-2-集成apollo配置中心


主題: 在k8s中集成Apollo配置中心

 

 

 

 

架構圖

一、配置中心概述

配置的幾種方式

本課講得是基於配置中心數據庫實現

 

 

配置管理的現狀

 

 

 

 

 

 

 

常見的配置中心

主講:k8s configmap,apollo

 

 

 

 

二、實戰k8s配置中心-configmap

2.1: 使用configmap管理應用配置

2.1.1: Configmap說明

configmap和secret

K8S,有兩種方式管理資源的配置,分別是configmapsecret,他們的最大區別是:

  1. configmap用來管理明文配置
  2. secret用來管理密文配置

 

0.1.2 怎么使用configmap

  1. 創建configmap資源
  2. deploy中定義congfigmap類型的volumes
  3. deoloycontainers中掛載此volumes

0.1.3 更新configmap配置的方

 

單配置更新法:

  1. 修改configmap資源清單並應用
  2. 重啟使用該configmap資源的pod

 

多配置更換法:

  1. 准備多個configmap資源
  2. 修改dp中使用的configmap
  3. 重新applydp,pod會自動重啟

 

2.1.2: Configmap使用准備

清理資源

先將前面部署的3個dubbo服務的POD個數全部調整(scale)為0個,避免在應用configmap過程中可能的報錯,也為了節省資源

直接在dashboard上操作即可,

App命名空間--à生產者和消費者都伸縮成0

Dubbo-monitor也設置為0

 

 

 

 

 

 

 

 

拆分zk集群

分測試和生產環境了,將原來3台zk集群連接斷開,將zk1,和zk2做成單獨的zk使用,zk3關掉

主機名

角色

ip

HDSS7-11.host.com

zk1.od.com(Test環境)

10.4.7.11

HDSS7-12.host.com

zk2.od.com(Prod環境)

10.4.7.12

 

先關閉zk集群

/opt/zookeeper/bin/zkServer.sh stop (3台zk集群全部關閉)

 

#刪除11,12節點上zookeeper上的數據和日志

[root@hdss7-12 ~]# rm /data/zookeeper/data/* -rf

[root@hdss7-12 ~]# rm /data/zookeeper/logs/* -rf

 

 

 

 

#修改配置文件.刪除與其他主機通信(11,12主機上)

保留如下這些

[root@hdss7-12 ~]# cat /opt/zookeeper/conf/zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper/data

dataLogDir=/data/zookeeper/logs

clientPort=2181

 

重新開啟(11,12)

[root@hdss7-11 ~]# /opt/zookeeper/bin/zkServer.sh start

 

 

dubbo-monitor資源配置清單

老規矩,資源清單在7.200運維機上統一操作

cd /data/k8s-yaml/dubbo-monitor

 

configmap

創建comfigmap清單

cat >cm.yaml <<'EOF'

apiVersion: v1

kind: ConfigMap

metadata:

name: dubbo-monitor-cm

namespace: infra

data:

dubbo.properties: |

dubbo.container=log4j,spring,registry,jetty

dubbo.application.name=simple-monitor

dubbo.application.owner=OldboyEdu

dubbo.registry.address=zookeeper://zk1.od.com:2181

dubbo.protocol.port=20880

dubbo.jetty.port=8080

dubbo.jetty.directory=/dubbo-monitor-simple/monitor

dubbo.charts.directory=/dubbo-monitor-simple/charts

dubbo.statistics.directory=/dubbo-monitor-simple/statistics

dubbo.log4j.file=/dubbo-monitor-simple/logs/dubbo-monitor.log

dubbo.log4j.level=WARN

EOF

其實就是把dubbo-monitor配置文件中的內容用configmap語法展示出來了

當然最前面加上了相應的元數據信息

Configmap作為一個卷掛載到了容器里

deploy

cat >dp-cm.yaml <<'EOF'

kind: Deployment

apiVersion: extensions/v1beta1

metadata:

name: dubbo-monitor

namespace: infra

labels:

name: dubbo-monitor

spec:

replicas: 1

selector:

matchLabels:

name: dubbo-monitor

template:

metadata:

labels:

app: dubbo-monitor

name: dubbo-monitor

spec:

containers:

- name: dubbo-monitor

image: harbor.od.com/infra/dubbo-monitor:latest

ports:

- containerPort: 8080

protocol: TCP

- containerPort: 20880

protocol: TCP

imagePullPolicy: IfNotPresent

#----------------start---------------------------

volumeMounts:

- name: configmap-volume

mountPath: /dubbo-monitor-simple/conf

volumes:

- name: configmap-volume

configMap: #掛載到了configmap-volume目錄上,容器中目錄

name: dubbo-monitor-cm

#----------------end-----------------------------

imagePullSecrets:

- name: harbor

restartPolicy: Always

terminationGracePeriodSeconds: 30

securityContext:

runAsUser: 0

schedulerName: default-scheduler

strategy:

type: RollingUpdate

rollingUpdate:

maxUnavailable: 1

maxSurge: 1

revisionHistoryLimit: 7

progressDeadlineSeconds: 600

EOF

注釋中的內容就是新增在原dp.yaml中增加的內容,解釋如下:

  1. 申明一個卷,卷名為configmap-volume
  2. 指定這個卷使用名為dubbo-monitor-cmconfigMap
  3. containers中掛載卷,卷名與申明的卷相同
  4. mountPath的方式掛載到指定目錄

 

Umask使掛載只讀

 

 

 

創建資源並檢查

應用資源配置清單

kubectl apply -f http://k8s-yaml.od.com/dubbo-monitor/cm.yaml

kubectl apply -f http://k8s-yaml.od.com/dubbo-monitor/dp-cm.yaml

 

dashboard檢查創建結果

在dashboard中查看infra名稱空間中的configmap資源

 

然后檢查容器中的配置

kubectl -n infra exec -it dubbo-monitor-5b7cdddbc5-xpft6 bash

# 容器內

bash-4.3# cat /dubbo-monitor-simple/conf/dubbo.properties

dubbo.container=log4j,spring,registry,jetty

dubbo.application.name=simple-monitor

dubbo.application.owner=

dubbo.registry.address=zookeeper://zk1.od.com:2181

....

 

 

http://dubbo-monitor.od.com/status.html

檢查dubbo-monitor頁面的注冊信息

 

 

2.1.3: 更新configmap資源

多配置更新法

准備新configmap

再准備一個configmap叫cm-pro.yaml

 

cp cm.yaml cm-pro.yaml

 

# 把資源名字改成dubbo-monitor-cm-pro

sed -i 's#dubbo-monitor-cm#dubbo-monitor-cm-pro#g' cm-pro.yaml

 

 

 

# 把服務注冊到zk2.od.com

sed -i 's#zk1#zk2#g' cm-pro.yaml

dashboard上修改zook地址

 

修改deploy配置

sed -i 's#dubbo-monitor-cm#dubbo-monitor-cm-pro#g' dp-cm.yaml

更新資源

# 應用新configmap

kubectl apply -f http://k8s-yaml.od.com/dubbo-monitor/cm-pro.yaml

 

# 更新deploy

kubectl apply -f http://k8s-yaml.od.com/dubbo-monitor/dp-cm.yaml

 

檢查配置是否更新

新的pod已經起來了

~]# kubectl -n infra get pod

NAME READY STATUS RESTARTS AGE

dubbo-monitor-c7fbf68b9-7nffj 1/1 Running 0 52s

 

進去看看是不是應用的新的configmap配置:

kubectl -n infra exec -it dubbo-monitor-5cb756cc6c-xtnrt bash

# 容器內

bash-4.3# cat /dubbo-monitor-simple/conf/dubbo.properties |grep zook

dubbo.registry.address=zookeeper://zk2.od.com:2181

看下dubbo-monitor的頁面:已經是zk2了。

 

 

掛載方式探討

monutPath掛載的問題

我們使用的是mountPath,這個是掛載整個目錄,會使容器內的被掛載目錄中原有的文件不可見,可以看見我們。

查看我們pod容器啟動的命令可以看見原來腳本中的命令已經無法對掛載的目錄操作了

如何單獨掛載一個配置文件:

只掛載單獨一個文件而不是整個目錄,需要添加subPath方法

 

 

單獨掛載文件演示

更新配置

在dp-cm.yaml的配置中,將原來的volume配置做一下更改

#----------------start---------------------------

volumeMounts:#卷掛載動作

- name: configmap-volume

mountPath: /dubbo-monitor-simple/conf

volumes:#聲明卷

- name: configmap-volume

configMap:

name: dubbo-monitor-cm

#----------------end-----------------------------

 

# 調整為

 

#----------------start---------------------------

volumeMounts:

- name: configmap-volume

mountPath: /dubbo-monitor-simple/conf

- name: configmap-volume

mountPath: /var/dubbo.properties

subPath: dubbo.properties

volumes:

- name: configmap-volume

configMap:

name: dubbo-monitor-cm

#----------------end-----------------------------

 

應用apply配置並驗證

kubectl apply -f http://k8s-yaml.od.com/dubbo-monitor/dp-cm.yaml

kubectl -n infra exec -it dubbo-monitor-5cb756cc6c-xtnrt bash

# 容器內操作

bash-4.3# ls -l /var/

total 4

drwxr-xr-x 1 root root 29 Apr 13 2016 cache

-rw-r--r-- 1 root root 459 May

10 10:02 dubbo.properties

drwxr-xr-x 2 root root 6 Apr 1 2016 empty

.....

 

 

 

根據文件創建configmap資源

[root@hdss7-22 conf]# kubectl create cm kubelet-cm --from-file=./kubelet.kubeconfig

 

 

 

 

 

三、Apollo配置中心介紹

3.1: 介紹

 

 

3.2: 架構

 

Client: dubbo-demo-custom,dubbo-demo-service

Apoll3兄弟:config service,admin service,portal

將dubbo的配置,寫到config DB

Portal:web界面,可以在頁面修改configdb中的配置數據

 

 

四、實戰交付apollo配置中心組件---configservice到k8s集群

 

Apollo的注冊中心

4.1: apollo-configservice安裝部署

4.1.1: 准備apollo-configservice軟件包

apollo-configservice軟件包下載地址:https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-configservice-1.5.1-github.zip

在運維主機200上執行

[root@mfyxw50 ~]# cd /opt/src

[root@mfyxw50 src]# wget https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-configservice-1.5.1-github.zip

[root@mfyxw50 src]# mkdir -p /data/dockerfile/apollo-configservice

[root@mfyxw50 src]# unzip apollo-configservice-1.5.1-github.zip -d /data/dockerfile/apollo-configservice/

[root@mfyxw50 src]# rm -fr /data/dockerfile/apollo-configservice/apollo-configservice-1.5.1-sources.jar #用不到

[root@hdss7-200 scripts]# rm /data/dockerfile/apollo-configservice/scripts/shutdown.sh -f #用不到

#apollo-configservice-1.5.1-sources.jar源碼包用不到

 

4.1.2: 安裝MariaDB數據庫

在數據庫主機HDSS7-11.host.com上:

注意:MySQL版本應為5.6或以上!

(1)添加MariaDB

vi /etc/yum.repos.d/MariaDB.repo

[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.1/centos7-amd64/
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

 

 

(2)導入MariaDB證

導入GPG-KEY

[root@hdss7-11 ~]# rpm --import https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB

 

(3)生成緩

[root@mfyxw10 ~]# yum makecache

 

(4)查看可用的MariaDB數據庫版

[root@mfyxw10 ~]# yum list MariaDB-server --show-duplicates

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: mirrors.163.com

* extras: mirrors.ustc.edu.cn

* updates: mirrors.aliyun.com

Available Packages

MariaDB-server.x86_64 10.1.43-1.el7.centos mariadb

MariaDB-server.x86_64 10.1.44-1.el7.centos mariadb

MariaDB-server.x86_64 10.1.45-1.el7.centos mariadb

mariadb-server.x86_64 1:5.5.65-1.el7

 

(5)安裝MariaDB-Server 10.1.45版

[root@mfyxw10 ~]# yum -y install MariaDB-server

 

(6)設置MariaDB配置文

/etc/my.cnf.d/server.cnf文件內容如下

[root@mfyxw10 ~]# cat > /etc/my.cnf.d/server.cnf << EOF

#

# These groups are read by MariaDB server.

# Use it for options that only the server (but not clients) should see

#

# See the examples of server my.cnf files in /usr/share/mysql/

#

 

# this is read by the standalone daemon and embedded servers

[server]

 

# this is only for the mysqld standalone daemon

[mysqld]

character_set_server = utf8mb4

collation_server = utf8mb4_general_ci

init_connect = "SET NAMES 'utf8mb4'"

 

#

# * Galera-related settings

#

[galera]

# Mandatory settings

#wsrep_on=ON

#wsrep_provider=

#wsrep_cluster_address=

#binlog_format=row

#default_storage_engine=InnoDB

#innodb_autoinc_lock_mode=2

#

# Allow server to accept connections on all interfaces.

#

#bind-address=0.0.0.0

#

# Optional setting

#wsrep_slave_threads=1

#innodb_flush_log_at_trx_commit=0

 

# this is only for embedded server

[embedded]

 

# This group is only read by MariaDB servers, not by MySQL.

# If you use the same .cnf file for MySQL and MariaDB,

# you can put MariaDB-only options here

[mariadb]

 

# This group is only read by MariaDB-10.1 servers.

# If you use the same .cnf file for MariaDB of different versions,

# use this group for options that older servers don't understand

[mariadb-10.1]

EOF

 

/etc/my.cnf.d/mysql-clients.cnf文件內容如下

[root@mfyxw10 ~]# cat > /etc/my.cnf.d/mysql-clients.cnf << EOF

#

# These groups are read by MariaDB command-line tools

# Use it for options that affect only one utility

#

 

[mysql]

default-character-set = utf8mb4

 

[mysql_upgrade]

 

[mysqladmin]

 

[mysqlbinlog]

 

[mysqlcheck]

 

[mysqldump]

 

[mysqlimport]

 

[mysqlshow]

 

[mysqlslap]

 

EOF

 

(7)啟動MariaDB數據庫並添加至開機自

[root@mfyxw10 ~]# systemctl enable --now mariadb

 

[root@hdss7-11 ~]# systemctl start mysql

[root@hdss7-11 ~]# systemctl status mysql

[root@mfyxw10 ~]# netstat -tanlp | grep mysql #查看MariaDB的啟動端口

 

(8)設置MariaDB數據庫密

[root@mfyxw10 ~]# mysqladmin -uroot password #設置密碼:回車

[root@mfyxw10 ~]# mysql -uroot -p #輸入數據庫密碼登錄

MariaDB [(none)]> \s                     #檢查字符集

 

MariaDB [(none)]> drop database test;

MariaDB [(none)]> use mysql;

MariaDB [mysql]> delete from user where user='';

或都使用如下命令對MariaDB數據庫初始化設置

[root@mfyxw10 ~]# mysql_secure_installation

 

(9)登錄MariaDB數據庫查看編碼是否都是UTF-8

[root@mfyxw10 ~]# mysql -uroot -p

MariaDB [(none)]> \s

 

 

(10)下載並導入apollo數據庫初始化腳本

apollo的初始化數據腳本:https://raw.githubusercontent.com/ctripcorp/apollo/v1.5.1/scripts/db/migration/configdb/V1.0.0__initialization.sql

[root@mfyxw10 ~]# wget https://raw.githubusercontent.com/ctripcorp/apollo/v1.5.1/scripts/db/migration/configdb/V1.0.0__initialization.sql -O apolloconfig.sql

[root@mfyxw10 ~]# mysql -uroot -p < apolloconfig.sql

 

(11)查看apollo的數據庫及

[root@mfyxw10 ~]# mysql -uroot -p

MariaDB [(none)]> show databases;

+--------------------+

| Database |

+--------------------+

| ApolloConfigDB |

| information_schema |

| mysql |

| performance_schema |

+--------------------+

4 rows in set (0.00 sec)

 

MariaDB [(none)]> use ApolloConfigDB;

MariaDB [ApolloConfigDB]> show tables;

+--------------------------+

| Tables_in_ApolloConfigDB |

+--------------------------+

| App |

| AppNamespace |

| Audit |

| Cluster |

| Commit |

| GrayReleaseRule |

| Instance |

| InstanceConfig |

| Item |

| Namespace |

| NamespaceLock |

| Release |

| ReleaseHistory |

| ReleaseMessage |

| ServerConfig |

+--------------------------+

15 rows in set (0.00 sec)

(12)給數據庫用戶授予權

[root@mfyxw10 ~]# mysql -uroot -p

MariaDB [(none)]> grant SELECT,DELETE,UPDATE,INSERT on ApolloConfigDB.* to "apolloconfig"@"10.4.7.%" identified by "123456";

Query OK, 0 rows affected (0.00 sec)

 

MariaDB [mysql]> select user,host from mysql.user;

+--------------+-------------------+

| user | host |

+--------------+-------------------+

| root | 127.0.0.1 |

| apolloconfig | 192.168.80.% |

| root | ::1 |

| root | localhost |

| root | mfyxw10.mfyxw.com |

+--------------+-------------------+

5 rows in set (0.00 sec)

為什么寫"@"10.4.7.%"授權網段, 因為數據庫在11主機上,沒有做flannel,出網進網肯定是要用10.4.7網段才能訪問.

21,22主機上只有在訪問172.7網段才做snat轉換.

 

(13)修改ApolloConfigDB數據庫的

先查看默認的值:

[root@mfyxw10 ~]# mysql -uroot -p

MariaDB [(none)]> use ApolloConfigDB;

MariaDB [ApolloConfigDB]> select * from ServerConfig\G;

 

 

 

修改ServerConig表的Value

[root@mfyxw10 ~]# mysql -uroot -p

MariaDB [(none)]> update ApolloConfigDB.ServerConfig set ServerConfig.Value="http://config.od.com/eureka" where ServerConfig.Key="eureka.service.url";

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

 

MariaDB [ApolloConfigDB]> select * from ServerConfig\G;

 

 

 

 

 

 

 

 

4.1.3: 解析域

mfyxw10.mfyxw.com主機上操作

(1)od.com域名的配置文件中添加mysql.od.comconfig.od.com域名

地址根據集群情況改

[root@mfyxw10 ~]# cat > /var/named/od.com.zone << EOF

\$ORIGIN od.com.

\$TTL 600 ; 10 minutes

@ IN SOA dns.od.com. dnsadmin.od.com. (

;序號請加1,表示比之前版本要新

2020031311 ; serial

10800 ; refresh (3 hours)

900 ; retry (15 minutes)

604800 ; expire (1 week)

86400 ; minimum (1 day)

)

NS dns.od.com.

\$TTL 60 ; 1 minute

dns A 192.168.80.10

harbor A 192.168.80.50 ;添加harbor記錄

k8s-yaml A 192.168.80.50

traefik A 192.168.80.100

dashboard A 192.168.80.100

zk1 A 192.168.80.10

zk2 A 192.168.80.20

zk3 A 192.168.80.30

jenkins A 192.168.80.100

dubbo-monitor A 192.168.80.100

demo A 192.168.80.100

mysql A 192.168.80.10

config A 192.168.80.100

EOF

 

(2)重啟DNS服務器服

[root@mfyxw10 ~]# systemctl restart named

 

(3)測試域名解

[root@hdss7-11 ~]# dig -t A config.od.com @10.4.7.11 +short 192.168.80.11

10.4.7.10

 

 

4.1.4: 制作apolloconfig的docker鏡像

在運維主機(200)上執行

(1)更新application-github.properties

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-configservice/config/application-github.properties << EOF

# DataSource

spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloConfigDB?characterEncoding=utf8

spring.datasource.username = apolloconfig

spring.datasource.password = 123456

 

 

#apollo.eureka.server.enabled=true

#apollo.eureka.client.enabled=true

 

EOF

 

 

 

(2)更新startup.sh文

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-configservice/scripts/startup.sh << EOF

#!/bin/bash

SERVICE_NAME=apollo-configservice

## Adjust log dir if necessary

## Adjust server port if necessary

LOG_DIR=~/opt/logs/apollo-config-server

SERVER_PORT=8080

APOLLO_CONFIG_SERVICE_NAME=$(hostname -i)

SERVER_URL="http://${APOLLO_CONFIG_SERVICE_NAME}:${SERVER_PORT}"

 

## Adjust memory settings if necessary

#export JAVA_OPTS="-Xms128m -Xmx128m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:SurvivorRatio=8"

 

## Only uncomment the following when you are using server jvm

#export JAVA_OPTS="$JAVA_OPTS -server -XX:-ReduceInitialCardMarks"

 

########### The following is the same for configservice, adminservice, portal ###########

export JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"

export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -Dlogging.file=$LOG_DIR/$SERVICE_NAME.log -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"

 

# Find Java

if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then

javaexe="$JAVA_HOME/bin/java"

elif type -p java > /dev/null 2>&1; then

javaexe=$(type -p java)

elif [[ -x "/usr/bin/java" ]]; then

javaexe="/usr/bin/java"

else

echo "Unable to find Java"

exit 1

fi

 

if [[ "$javaexe" ]]; then

version=$("$javaexe" -version 2>&1 | awk -F '"' '/version/ {print $2}')

version=$(echo "$version" | awk -F. '{printf("%03d%03d",$1,$2);}')

# now version is of format 009003 (9.3.x)

if [ $version -ge 011000 ]; then

JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"

elif [ $version -ge 010000 ]; then

JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"

elif [ $version -ge 009000 ]; then

JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"

else

JAVA_OPTS="$JAVA_OPTS -XX:+UseParNewGC"

JAVA_OPTS="$JAVA_OPTS -Xloggc:$LOG_DIR/gc.log -XX:+PrintGCDetails"

JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M"

fi

fi

 

printf "$(date) ==== Starting ==== \n"

 

cd `dirname $0`/..

chmod 755 $SERVICE_NAME".jar"

./$SERVICE_NAME".jar" start

 

rc=$?;

 

if [[ $rc != 0 ]];

then

echo "$(date) Failed to start $SERVICE_NAME.jar, return code: $rc"

exit $rc;

fi

 

tail -f /dev/null

EOF

#添加執行權限

#資源給調小了起不來,視頻能起來,不知道為啥?

 

 

 

[root@hdss7-200 scripts]# chmod u+x startup.sh

 

查看日志

[root@hdss7-21 ~]# kubectl logs apollo-configservice-746fd46575-w8sns -n infra

 

(3)編寫Dockefile文

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-configservice/Dockerfile << EOF

 

FROM harbor.od.com/base/jre8:8u112

 

ENV VERSION 1.5.1

 

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\

echo "Asia/Shanghai" > /etc/timezone

 

ADD apollo-configservice-\${VERSION}.jar /apollo-configservice/apollo-configservice.jar

ADD config/ /apollo-configservice/config

ADD scripts/ /apollo-configservice/scripts

 

CMD ["/apollo-configservice/scripts/startup.sh"]

EOF

 

(4)制作docker鏡

[root@mfyxw50 ~]# cd /data/dockerfile/apollo-configservice

[root@mfyxw50 apollo-configservice]# docker build . -t harbor.od.com/infra/apollo-configservice:v1.5.1

 

(5)將制作好的docker鏡像上傳至私有倉

[root@mfyxw50 ~]# docker login harbor.od.com

[root@mfyxw50 ~]# docker push harbor.od.com/infra/apollo-configservice:v1.5.1

 

 

 

 

 

(6)查看私有倉庫中infra是否已經有apollo-configservice:v1.5.1

 

 

 

4.1.5: 提供apolloconfig配置資源清單

在運維主機(200)上執行

(1)創建存儲apolloconfig配置資源清單的目錄

[root@mfyxw50 ~]# mkdir -p /data/k8s-yaml/apollo-configservice

 

 

(2)添加配置資源清單

deployment.yaml文件內容如下:

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-configservice/deployment.yaml << EOF

kind: Deployment

apiVersion: extensions/v1beta1

metadata:

name: apollo-configservice

namespace: infra

labels:

name: apollo-configservice

spec:

replicas: 1

selector:

matchLabels:

name: apollo-configservice

template:

metadata:

labels:

app: apollo-configservice

name: apollo-configservice

spec:

volumes:

- name: configmap-volume

configMap:

name: apollo-configservice-cm

containers:

- name: apollo-configservice

image: harbor.od.com/infra/apollo-configservice:v1.5.1

ports:

- containerPort: 8080

protocol: TCP

volumeMounts:

- name: configmap-volume

mountPath: /apollo-configservice/config

terminationMessagePath: /dev/termination-log

terminationMessagePolicy: File

imagePullPolicy: IfNotPresent

imagePullSecrets:

- name: harbor

restartPolicy: Always

terminationGracePeriodSeconds: 30

securityContext:

runAsUser: 0

schedulerName: default-scheduler

strategy:

type: RollingUpdate

rollingUpdate:

maxUnavailable: 1

maxSurge: 1

revisionHistoryLimit: 7

progressDeadlineSeconds: 600

EOF

 

service.yaml文件內容如下:

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-configservice/service.yaml << EOF

kind: Service

apiVersion: v1

metadata:

name: apollo-configservice

namespace: infra

spec:

ports:

- protocol: TCP

port: 8080

targetPort: 8080

selector:

app: apollo-configservice

EOF

 

 

Ingress.yaml文件內容如下:

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-configservice/Ingress.yaml << EOF

kind: Ingress

apiVersion: extensions/v1beta1

metadata:

name: apollo-configservice

namespace: infra

spec:

rules:

- host: config.od.com

http:

paths:

- path: /

backend:

serviceName: apollo-configservice

servicePort: 8080

EOF

 

configmap.yaml文件內容如下:

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-configservice/configmap.yaml << EOF

apiVersion: v1

kind: ConfigMap

metadata:

name: apollo-configservice-cm

namespace: infra

data:

application-github.properties: |

# DataSource

spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloConfigDB?characterEncoding=utf8

spring.datasource.username = apolloconfig

spring.datasource.password = 123456

eureka.service.url = http://config.od.com/eureka

app.properties: |

appId=100003171

EOF

4.1.6: 應用apolloconfig配置資源清

master節點(21,22)任意一台執行

(1)應用apolloconfig配置資源清單

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-configservice/configmap.yaml

configmap/apollo-configservice-cm created

[root@mfyxw30 ~]#

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-configservice/deployment.yaml

deployment.extensions/apollo-configservice created

[root@mfyxw30 ~]#

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-configservice/service.yaml

service/apollo-configservice created

[root@mfyxw30 ~]#

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-configservice/Ingress.yaml

ingress.extensions/apollo-configservice created

[root@mfyxw30 ~]#

 

 

(2)查看apolloconfig的pod是否運行起

[root@mfyxw30 ~]# kubectl get pod -n infra

NAME READY STATUS RESTARTS AGE

apollo-configservice-5f6555448-wssq5 1/1 Running 0 51s

dubbo-monitor-6676dd74cc-9hghb 1/1 Running 7 14d

dubbo-monitor-6676dd74cc-rd86g 1/1 Running 6 14d

jenkins-b99776c69-p6skp 1/1 Running 14 36d

[root@mfyxw30 ~]#

 

 

4.1.7: 瀏覽器訪問config.od.com

 

4.2: apollo-configservice連接數據庫IP分析

configserver連接訪問,做了snat轉換

 

 

五、交付apollo配置中心組件---adminservice到k8s集群

在Portal的web界面創建項目,寫入鍵值,相當於在dashboard修改了configmap中的配置

Portal會把數據傳遞給adminservice,adminservice又把數據存到configdb中

在pod的dp中指定獲取數據路徑.指定config.od.com.當刪除重建pod時會在這個地址讀取定義的變量數據

5.1: 部署apollo-adminservice軟件包

apollo-adminservice軟件包鏈接地址:https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-adminservice-1.5.1-github.zip

在運維主機(200)上操作

(1)下載軟

[root@mfyxw50 ~]# cd /opt/src/

[root@mfyxw50 src]# wget https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-adminservice-1.5.1-github.zip

 

(2)解壓到指定的目錄

[root@mfyxw50 ~]# mkdir -p /data/dockerfile/apollo-adminservice

[root@mfyxw50 ~]# unzip /opt/src/apollo-adminservice-1.5.1-github.zip -d /data/dockerfile/apollo-adminservice/

 

(3)刪除不使用的文

[root@mfyxw50 ~]# rm -fr /data/dockerfile/apollo-adminservice/apollo-adminservice-1.5.1-sources.jar

[root@mfyxw50 ~]# rm -fr /data/dockerfile/apollo-adminservice/scripts/shutdown.sh

[root@mfyxw50 ~]# rm -fr /data/dockerfile/apollo-adminservice/apollo-adminservice.conf

 

5.2: 制作apollo-adminservice的Docker鏡像

(1)配置數據庫連接串

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-adminservice/config/application-github.properties << EOF

# DataSource

spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloConfigDB?characterEncoding=utf8

spring.datasource.username = apolloconfig

spring.datasource.password = 123456

EOF

 

(2)更新startup.sh文件

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-adminservice/scripts/startup.sh << EOF

#!/bin/bash

SERVICE_NAME=apollo-adminservice

## Adjust log dir if necessary

LOG_DIR=/opt/logs/apollo-adminservice

## Adjust server port if necessary

SERVER_PORT=8080

APOLLO_ADMIN_SERVICE_NAME=\$(hostname -i)

# SERVER_URL="http://localhost:\${SERVER_PORT}"

SERVER_URL="http://\${APOLLO_ADMIN_SERVICE_NAME}:\${SERVER_PORT}"

 

## Adjust memory settings if necessary

#export JAVA_OPTS="-Xms2560m -Xmx2560m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:SurvivorRatio=8"

 

## Only uncomment the following when you are using server jvm

#export JAVA_OPTS="\$JAVA_OPTS -server -XX:-ReduceInitialCardMarks"

 

########### The following is the same for configservice, adminservice, portal ###########

export JAVA_OPTS="\$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"

export JAVA_OPTS="\$JAVA_OPTS -Dserver.port=\$SERVER_PORT -Dlogging.file=\$LOG_DIR/\$SERVICE_NAME.log -XX:HeapDumpPath=\$LOG_DIR/HeapDumpOnOutOfMemoryError/"

 

# Find Java

if [[ -n "\$JAVA_HOME" ]] && [[ -x "\$JAVA_HOME/bin/java" ]]; then

javaexe="\$JAVA_HOME/bin/java"

elif type -p java > /dev/null 2>&1; then

javaexe=\$(type -p java)

elif [[ -x "/usr/bin/java" ]]; then

javaexe="/usr/bin/java"

else

echo "Unable to find Java"

exit 1

fi

 

if [[ "\$javaexe" ]]; then

version=\$("\$javaexe" -version 2>&1 | awk -F '"' '/version/ {print \$2}')

version=\$(echo "\$version" | awk -F. '{printf("%03d%03d",\$1,\$2);}')

# now version is of format 009003 (9.3.x)

if [ \$version -ge 011000 ]; then

JAVA_OPTS="\$JAVA_OPTS -Xlog:gc*:\$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"

elif [ \$version -ge 010000 ]; then

JAVA_OPTS="\$JAVA_OPTS -Xlog:gc*:\$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"

elif [ \$version -ge 009000 ]; then

JAVA_OPTS="\$JAVA_OPTS -Xlog:gc*:\$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"

else

JAVA_OPTS="\$JAVA_OPTS -XX:+UseParNewGC"

JAVA_OPTS="\$JAVA_OPTS -Xloggc:\$LOG_DIR/gc.log -XX:+PrintGCDetails"

JAVA_OPTS="\$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M"

fi

fi

 

printf "\$(date) ==== Starting ==== \n"

 

cd \`dirname \$0\`/..

chmod 755 \$SERVICE_NAME".jar"

./\$SERVICE_NAME".jar" start

 

rc=\$?;

 

if [[ \$rc != 0 ]];

then

echo "\$(date) Failed to start \$SERVICE_NAME.jar, return code: \$rc"

exit \$rc;

fi

 

tail -f /dev/null

EOF

 

 

(3)編寫apollo-adminserviceDockerfile文件

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-adminservice/Dockerfile << EOF

FROM harbor.od.com/base/jre8:8u112

 

ENV VERSION 1.5.1

 

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\

echo "Asia/Shanghai" > /etc/timezone

 

ADD apollo-adminservice-\${VERSION}.jar /apollo-adminservice/apollo-adminservice.jar

ADD config/ /apollo-adminservice/config

ADD scripts/ /apollo-adminservice/scripts

 

CMD ["/apollo-adminservice/scripts/startup.sh"]

EOF

 

(3)制作鏡像並推送

[root@mfyxw50 ~]# cd /data/dockerfile/apollo-adminservice

[root@mfyxw50 apollo-adminservice]# docker build . -t harbor.od.com/infra/apollo-adminservice:v1.5.1

[root@mfyxw50 ~]# docker login harbor.od.com

[root@mfyxw50 ~]# docker push harbor.od.com/infra/apollo-adminservice:v1.5.1

 

(4)登錄harbor查看是否已經上傳成功

 

5.3: 准備apollo-adminservice的資源配置清單

在運維主機mfyxw50.mfyxw.com上操作

(1)創建存放資源配置清單的目錄

[root@mfyxw50 ~]# mkdir -p /data/k8s-yaml/apollo-adminservice

 

(1)Deployment.yaml文件內容如下

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-adminservice/deployment.yaml << EOF

kind: Deployment

apiVersion: extensions/v1beta1

metadata:

name: apollo-adminservice

namespace: infra

labels:

name: apollo-adminservice

spec:

replicas: 1

selector:

matchLabels:

name: apollo-adminservice

template:

metadata:

labels:

app: apollo-adminservice

name: apollo-adminservice

spec:

volumes:

- name: configmap-volume

configMap:

name: apollo-adminservice-cm

containers:

- name: apollo-adminservice

image: harbor.od.com/infra/apollo-adminservice:v1.5.1

ports:

- containerPort: 8080

protocol: TCP

volumeMounts:

- name: configmap-volume

mountPath: /apollo-adminservice/config

terminationMessagePath: /dev/termination-log

terminationMessagePolicy: File

imagePullPolicy: IfNotPresent

imagePullSecrets:

- name: harbor

restartPolicy: Always

terminationGracePeriodSeconds: 30

securityContext:

runAsUser: 0

schedulerName: default-scheduler

strategy:

type: RollingUpdate

rollingUpdate:

maxUnavailable: 1

maxSurge: 1

revisionHistoryLimit: 7

progressDeadlineSeconds: 600

EOF

(2)ConfigMap.yaml文件內容如下

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-adminservice/configmap.yaml << EOF

apiVersion: v1

kind: ConfigMap

metadata:

name: apollo-adminservice-cm

namespace: infra

data:

application-github.properties: |

# DataSource

spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloConfigDB?characterEncoding=utf8

spring.datasource.username = apolloconfig

spring.datasource.password = 123456

eureka.service.url = http://config.od.com/eureka

app.properties: |

appId=100003172

EOF

 

5.4: 應用apollo-adminservice資源配置清單

在master節點(mfyxw30.mfyxw.com或mfyxw40.mfyxw.com)任意一台操作

(1)應用資源配置清單

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-adminservice/deployment.yaml

deployment.extensions/apollo-adminservice created

[root@mfyxw30 ~]#

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-adminservice/configmap.yaml

configmap/apollo-adminservice-cm created

[root@mfyxw30 ~]#

 

(2)查看apollo-adminservice的pod是否運行成功

[root@mfyxw30 ~]# kubectl get pod -n infra

NAME READY STATUS RESTARTS AGE

apollo-adminservice-5cccf97c64-bhqzb 1/1 Running 0 72s

apollo-configservice-5f6555448-wwgsc 1/1 Running 1 2d17h

dubbo-monitor-6676dd74cc-9hghb 1/1 Running 11 17d

dubbo-monitor-6676dd74cc-rd86g 1/1 Running 10 17d

jenkins-b99776c69-p6skp

 

(3)瀏覽器訪問config.od.com是否出現有apollo-adminservice

 

六、交付apollo配置中心組件---portal到k8s集群

6.1: 執行apollo-portal數據庫腳本

apollo-portal數據庫腳本鏈接:https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/db/migration/portaldb/V1.0.0__initialization.sql

在mfyxw10.mfyxw.com主機上操作

(1)將apollo-portal數據庫腳本下載回來

[root@mfyxw10 ~]# wget https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/db/migration/portaldb/V1.0.0__initialization.sql -O apolloportal.sql

 

(2)導入apollo-portal數據庫腳本

[root@mfyxw10 ~]# mysql -uroot -p < apolloportal.sql

 

(3)查看是否導入成功

[root@mfyxw10 ~]# mysql -uroot -p

MariaDB [(none)]> show databases; #Apollo-portal的數據庫名為:ApolloPortalDB

+--------------------+

| Database |

+--------------------+

| ApolloConfigDB |

| ApolloPortalDB |

| information_schema |

| mysql |

| performance_schema |

+--------------------+

5 rows in set (0.00 sec)

 

MariaDB [(none)]> use ApolloPortalDB; #切換至ApolloPortalDB數據庫

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

MariaDB [ApolloPortalDB]> show tables; #查看ApolloPortalDB數據庫下的數據表

+--------------------------+

| Tables_in_ApolloPortalDB |

+--------------------------+

| App |

| AppNamespace |

| Authorities |

| Consumer |

| ConsumerAudit |

| ConsumerRole |

| ConsumerToken |

| Favorite |

| Permission |

| Role |

| RolePermission |

| ServerConfig |

| UserRole |

| Users |

+--------------------------+

14 rows in set (0.00 sec)

 

MariaDB [ApolloPortalDB]>

 

 

 

 

(4)ApolloPortal數據庫授權

[root@mfyxw10 ~]# mysql -uroot -p

MariaDB [(none)]> grant INSERT,DELETE,UPDATE,SELECT on ApolloPortalDB.* to "apolloportal"@"10.4.7.%" identified by "123456";

MariaDB [(none)]>flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

MariaDB [(none)]>

 

(5)更新ApolloPortal數據表ServerConfig的Value

[root@mfyxw10 ~]# mysql -uroot -p

Enter password:

Welcome to the MariaDB monitor. Commands end with ; or \g.

Your MariaDB connection id is 44

Server version: 10.1.45-MariaDB MariaDB Server

 

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

MariaDB [(none)]> use ApolloPortalDB;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

MariaDB [ApolloPortalDB]> show tables;

MariaDB [ApolloPortalDB]> select * from ServerConfig\G;

 

 

 

更新后如下圖所示

[root@mfyxw10 ~]# mysql -uroot -p

MariaDB [(none)]> use ApolloPortalDB;

MariaDB [ApolloPortalDB]> update ServerConfig set Value = '[{"orgId":"yf1","orgName":"Linux學院"},{"orgId":"yf2","orgName":"雲計算學院"},{"orgId":"yf3","orgName":"Python學院"},{"orgId":"yf4","orgName":"大數據學院"}]' where Id = 2;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

 

6.2: 准備apollo-portal軟件

在運維主機mfyxw50.mfyxw.com上操作

(1)下載apollo-portal軟件

[root@mfyxw50 ~]# cd /opt/src/

[root@mfyxw50 ~]# wget https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-portal-1.5.1-github.zip

 

(2)解壓apollo-portal軟件至相對應的目錄

[root@mfyxw50 ~]# mkdir /data/dockerfile/apollo-portal

[root@mfyxw50 ~]# unzip /opt/src/apollo-portal-1.5.1-github.zip -d /data/dockerfile/apollo-portal

 

(3)刪除apollo-portal目錄用不到的文件

[root@mfyxw50 ~]# rm -fr /data/dockerfile/apollo-portal/apollo-portal-1.5.1-sources.jar

[root@mfyxw50 ~]# rm -fr /data/dockerfile/apollo-portal/apollo-portal.conf

[root@mfyxw50 ~]# rm -fr /data/dockerfile/apollo-portal/scripts/shutdown.sh

 

(4)配置數據庫連接串

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-portal/config/application-github.properties << EOF

# DataSource

spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloPortalDB?characterEncoding=utf8

spring.datasource.username = apolloconfig

spring.datasource.password = 123456

EOF

 

(5)配置Portalmate service(此處可以不修改,在configmap處已經引入了)

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-portal/config/apollo-env.properties << EOF

local.meta=http://localhost:8080

dev.meta=http://config.od.com:8080

fat.meta=http://fill-in-fat-meta-server:8080

uat.meta=http://fill-in-uat-meta-server:8080

lpt.meta=${lpt_meta}

pro.meta=http://fill-in-pro-meta-server:8080

EOF

 

 

 

 

 

(6)更新apollo-portal的startup.sh文件

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-portal/scripts/startup.sh << EOF

#!/bin/bash

SERVICE_NAME=apollo-portal

## Adjust log dir if necessary

LOG_DIR=/opt/logs/apollo-portal-server

## Adjust server port if necessary

SERVER_PORT=8080

APOLLO_PORTAL_SERVICE_NAME=\$(hostname -i)

# SERVER_URL="http://localhost:\$SERVER_PORT"

SERVER_URL="http://\${APOLLO_PORTAL_SERVICE_NAME}:\${SERVER_PORT}"

 

## Adjust memory settings if necessary

#export JAVA_OPTS="-Xms2560m -Xmx2560m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:SurvivorRatio=8"

 

## Only uncomment the following when you are using server jvm

#export JAVA_OPTS="\$JAVA_OPTS -server -XX:-ReduceInitialCardMarks"

 

########### The following is the same for configservice, adminservice, portal ###########

export JAVA_OPTS="\$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"

export JAVA_OPTS="\$JAVA_OPTS -Dserver.port=\$SERVER_PORT -Dlogging.file=\$LOG_DIR/$SERVICE_NAME.log -XX:HeapDumpPath=\$LOG_DIR/HeapDumpOnOutOfMemoryError/"

 

# Find Java

if [[ -n "\$JAVA_HOME" ]] && [[ -x "\$JAVA_HOME/bin/java" ]]; then

javaexe="\$JAVA_HOME/bin/java"

elif type -p java > /dev/null 2>&1; then

javaexe=\$(type -p java)

elif [[ -x "/usr/bin/java" ]]; then

javaexe="/usr/bin/java"

else

echo "Unable to find Java"

exit 1

fi

 

if [[ "\$javaexe" ]]; then

version=\$("\$javaexe" -version 2>&1 | awk -F '"' '/version/ {print \$2}')

version=\$(echo "\$version" | awk -F. '{printf("%03d%03d",\$1,\$2);}')

# now version is of format 009003 (9.3.x)

if [ \$version -ge 011000 ]; then

JAVA_OPTS="\$JAVA_OPTS -Xlog:gc*:\$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"

elif [ \$version -ge 010000 ]; then

JAVA_OPTS="\$JAVA_OPTS -Xlog:gc*:\$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"

elif [ \$version -ge 009000 ]; then

JAVA_OPTS="\$JAVA_OPTS -Xlog:gc*:\$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"

else

JAVA_OPTS="\$JAVA_OPTS -XX:+UseParNewGC"

JAVA_OPTS="\$JAVA_OPTS -Xloggc:\$LOG_DIR/gc.log -XX:+PrintGCDetails"

JAVA_OPTS="\$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M"

fi

fi

 

printf "\$(date) ==== Starting ==== \n"

 

cd \`dirname \$0\`/..

chmod 755 \$SERVICE_NAME".jar"

./\$SERVICE_NAME".jar" start

 

rc=\$?;

 

if [[ \$rc != 0 ]];

then

echo "\$(date) Failed to start \$SERVICE_NAME.jar, return code: \$rc"

exit \$rc;

fi

 

tail -f /dev/null

EOF

 

 

6.3: 制作Apollo-Portal的Docker鏡像

在運維主機(mfyxw50.mfyxw.com)上操作

(1)編寫Apollo-Portal的Docker文件

[root@mfyxw50 ~]# cat > /data/dockerfile/apollo-portal/Dockerfile << EOF

FROM harbor.od.com/base/jre8:8u112

 

ENV VERSION 1.5.1

 

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\

echo "Asia/Shanghai" > /etc/timezone

 

ADD apollo-portal-\${VERSION}.jar /apollo-portal/apollo-portal.jar

ADD config/ /apollo-portal/config

ADD scripts/ /apollo-portal/scripts

 

CMD ["/apollo-portal/scripts/startup.sh"]

EOF

 

(2)制作Apollo-portal鏡像

[root@mfyxw50 ~]# cd /data/dockerfile/apollo-portal

[root@mfyxw50 apollo-portal]# docker build . -t harbor.od.com/infra/apollo-portal:v1.5.1

[root@mfyxw50 apollo-portal]# docker login harbor.od.com

[root@mfyxw50 apollo-portal]# docker push harbor.od.com/infra/apollo-portal:v1.5.1

 

 

 

 

6.4: 解析portal.od.com域名

在mfyxw10.mfyxw.com主機操作

(1)設置域名

[root@mfyxw10 ~]# cat > /var/named/od.com.zone << EOF

\$ORIGIN od.com.

\$TTL 600 ; 10 minutes

@ IN SOA dns.od.com. dnsadmin.od.com. (

;序號請加1,表示比之前版本要新

2020031312 ; serial

10800 ; refresh (3 hours)

900 ; retry (15 minutes)

604800 ; expire (1 week)

86400 ; minimum (1 day)

)

NS dns.od.com.

\$TTL 60 ; 1 minute

dns A 192.168.80.10

harbor A 192.168.80.50 ;添加harbor記錄

k8s-yaml A 192.168.80.50

traefik A 192.168.80.100

dashboard A 192.168.80.100

zk1 A 192.168.80.10

zk2 A 192.168.80.20

zk3 A 192.168.80.30

jenkins A 192.168.80.100

dubbo-monitor A 192.168.80.100

demo A 192.168.80.100

mysql A 192.168.80.10

config A 192.168.80.100

portal A 192.168.80.100

EOF

 

 

(2)重啟DNS服務

[root@mfyxw10 ~]# systemctl restart named

 

(3)測試解析

[root@mfyxw10 ~]# dig -t A portal.od.com @192.168.80.10 +short

192.168.80.100

 

6.5: 准備Apollo-portal資源配置文件

在運維主機mfyxw50.mfyxw.com上操作

(1)創建用於存放Apollo-portal資源配置文件目錄

[root@mfyxw50 ~]# mkdir -p /data/k8s-yaml/apollo-portal

 

(2)deployment.yaml文件內容如下:

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-portal/deployment.yaml << EOF

kind: Deployment

apiVersion: extensions/v1beta1

metadata:

name: apollo-portal

namespace: infra

labels:

name: apollo-portal

spec:

replicas: 1

selector:

matchLabels:

name: apollo-portal

template:

metadata:

labels:

app: apollo-portal

name: apollo-portal

spec:

volumes:

- name: configmap-volume

configMap:

name: apollo-portal-cm

containers:

- name: apollo-portal

image: harbor.od.com/infra/apollo-portal:v1.5.1

ports:

- containerPort: 8080

protocol: TCP

volumeMounts:

- name: configmap-volume

mountPath: /apollo-portal/config

terminationMessagePath: /dev/termination-log

terminationMessagePolicy: File

imagePullPolicy: IfNotPresent

imagePullSecrets:

- name: harbor

restartPolicy: Always

terminationGracePeriodSeconds: 30

securityContext:

runAsUser: 0

schedulerName: default-scheduler

strategy:

type: RollingUpdate

rollingUpdate:

maxUnavailable: 1

maxSurge: 1

revisionHistoryLimit: 7

progressDeadlineSeconds: 600

EOF

 

(3)service.yaml文件內容如下:

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-portal/service.yaml << EOF

kind: Service

apiVersion: v1

metadata:

name: apollo-portal

namespace: infra

spec:

ports:

- protocol: TCP

port: 8080

targetPort: 8080

selector:

app: apollo-portal

clusterIP: None

type: ClusterIP

sessionAffinity: None

EOF

 

(4)Ingress.yaml文件內容如下:

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-portal/Ingress.yaml << EOF

kind: Ingress

apiVersion: extensions/v1beta1

metadata:

name: apollo-portal

namespace: infra

spec:

rules:

- host: portal.od.com

http:

paths:

- path: /

backend:

serviceName: apollo-portal

servicePort: 8080

EOF

(5)ConfigMap.yaml文件內容如下:

[root@mfyxw50 ~]# cat > /data/k8s-yaml/apollo-portal/configmap.yaml << EOF

apiVersion: v1

kind: ConfigMap

metadata:

name: apollo-portal-cm

namespace: infra

data:

application-github.properties: |

# DataSource

spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloPortalDB?characterEncoding=utf8

spring.datasource.username = apolloportal

spring.datasource.password = 123456

app.properties: |

appId=100003173

apollo-env.properties: |

dev.meta=http://config.od.com

EOF

 

 

 

 

 

 

 

6.6: 應用Apollo-portal資源配置清單

在master節點(mfyxw30.mfyxw.com或mfyxw40.mfyxw.com)任意一台上執行即可

(1)應用Apollo-portal資源配置清單

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-portal/deployment.yaml

deployment.extensions/apollo-portal created

[root@mfyxw30 ~]#

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-portal/service.yaml

service/apollo-portal created

[root@mfyxw30 ~]#

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-portal/Ingress.yaml

ingress.extensions/apollo-portal created

[root@mfyxw30 ~]#

[root@mfyxw30 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-portal/configmap.yaml

configmap/apollo-portal-cm created

 

(2)查看Apollo-portal的pod是否正常啟動

[root@mfyxw30 ~]# kubectl get pod -n infra

NAME READY STATUS RESTARTS AGE

apollo-adminservice-5cccf97c64-bhqzb 1/1 Running 1 6h22m

apollo-configservice-5f6555448-7wxsp 1/1 Running 1 6h16m

apollo-portal-57bc86966d-jz5vg 1/1 Running 0 112s

dubbo-monitor-6676dd74cc-9hghb 1/1 Running 13 17d

dubbo-monitor-6676dd74cc-rd86g 1/1 Running 12 17d

jenkins-b99776c69-p6skp 1/1 Running 17 39d

 

 

 

6.7: 使用瀏覽器portal.od.com登錄

開源軟件都要改默認密碼

 

Apollo-portal默認的用戶為:apollo 密碼為:admin 第一次登錄后,強烈建議修改密碼,在此修改密碼為:admin123

 

 

 

 

 

 

 

 

在web界面修改數據庫數據

對應修改了數據庫鍵值如下

 

 

 

 

 

 

管理員工具-系統信息

 

 

 

 

七、實戰配置dubbo微服務接收apollo配置中心管理

 

7.1: Dubbo服務者連接apollo實戰

 

創建項目

 

 

 

 

 

 

 

新增配置

 

 

 

 

 

 

 

 

添加配置

#zk1是測試環境

 

 

 

發布配置

 

 

 

 

 

Jenkins-重新制作dubbo-service的harbor鏡像

#apollo分支編寫的參數變量是對應apollo注冊的參數

 

Jenkins-編寫拉取參數

 

 

修改dubbo-service的dp資源配置清單

cat dp.yaml

kind: Deployment

apiVersion: extensions/v1beta1

metadata:

name: dubbo-demo-service

namespace: app

labels:

name: dubbo-demo-service

spec:

replicas: 1

selector:

matchLabels:

name: dubbo-demo-service

template:

metadata:

labels:

app: dubbo-demo-service

name: dubbo-demo-service

spec:

containers:

- name: dubbo-demo-service

image: harbor.od.com/app/dubbo-demo-service:apollo_200805_1600 #新構建的鏡像地址

ports:

- containerPort: 20880

protocol: TCP

env:

- name: JAR_BALL

value: dubbo-server.jar

- name: C_OPTS #添加的新環境變量

value: -Denv=dev -Dapollo.meta=http://config.od.com #添加的新容器啟動參數

imagePullPolicy: IfNotPresent

imagePullSecrets:

- name: harbor

restartPolicy: Always

terminationGracePeriodSeconds: 30

securityContext:

runAsUser: 0

schedulerName: default-scheduler

strategy:

type: RollingUpdate

rollingUpdate:

maxUnavailable: 1

maxSurge: 1

revisionHistoryLimit: 7

progressDeadlineSeconds: 600

 

 

 

 

 

小結-apollo配置中心如何工作的

對應了dubbo-service服務提供者程序中如下2個變量

Register地址代表,服務注冊的zk數據庫地址,

Port代表,monitor探查dubbo-service服務狀態暴露的端口,如果這里改了(dubbo-monitor應當也該改地址)

#相當於以環境變量的方式,在程序啟動時中調用.

在Portal的web界面創建項目,寫入鍵值,相當於在dashboard修改了configmap中的配置

Portal會把數據傳遞給adminservice,adminservice又把數據存到configdb中

在pod的dp中指定獲取數據路徑.指定config.od.com.當刪除重建pod時會在這個地址讀取定義的變量數據

注: 可以在程序中實現apollo監聽器的方法,實現實時監聽apollo配置中心鍵值變化,實時reload生效,達到pod更新配置的效果

不需要,人為刪除pod重啟

 

八、apollo配置中心創建

和dubbo服務提供者一樣.重新制作dubbo-web的harbor鏡像(將配置環境變量化)

gitee-消費者代碼與apollo配置中心連接點

 

 

 

 

創建apollo配置中心

 

提交,再點一下發布

 

 

 

 

 

 

#開始構建

 

 

 

修改dubbo-demo-消費者dp資源清單

再次應用.apollo的配置就在pod里的項目生效了

 

 

 

 

 

 

 

九、實戰使用apollo配置中心管理測試環境和生產環境

 

 

8.1: Zk數據庫添加dns解析

 

 

 

 

8.2: 環境介紹

在實際企業環境,應該將測試環境和生產環境放到2個不同的k8s集群,而不是現在這樣以名稱空間區分

環境

命名空間

應用

測試環境(TEST)

test

apollo-config,apollo-admin,zk1,apolloconfigdb

測試環境(TEST)

test

dubbo-demo-service,dubbo-demo-web

生產環境(PROD)

prod

apollo-config,apollo-admin, apolloconfigdb

生產環境(PROD)

prod

dubbo-demo-service,dubbo-demo-web,zk2

ops環境(infra)--共用

infra

jenkins,dubbo-monitor,apollo-portal

 

 

8.3: 創建測試環境

8.3.1: 環境准備

創建名稱空間和secret

1)首先停掉apollo3兄弟

創建test名稱空間

[root@hdss7-21 ~]# kubectl create ns test

namespace/test created

 

 

#在test名稱空間創建secret資源

[root@hdss7-21 ~]# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=123456 -n test

 

11主機創建apolloconfigdb測試庫

#修改apolloconfig.sql

[root@hdss7-11 ~]# vi apolloconfig.sql

[root@hdss7-11 ~]# mysql -uroot -p <apolloconfig.sql

 

 

查看創建的apolloconfig測試庫

 

#修改數據庫連接eruke信息,

#測試庫使用的地址改一下

MariaDB [ApolloConfigTestDB]> select * from ServerConfig\G;

MariaDB [(none)]> update ApolloConfigTestDB.ServerConfig set ServerConfig.Value="http://config-test.od.com/eureka" where ServerConfig.Key="eureka.service.url";

 

#添加數據庫訪問用戶授權

MariaDB [(none)]> grant SELECT,DELETE,UPDATE,INSERT on ApolloConfigTestDB.* to "apolloconfig"@"10.4.7.%" identified by "123456";

Query OK, 0 rows affected (0.00 sec)

 

 

創建測試環境資源清單目錄

[root@hdss7-200 k8s-yaml]# mkdir -pv test/{apollo-configservice,apollo-adminservice,dubbo-demo-service,dubbo-demo-consumer}

 

8.3.2: 測試環境發布apollo-configservice

 

將資源清單依次拷過來修改

[root@hdss7-200 apollo-configservice]# pwd

/data/k8s-yaml/test/apollo-configservice

[root@hdss7-200 apollo-configservice]# cp /data/k8s-yaml/apollo-configservice/* .

[root@hdss7-200 apollo-configservice]# ls

configmap.yaml deployment.yaml Ingress.yaml service.yaml

 

 

修改資源清單中(所有)

1.名稱空間改為test

2.修改config.od.com地址為config-test.od.com

3. spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloConfigTestDB?characterEncoding

 

應用資源配置清單

kubectl apply -f http://k8s-yaml.od.com/test/apollo-configservice/configmap.yaml

kubectl apply -f http://k8s-yaml.od.com/test/apollo-configservice/deployment.yaml

kubectl apply -f http://k8s-yaml.od.com/test/apollo-configservice/service.yaml

kubectl apply -f http://k8s-yaml.od.com/test/apollo-configservice/Ingress.yaml

 

 

 

 

8.3.3: 在測試環境發布apollo-adminservice

修改資源清單(configmap,dp)

名稱空間改成test

Configmap改:

eureka.service.url = http://config-test.od.com/eureka

spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloConfigTestDB?characterEncoding=utf8

 

應用資源配置清單:

kubectl apply -f http://k8s-yaml.od.com/test/apollo-adminservice/configmap.yaml

kubectl apply -f http://k8s-yaml.od.com/test/apollo-adminservice/deployment.yaml

 

 

 

 

 

 

 

8.3.4: 在測試環境發布dubbo-service

[root@hdss7-200 dubbo-demo-service]# pwd

/data/k8s-yaml/test/dubbo-demo-service

#修改資源清單

[root@hdss7-200 dubbo-demo-service]# vi dp.yaml

namespace: test

value: -Denv=fat -Dapollo.meta=http://config-test.od.com

#應用資源清單

[root@hdss7-21 ~]# kubectl apply -f http://k8s-yaml.od.com/test/dubbo-demo-service/dp.yaml

 

 

 

8.3.5: 在測試環境發布dubbo-cosumer

[root@hdss7-200 dubbo-demo-consumer]# cp /data/k8s-yaml/dubbo-consumer/*.yaml .

修改資源清單

namespace: test (ingress,dp,svc)

value: -Denv=dev -Dapollo.meta=http://config-test.od.com(dp)

- host: demo-test.od.com(ingress)

添加dns解析

demo-test A 10.4.7.10

[root@hdss7-11 ~]# systemctl restart named

 

應用資源配置清單

kubectl apply -f http://k8s-yaml.od.com/test/dubbo-demo-consumer/dp.yaml

kubectl apply -f http://k8s-yaml.od.com/test/dubbo-demo-consumer/svc.yaml

kubectl apply -f http://k8s-yaml.od.com/test/dubbo-demo-consumer/ingress.yaml

 

測試訪問

Demo-test.od.com/hello?name=xiao

 

 

 

 

8.4: 創建生產環境

8.4.1: 環境准備

創建名稱空間和secret

1)首先停掉apollo3兄弟

創建prod名稱空間

[root@hdss7-21 ~]# kubectl create ns prod

namespace/test created

 

 

#在prod名稱空間創建secret資源

[root@hdss7-21 ~]# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=123456 -n prod

 

11主機創建apolloconfigdb生產庫

創建生產環境的configdb

[root@hdss7-11 ~]# mysql -uroot -p <apolloconfig.sql

 

#修改數據庫連接eruke信息,

#生產庫使用的地址改一下

MariaDB [ApolloConfigTestDB]> select * from ServerConfig\G;

MariaDB [(none)]> update ApolloConfigProdDB.ServerConfig set ServerConfig.Value="http://config-prod.od.com/eureka" where ServerConfig.Key="eureka.service.url";

 

#添加數據庫訪問用戶授權

MariaDB [(none)]> grant SELECT,DELETE,UPDATE,INSERT on ApolloConfigProdDB.* to "apolloconfig"@"10.4.7.%" identified by "123456";

Query OK, 0 rows affected (0.00 sec)

創建生產環境資源清單目錄

[root@hdss7-200 k8s-yaml]# mkdir -pv prod/{apollo-configservice,apollo-adminservice,dubbo-demo-service,dubbo-demo-consumer}

 

8.4.2: 生產環境發布apollo-configservice

將資源清單依次拷過來修改

[root@hdss7-200 apollo-configservice]# pwd

/data/k8s-yaml/prod/apollo-configservice

[root@hdss7-200 apollo-configservice]# cp /data/k8s-yaml/test/apollo-configservice/* .

[root@hdss7-200 apollo-configservice]# sed -i 's/test/prod/g' ./* #替換成prod

再將連接的數據庫地址改掉

 

 

應用資源配置清單

kubectl apply -f http://k8s-yaml.od.com/prod/apollo-configservice/configmap.yaml

kubectl apply -f http://k8s-yaml.od.com/prod/apollo-configservice/deployment.yaml

kubectl apply -f http://k8s-yaml.od.com/prod/apollo-configservice/service.yaml

kubectl apply -f http://k8s-yaml.od.com/prod/apollo-configservice/Ingress.yaml

 

 

 

 

8.4.3: 在生產環境發布apollo-adminservice

修改資源清單(configmap,dp)

名稱空間改成prod

Configmap改:

eureka.service.url = http://config-prod.od.com/eureka

spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloConfigProdDB?characterEncoding=utf8

 

[root@hdss7-200 apollo-adminservice]# cp /data/k8s-yaml/test/apollo-adminservice/* .

[root@hdss7-200 apollo-adminservice]# sed -i 's/test/prod/g' ./* #不要這樣改,會把harbor地址改錯

手動修改數據庫地址,域名

 

應用資源配置清單

kubectl apply -f http://k8s-yaml.od.com/prod/apollo-adminservice/configmap.yaml

kubectl apply -f http://k8s-yaml.od.com/prod/apollo-adminservice/deployment.yaml

 

 

8.3.4: 在生產環境發布dubbo-service

 

添加dns解析

demo-prod A 10.4.7.10

[root@hdss7-11 ~]# systemctl restart named

 

修改資源配置清單

[root@hdss7-200 dubbo-demo-service]# cp /data/k8s-yaml/test/dubbo-demo-service/*.yaml .

namespace: prod

value: -Denv=pro -Dapollo.meta=http://apollo-configservice:8080 #此地址對應config-prod.od.com(apollo的service地址)

 

 

 

 

 

 

應用資源配置清單

[root@hdss7-21 ~]# kubectl apply -f http://k8s-yaml.od.com/prod/dubbo-demo-service/dp.yaml

 

 

 

8.3.5: 在生產環境發布dubbo-consumer

[root@hdss7-200 dubbo-demo-consumer]# cp /data/k8s-yaml/test/dubbo-demo-consumer/*.yaml .

 

修改資源配置清單

名稱空間

namespace: prod (ingress,dp,svc)

value: -Denv=pro -Dapollo.meta=http://config-prod.od.com

- host: demo-prod.od.com(ingress)

 

 

 

 

 

應用資源配置清單

 

kubectl apply -f http://k8s-yaml.od.com/prod/dubbo-demo-consumer/dp.yaml

kubectl apply -f http://k8s-yaml.od.com/prod/dubbo-demo-consumer/svc.yaml

kubectl apply -f http://k8s-yaml.od.com/prod/dubbo-demo-consumer/ingress.yaml

 

測試訪問

Demo-prod.od.com/hello?name=xiao

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8.5: 公共部分

刪除ApolloConfigDB

11主機上,mysql

drop database ApolloConfigDB;

 

 

修改portaldb可支持的環境列表

MariaDB [ApolloPortalDB]> use ApolloPortalDB;

MariaDB [ApolloPortalDB]> update ServerConfig set value='fat,pro' where Id=1; #可支持的環境列表修改

 

 

修改apollo-portal的cm資源清單

[root@hdss7-200 apollo-portal]# vi /data/k8s-yaml/apollo-portal/configmap.yaml

修改標黃2行

應用cm資源清單

[root@hdss7-21 ~]# kubectl apply -f http://k8s-yaml.od.com/apollo-portal/configmap.yaml

 

 

 

 

添加dns解析(apollo-service)

 

 

 

刪除apollo-portaldb中的dev項目數據

MariaDB [ApolloPortalDB]> use ApolloPortalDB;

MariaDB [ApolloPortalDB]> truncate table AppNamespace;

MariaDB [ApolloPortalDB]> truncate table App;

 

 

 

 

重新啟動portaldb

 

 

 

Apollo配置中心配置微服務參數—dubbo服務提供者

登錄apollo-potral

系統參數---查詢apollo.portal.envs

 

 

 

 

 

配置apollo-連接dubbo微服務

#檢查admin service資源清單,發現harbor地址被替換錯了

#如果apollo開啟之前,項目創建有問題,需要刪除重建

 

 

 

 

 

 

添加測試環境參數

#添加對應環境的參數,添加完后點發布再編輯生產環境

 

 

 

 

#生產環境參數發布

 

 

 

 

Apollo配置中心配置微服務參數—dubbo服務消費者

創建項目

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

十、新代碼發版

Gitee提交消費者更改代碼

 

jenkins發布

修改測試環境消費者dp資源配置文件使用新版鏡像

測試環境測試新版鏡像,如果正常可以訪問

再將生產環境消費者dp資源配置文件使用新版鏡像(用測試環境做的鏡像包)

 

 

 

 

故障排查

1. dubbo的3個組件,提供者,消費者,發現者,他們通信的端口,zk地址需要保證一致性

2. dubbo的3個組件的啟動順序需要注意,monitor需要在后啟動,不然在web界面容易發現不了其他2個組件

3.apollo記得把之前的apolloconfigdb刪掉,其他配置要記得檢查

4. dubbo-monitor網站打不開,一定是zookeeper宕了.

5. 所有的問題都排查過了,發現dashboard上刪除掉的dp,在k8s上居然沒被刪掉

6.啟動順序,zk,portal,數據庫,apolloservice,apolloadmin,dubboservice,dubboconsumer

7.最好使用kubectl來初始啟動集群


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM