栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

k8s上构建apollo配置中心

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

k8s上构建apollo配置中心

(一). apollo配置中心
  • config
    • 提供配置的读取和推送功能
  • admin
    • 提供配置的修改和发布功能
  • portal
    • 管理界面
  • 多个分环境中,每个环境需要admin和config组件,而portal组件有一个就可以了
(二). mariadb

参考

vim /etc/yum.repo.d/MariaDB.repo

[mariadb]
name = MariaDB
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.3/centos7-amd64/
gpgkey =  http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
yum install MariaDB-server MariaDB-client -y
1. 配置
# 在[mysqld]中加入以下配置
vim /etc/my.cnf.d/server.cnf

[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
init_connect = "SET NAMES 'utf8mb4'"
# 在[mysql]中加入以下配置
vim /etc/my.cnf.d/mysql-clients.cnf

[mysql]
default-character-set = utf8mb4

# restart mariadb
systemctl restart mariadb;systemctl enable mariadb
2. 检查
# 配置密码
mysqladmin -uroot password

# 登录 mariadb

# 检查是否都是 utf-8mb4,输入s
s
Server characterset:	utf8mb4
Db     characterset:	utf8mb4
Client characterset:	utf8mb4
Conn.  characterset:	utf8mb4

# 删除没用的库
drop database test;

# 检查是否起来
netstat -tnulp |grep 3306
3. configDB

configDB初始化

wget https://raw.githubusercontent.com/apolloconfig/apollo/1.5.1/scripts/db/migration/configdb/V1.0.0__initialization.sql -O apollo-configdb.sql

# 初始化
mysql -uroot -p < apollo-configdb.sql

# 检查是否有ApolloConfigDB库

# 给用户和库授权
grant INSERT,DELETE,UPDATE,SELECT on ApolloConfigDB.* to "apolloconfig"@"10.4.7.%" identified by "123456";

# 查看用户
select user,host from mysql.user;
+--------------+--------------+
| user         | host         |
+--------------+--------------+
| apolloconfig | 10.4.7.%     |
| root         | 127.0.0.1    |
| root         | ::1          |
|              | keepalived02 |
| root         | keepalived02 |
|              | localhost    |
| root         | localhost    |
+--------------+--------------+
7 rows in set (0.002 sec)


# 优化表,将http://localhost:8080/eureka/改为自己的url便于访问
use ApolloConfigDB;
select * from ServerConfigG
update ApolloConfigDB.ServerConfig set ServerConfig.Value="http://config.xg.com/eureka" where ServerConfig.Key="eureka.service.url";


# 再次查看
select * from ServerConfigG
*************************** 1. row ***************************
                       Id: 1
                      Key: eureka.service.url
                  Cluster: default
                    Value: http://confg.xg.com/eureka
                  Comment: Eureka服务Url,多个service以英文逗号分隔
                IsDeleted:  
     DataChange_CreatedBy: default
   DataChange_CreatedTime: 2021-09-26 22:34:52
DataChange_LastModifiedBy: 
      DataChange_LastTime: 2021-09-26 22:53:54
# 测试可以连接上不,如果连接不上,删除了掉user空的用户,然后一定要flush privileges;
use mysql;
delete from user where User='';
flush privileges;
1. DNS
# keepalived01上配置mysql的DNS
$ORIGIN xg.com.
$TTL 600        ; 10 minutes
@               IN SOA dns.xg.com. dnsadmin.xg.com. (
                               2021091309 ; serial
                               10800      ; refresh (3 hours)
                               900        ; retry (15 minutes)
                               604800     ; expire (1 week)
                               86400      ; minimum (1 day)
                               )
                               NS   dns.xg.com.
$TTL 60 ; 1 minute
dns                A   10.4.7.11
harbor             A   10.4.7.200
k8s-yaml           A   10.4.7.200
traefik            A   10.4.7.10
dashboard          A   10.4.7.10
zk1                A   10.4.7.11
zk2                A   10.4.7.12
zk3                A   10.4.7.21
jenkins            A   10.4.7.10
config             A   10.4.7.10
mysql              A   10.4.7.11
dig -t A mysql.xg.com @10.4.7.11 +short
4. portalDB

portalDB初始化

  • keepalived01上
wget https://raw.githubusercontent.com/apolloconfig/apollo/1.5.1/scripts/db/migration/portaldb/V1.0.0__initialization.sql -O apollo-portal.sql
mysql -uroot -p

# 初始化
source /root/apollo-portal.sql

show databases;
+--------------------+
| Database           |
+--------------------+
| ApolloConfigDB     |
| ApolloPortalDB     |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

# 用户授权
grant INSERT,DELETe,UPDATE,SELECT on ApolloPortalDB.* to "apolloportal"@"10.4.7.%" identified by "123456";

select user,host from mysql.user;
+--------------+--------------+
| user         | host         |
+--------------+--------------+
| apolloconfig | 10.4.7.%     |
| apolloportal | 10.4.7.%     |
| root         | 127.0.0.1    |
| root         | ::1          |
| root         | keepalived01 |
| root         | localhost    |
+--------------+--------------+



# 修改数据
use ApolloPortalDB;
select * from ServerConfigG;
update ApolloPortalDB.ServerConfig set Value='[{"orgId":"dev","orgName":"研发部"},{"orgId":"ops","orgName":"运维部"}]' where Id=2;

# 再查
select * from ServerConfigG;
*************************** 2. row ***************************
                       Id: 2
                      Key: organizations
                    Value: [{"orgId":"dev","orgName":"研发部"},{"orgId":"ops","orgName":"运维部"}]
                  Comment: 部门列表
                IsDeleted:  
     DataChange_CreatedBy: default
   DataChange_CreatedTime: 2021-10-02 21:55:16
DataChange_LastModifiedBy: 
      DataChange_LastTime: 2021-10-02 22:06:40
      
#
flush privileges;
(三). config service
  • 必须先将config service先建立好然后才能建立admin service

  • k8s-manage上

官网参考

mkdir /data/dockerfile/apollo-configservice && cd /data/dockerfile/apollo-configservice
wget https://github.com/apolloconfig/apollo/releases/download/v1.5.1/apollo-configservice-1.5.1-github.zip

unzip apollo-configservice-1.5.1-github.zip

# 删除源码包
rm apollo-configservice-1.5.1-sources.jar -f

# 查看
ll
-rwxr-xr-x 1 root root 61991736 11月  9 2019 apollo-configservice-1.5.1.jar
-rw-r--r-- 1 root root       57 4月  20 2017 apollo-configservice.conf
drwxr-xr-x 2 root root       65 10月  2 10:09 config
drwxr-xr-x 2 root root       43 10月  1 2019 scripts


# 修改数据库配置
cd config
vim application-github.properties
# DataSource
spring.datasource.url = jdbc:mysql://mysql.xg.com:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = apolloconfig
spring.datasource.password = 123456


#apollo.eureka.server.enabled=true
#apollo.eureka.client.enabled=true

# 修改startup.sh,做了一些修改
# 参考地址: https://github.com/apolloconfig/apollo/blob/1.5.1/scripts/apollo-on-kubernetes/apollo-config-server/scripts/startup-kubernetes.sh

cd ../scripts
vim startup.sh

#!/bin/bash
SERVICE_NAME=apollo-configservice
## Adjust log dir if necessary
LOG_DIR=/opt/logs/apollo-config-server
## Adjust server port if necessary
SERVER_PORT=8080

# 添加了一行APPLLO_CONFIG_SERVICE_NAME
APOLLO_CONFIG_SERVICE_NAME=$(hostname -i)
SERVER_URL="http://${APOLLO_CONFIG_SERVICE_NAME}:${SERVER_PORT}"

# java资源的修改,测试不用给那么大 
## 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:+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
1. 制作镜像
  • 制作的是apollo的基础镜像
cd /data/dockerfile/apollo-configservice

# 可以删掉shutdown.sh,因为在容器中使用,不需要关闭的命令
# docker pull stanleyws/jre8:8u112

FROM harbor.xg.com/public/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"]
docker build . -t harbor.xg.com/infra/apollo-configservice:v1.5.1
docker push harbor.xg.com/infra/apollo-configservice:v1.5.1
2. 配置清单
  • k8s-manage
# 
mkdir /data/k8s-yaml/apollo-configservice && cd /data/k8s-yaml/apollo-configservice
1. deploy
kind: Deployment
apiVersion: apps/v1
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.xg.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: Always
      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
2. cm
apiVersion: v1
kind: ConfigMap
metadata:
  name: apollo-configservice-cm
  namespace: infra
data:
  application-github.properties: |
    # DataSource
    spring.datasource.url = jdbc:mysql://mysql.xg.com:3306/ApolloConfigDB?characterEncoding=utf8
    spring.datasource.username = apolloconfig
    spring.datasource.password = 123456
    eureka.service.url = http://config.xg.com/eureka
  app.properties: |
    appId=100003171
3. svc
kind: Service
apiVersion: v1
metadata: 
  name: apollo-configservice
  namespace: infra
spec:
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
  selector: 
    app: apollo-configservice
4. ing
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: apollo-configservice
  namespace: infra
spec:
  rules:
  - host: config.xg.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: apollo-configservice
          servicePort: 8080
# 访问
curl config.xg.com
3. 验证
# 所有的资源起来,进入数据库看数据库的连接
show processlist;

# curl
curl config.xg.com
(四). admin service
  • k8s-manage上
# 下载地址
wget https://github.com/apolloconfig/apollo/releases/download/v1.5.1/apollo-adminservice-1.5.1-github.zip
1. 启动脚本

官网参考

# 创建
madir /data/dockerfile/apollo-adminservice && cd /data/dockerfile/apollo-adminservice

wget https://github.com/apolloconfig/apollo/releases/download/v1.5.1/apollo-adminservice-1.5.1-github.zip

unzip apollo-adminservice-1.5.1-github.zip
rm apollo-adminservice-1.5.1-sources.jar  -f
cd scripts/
rm shutdown.sh -f

vim startup.sh
# 修改修改了端口为8080 和 APOLLO_ADMIN_SERVICE_NAME
#!/bin/bash
SERVICE_NAME=apollo-adminservice
## Adjust log dir if necessary
LOG_DIR=/opt/logs/apollo-admin-server
## Adjust server port if necessary
SERVER_PORT=8080

# SERVER_URL="http://localhost:${SERVER_PORT}"
APOLLO_ADMIN_SERVICE_NAME=$(hostname -i)
SERVER_URL="http://${APOLLO_ADMIN_SERVICE_NAME}:${SERVER_PORT}"

## Adjust memory settings if necessary
export JAVA_OPTS="-Xms256m -Xmx256m -Xss256k -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=384m -XX:NewSize=512m -XX:MaxNewSize=512m -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:+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
2. 制作镜像
cd /data/dockerfile/apollo-adminservice
vim Dockerfile

FROM stanleyws/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 ["/bin/bash","/apollo-adminservice/scripts/startup.sh"]
docker build . -t harbor.xg.com/infra/apollo-adminservice:v1.5.1
docker push harbor.xg.com/infra/apollo-adminservice:v1.5.1
3. 配置清单
mkdir /data/k8s-yaml/apollo-adminservice && cd /data/k8s-yaml/apollo-adminservice
1. deploy
kind: Deployment
apiVersion: apps/v1
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.xg.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: Always
      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
2. cm
# 注意appId不能和service一样
apiVersion: v1
kind: ConfigMap
metadata:
  name: apollo-adminservice-cm
  namespace: infra
data:
  application-github.properties: |
    # DataSource
    spring.datasource.url = jdbc:mysql://mysql.xg.com:3306/ApolloConfigDB?characterEncoding=utf8
    spring.datasource.username = apolloconfig
    spring.datasource.password = 123456
    eureka.service.url = http://config.xg.com/eureka
  app.properties: |
    appId=100003172
4. 验证
# 所有的资源起来,在查看数据库连接
show processlist;

# curl
curl ${pod_ip}:8080/info

# apollo组件admin 和 config都可以扩容,config虽然绑定了erueka,但是config有高可用机制,可自动做集群,而admin随便扩缩就行,他们两个都是无状态的应用,扩缩容要先操作admin,然后操作config 
(五). portal
  • k8s-manage上
mkdir 
# 组件下载
wget https://github.com/apolloconfig/apollo/releases/download/v1.5.1/apollo-portal-1.5.1-github.zip


unzip -o apollo-portal-1.5.1-github.zip -d /data/dockerfile/apollo-portal
cd /data/dockerfile/apollo-portal
rm apollo-portal-1.5.1-sources.jar -f
rm scripts/shutdown.sh -f
1. 启动脚本

官网参考

cd /data/dockerfile/apollo-portal/scripts

# start.sh还是加了APOLLO_PORTAL_SERVICE_NAME
vim start.sh

#!/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

# SERVER_URL="http://localhost:$SERVER_PORT"
APOLLO_PORTAL_SERVICE_NAME=$(hostname -i)
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:+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
2. 制作镜像
cd /data/dockerfile/apollo-portal
vim Dockerfile

FROM stanleyws/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 ["/bin/bash","/apollo-portal/scripts/startup.sh"]
docker build . -t harbor.xg.com/infra/apollo-portal:v1.5.1
docker push harbor.xg.com/infra/apollo-portal:v1.5.1
madir /data/k8s-yaml/apollo-portal && cd /data/k8s-yaml/apollo-portal
3. 配置清单 1. cm
apiVersion: v1
kind: ConfigMap
metadata:
  name: apollo-adminservice-cm
  namespace: infra
data:
  application-github.properties: |
    # DataSource
    spring.datasource.url = jdbc:mysql://mysql.xg.com:3306/ApolloPortalDB?characterEncoding=utf8
    spring.datasource.username = apolloportal
    spring.datasource.password = 123456
  app.properties: |
    appId=100003173
  apollp-env.properties: |
    dev.meta=http://config.xg.com
2. deploy
kind: Deployment
apiVersion: apps/v1
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.xg.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: Always
      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
3. svc
kind: Service
apiVersion: v1
metadata: 
  name: apollo-portal
  namespace: infra
spec:
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
  selector: 
    app: apollo-portal
4. ing
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: apollo-portal
  namespace: infra
spec:
  rules:
  - host: portal.xg.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: apollo-portal
          servicePort: 8080
4. DNS
$ORIGIN xg.com.
$TTL 600        ; 10 minutes
@               IN SOA dns.xg.com. dnsadmin.xg.com. (
                               2021091310 ; serial
                               10800      ; refresh (3 hours)
                               900        ; retry (15 minutes)
                               604800     ; expire (1 week)
                               86400      ; minimum (1 day)
                               )
                               NS   dns.xg.com.
$TTL 60 ; 1 minute
dns                A   10.4.7.11
harbor             A   10.4.7.200
k8s-yaml           A   10.4.7.200
traefik            A   10.4.7.10
dashboard          A   10.4.7.10
zk1                A   10.4.7.11
zk2                A   10.4.7.12
zk3                A   10.4.7.21
jenkins            A   10.4.7.10
config             A   10.4.7.10
mysql              A   10.4.7.11
portal             A   10.4.7.10
# restart
systemctl restart named

dig -t A portal.xg.com +short

# 保证资源起来,然后浏览器访问portal.xg.com
默认用户名: apollo
默认密码: admin
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298294.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号