先安装mysql,版本须在5.6以上:

[root@hdss7-11 yum.repos.d]# cat 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

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

[root@hdss7-11 yum.repos.d]# yum install MariaDB-server -y

修改mysql配置文件:

[mysqld]

character_set_server = utf8mb4

collation_server = utf8mb4_general_ci

init_connect = "SET NAMES 'utf8mb4'"

[mysql]

default-character-set = utf8mb4


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

[root@hdss7-11 ~]# systemctl enable mariadb

Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.

Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.

Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

[root@hdss7-11 ~]# mysqladmin -u root password

New password:123456

Confirm new password:123456

执行数据库初始化脚本:

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

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

Enter password:

[root@hdss7-11 ~]# mysql -uroot -p

Enter password:

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

Your MariaDB connection id is 4

Server version: 10.1.44-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)]> show databases;

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

| Database           |

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

| ApolloConfigDB     |

| information_schema |

| mysql              |

| performance_schema |

| test               |

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

5 rows in set (0.00 sec)


MariaDB [(none)]>

数据库用户授权:

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

Query OK, 0 rows affected (0.00 sec)

修改初始数据:

MariaDB [ApolloConfigDB]> 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

制作apollo镜像;

[root@hdss7-200 ~]# unzip /tmp/apollo-configservice-1.5.1-github.zip -d /data/dockerfile/apollo-configservice

Archive:  /tmp/apollo-configservice-1.5.1-github.zip

   creating: /data/dockerfile/apollo-configservice/scripts/

  inflating: /data/dockerfile/apollo-configservice/config/application-github.properties

  inflating: /data/dockerfile/apollo-configservice/scripts/shutdown.sh

  inflating: /data/dockerfile/apollo-configservice/apollo-configservice-1.5.1-sources.jar

  inflating: /data/dockerfile/apollo-configservice/config/app.properties

  inflating: /data/dockerfile/apollo-configservice/apollo-configservice-1.5.1.jar

  inflating: /data/dockerfile/apollo-configservice/scripts/startup.sh

  inflating: /data/dockerfile/apollo-configservice/apollo-configservice.conf

修改配置文件:

[root@hdss7-200 apollo-configservice]# cat config/application-github.properties

# DataSource

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

spring.datasource.username = apolloconfig

spring.datasource.password = 123456

配置启动脚本:

[root@hdss7-200 apollo-configservice]# cat scripts/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

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:+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

配置dockerfile:

[root@hdss7-200 apollo-configservice]# cat 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-configservice-${VERSION}.jar /apollo-configservice/apollo-configservice.jar

ADD config/ /apollo-configservice/config

ADD scripts/ /apollo-configservice/scripts


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

制作镜像,提交到私有仓库:

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

Sending build context to Docker daemon  61.91MB

Step 1/7 : FROM stanleyws/jre8:8u112

 ---> fa3a085d6ef1

Step 2/7 : ENV VERSION 1.5.1

 ---> Running in e3309a36ed3a

Removing intermediate container e3309a36ed3a

 ---> e7dba3cc18a2

Step 3/7 : RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&    echo "Asia/Shanghai" > /etc/timezone

 ---> Running in 693eb1844ceb

Removing intermediate container 693eb1844ceb

 ---> 02334a0914ba

Step 4/7 : ADD apollo-configservice-${VERSION}.jar /apollo-configservice/apollo-configservice.jar

 ---> bc08958eb68c

Step 5/7 : ADD config/ /apollo-configservice/config

 ---> f113abb450fa

Step 6/7 : ADD scripts/ /apollo-configservice/scripts

 ---> 7b7c95e8d692

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

 ---> Running in fcf85bc1d5a4

Removing intermediate container fcf85bc1d5a4

 ---> 5f0d58ddafaf

Successfully built 5f0d58ddafaf

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

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

The push refers to repository [harbor.od.com/infra/apollo-configservice]

84681097ebe9: Pushed

a65195eceef6: Pushed

ba58ab0a19a9: Pushed

2926ce5255e9: Pushed

0690f10a63a5: Mounted from base/jre8

c843b2cf4e12: Mounted from base/jre8

fddd8887b725: Mounted from base/jre8

42052a19230c: Mounted from base/jre8

8d4d1ab5ff74: Mounted from base/jre8

v1.5.1: digest: sha256:5af48041da85f529e479b0309dd6c4e5921ec71ffad52ad96ca9cdda34a14994 size: 2201

准备资源配置清单:

[root@hdss7-200 k8s-yaml]# mkdir /data/k8s-yaml/apollo-configservice

[root@hdss7-200 apollo-configservice]# cat cm.yaml

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

[root@hdss7-200 apollo-configservice]# cat dp.yaml

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

[root@hdss7-200 apollo-configservice]# cat svc.yaml

kind: Service

apiVersion: v1

metadata:

  name: apollo-configservice

  namespace: infra

spec:

  ports:

  - protocol: TCP

    port: 8080

    targetPort: 8080

  selector:

    app: apollo-configservice

[root@hdss7-200 apollo-configservice]# cat ingress.yaml

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


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

configmap/apollo-configservice-cm created

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

deployment.extensions/apollo-configservice created

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

service/apollo-configservice created

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

ingress.extensions/apollo-configservice created

k8s集群部署Apollo分布式配置中心_第1张图片



admin-service制作镜像:

[root@hdss7-200 tmp]# mkdir /data/dockerfile/apollo-adminservice

[root@hdss7-200 tmp]# unzip -o apollo-adminservice-1.5.1-github.zip -d /data/dockerfile/apollo-adminservice

Archive:  apollo-adminservice-1.5.1-github.zip

   creating: /data/dockerfile/apollo-adminservice/scripts/

  inflating: /data/dockerfile/apollo-adminservice/config/app.properties

  inflating: /data/dockerfile/apollo-adminservice/apollo-adminservice-1.5.1-sources.jar

  inflating: /data/dockerfile/apollo-adminservice/scripts/shutdown.sh

  inflating: /data/dockerfile/apollo-adminservice/apollo-adminservice.conf

  inflating: /data/dockerfile/apollo-adminservice/scripts/startup.sh

  inflating: /data/dockerfile/apollo-adminservice/config/application-github.properties

  inflating: /data/dockerfile/apollo-adminservice/apollo-adminservice-1.5.1.jar

[root@hdss7-200 tmp]# cd /data/dockerfile/apollo-adminservice

修改启动脚本:

[root@hdss7-200 apollo-adminservice]# cat scripts/startup.sh

#!/bin/bash

SERVICE_NAME=apollo-adminservice

## Adjust log dir if necessary

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

## Adjust server port if necessary

ERVER_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"

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


[root@hdss7-200 apollo-adminservice]# cat 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 ["/apollo-adminservice/scripts/startup.sh"]


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

Sending build context to Docker daemon  58.28MB

Step 1/7 : FROM stanleyws/jre8:8u112

 ---> fa3a085d6ef1

Step 2/7 : ENV VERSION 1.4.0

 ---> Using cache

 ---> e7dba3cc18a2

Step 3/7 : RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&    echo "Asia/Shanghai" > /etc/timezone

 ---> Using cache

 ---> 02334a0914ba

Step 4/7 : ADD apollo-adminservice-${VERSION}.jar /apollo-adminservice/apollo-adminservice.jar

 ---> Using cache

 ---> ebe1b6fa4051

Step 5/7 : ADD config/ /apollo-adminservice/config

 ---> Using cache

 ---> de0a9b42f4cd

Step 6/7 : ADD scripts/ /apollo-adminservice/scripts

 ---> Using cache

 ---> 0142e6d8bb1d

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

 ---> Using cache

 ---> 9b50680234da

Successfully built 9b50680234da

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

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

The push refers to repository [harbor.od.com/infra/apollo-adminservice]

c5f4771429e2: Pushed

18881088d258: Pushed

fb27303e830e: Pushed

2926ce5255e9: Mounted from infra/apollo-configservice

0690f10a63a5: Mounted from infra/apollo-configservice

c843b2cf4e12: Mounted from infra/apollo-configservice

fddd8887b725: Mounted from infra/apollo-configservice

42052a19230c: Mounted from infra/apollo-configservice

8d4d1ab5ff74: Mounted from infra/apollo-configservice

准备资源配置清单:

mkdir -p /data/k8s-yaml/apollo-adminservice

cd /data/k8s-yaml/apollo-adminservice

[root@hdss7-200 apollo-adminservice]# cat cm.yaml

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

[root@hdss7-200 apollo-adminservice]# cat dp.yaml

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

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

configmap/apollo-adminservice-cm created

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

deployment.extensions/apollo-adminservice created

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

NAME                                   READY   STATUS    RESTARTS   AGE

apollo-adminservice-5d59584f76-6pf4c   1/1     Running   0          28s

k8s集群部署Apollo分布式配置中心_第2张图片

部署potal:

[root@hdss7-200 dockerfile]# mkdir /data/dockerfile/apollo-portal

[root@hdss7-200 dockerfile]# cd /data/dockerfile/apollo-portal

[root@hdss7-200 apollo-portal]# ll

总用量 0

[root@hdss7-200 apollo-portal]# cd /tmp/

[root@hdss7-200 tmp]# unzip -o apollo-portal-1.5.1-github.zip -d /data/dockerfile/apollo-portal/

Archive:  apollo-portal-1.5.1-github.zip

   creating: /data/dockerfile/apollo-portal/scripts/

  inflating: /data/dockerfile/apollo-portal/apollo-portal.conf

  inflating: /data/dockerfile/apollo-portal/apollo-portal-1.5.1.jar

  inflating: /data/dockerfile/apollo-portal/scripts/startup.sh

  inflating: /data/dockerfile/apollo-portal/config/apollo-env.properties

  inflating: /data/dockerfile/apollo-portal/scripts/shutdown.sh

  inflating: /data/dockerfile/apollo-portal/config/app.properties

  inflating: /data/dockerfile/apollo-portal/apollo-portal-1.5.1-sources.jar

  inflating: /data/dockerfile/apollo-portal/config/application-github.properties

[root@hdss7-200 tmp]# cd /data/dockerfile/apollo-portal/

[root@hdss7-200 apollo-portal]# ll

总用量 42512

-rwxr-xr-x 1 root root 42342196 11月  9 23:22 apollo-portal-1.5.1.jar

-rwxr-xr-x 1 root root  1183429 11月  9 23:22 apollo-portal-1.5.1-sources.jar

-rw-r--r-- 1 root root       57 4月  20 2017 apollo-portal.conf

drwxr-xr-x 2 root root       94 4月   5 10:52 config

drwxr-xr-x 2 root root       43 10月  1 2019 scripts

[root@hdss7-200 apollo-portal]# rm -rf apollo-portal-1.5.1-sources.jar

[root@hdss7-200 apollo-portal]# cat scripts/startup.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

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"

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

[root@hdss7-200 apollo-portal]# cat 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 ["/apollo-portal/scripts/startup.sh"]

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

Sending build context to Docker daemon  42.35MB

Step 1/7 : FROM stanleyws/jre8:8u112

 ---> fa3a085d6ef1

Step 2/7 : ENV VERSION 1.5.1

 ---> Using cache

 ---> 1e288e4183c8

Step 3/7 : RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&    echo "Asia/Shanghai" > /etc/timezone

 ---> Using cache

 ---> fdc7f451bd52

Step 4/7 : ADD apollo-portal-${VERSION}.jar /apollo-portal/apollo-portal.jar

 ---> 02dd786cdcca

Step 5/7 : ADD config/ /apollo-portal/config

 ---> 0b721f45d0c1

Step 6/7 : ADD scripts/ /apollo-portal/scripts

 ---> 4fc39046012c

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

 ---> Running in 8b314c570e3b

Removing intermediate container 8b314c570e3b

 ---> 2a7e76b5aa92

Successfully built 2a7e76b5aa92

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

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

The push refers to repository [harbor.od.com/infra/apollo-portal]

34b135f57907: Pushed

c6f03d07ec31: Pushed

8288875b658b: Pushed

0cf4dc1cf956: Mounted from infra/apollo-configservice

0690f10a63a5: Mounted from infra/apollo-adminservice

c843b2cf4e12: Mounted from infra/apollo-adminservice

fddd8887b725: Mounted from infra/apollo-adminservice

42052a19230c: Mounted from infra/apollo-adminservice


portal数据库初始化:

[root@hdss7-11 ~]# wget https://raw.githubusercontent.com/ctripcorp/apollo/master/scripts/sql/apolloportaldb.sql -o apolloportal.sql

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

Enter password:

[root@hdss7-11 ~]# mysql -uroot -p

Enter password:

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

Your MariaDB connection id is 591

Server version: 10.1.44-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)]> show databases;

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

| Database           |

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

| ApolloConfigDB     |

| ApolloPortalDB     |

| information_schema |

| mysql              |

| performance_schema |

| test               |

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

6 rows in set (0.00 sec)


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;

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

| 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]> grant INSERT,DELETE,UPDATE,SELECT on ApolloPortalDB.* to "apolloportal"@"10.4.7.%" identified by "123456";

MariaDB [ApolloPortalDB]> update ServerConfig set Value='[{"orgId":"od01","orgName":"Linux"},{"orgId":"od02","orgName":"云计算"},{"orgId":"od03","orgName":"Python"}]' where Id=2;Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

配置内网域名解析:

[root@hdss7-11 ~]# cat /var/named/od.com.zone

$ORIGIN od.com.

$TTL 600 ; 10 minutes

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

2019111012 ; 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    10.4.7.11

harbor             A    10.4.7.200

k8s-yaml           A    10.4.7.200

traefik            A    10.4.7.11

dashboard          A    10.4.7.11

zk1                A    10.4.7.11

zk2                A    10.4.7.12

zk3                A    10.4.7.21

jenkins            A    10.4.7.11

dubbo-monitor      A    10.4.7.11

demo               A    10.4.7.11

config             A    10.4.7.11

mysql              A    10.4.7.11

portal             A    10.4.7.11

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

[root@hdss7-11 ~]# dig portal.od.com +short

10.4.7.11

准备资源配置清单:

[root@hdss7-200 apollo-portal]# cat cm.yaml

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

[root@hdss7-200 apollo-portal]# cat dp.yaml

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

[root@hdss7-200 apollo-portal]# cat svc.yaml

kind: Service

apiVersion: v1

metadata:

  name: apollo-portal

  namespace: infra

spec:

  ports:

  - protocol: TCP

    port: 8080

    targetPort: 8080

  selector:

    app: apollo-portal

[root@hdss7-200 apollo-portal]# cat ingress.yaml

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

应用资源配置清单:

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

configmap/apollo-portal-cm created

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

deployment.extensions/apollo-portal created

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

service/apollo-portal created

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

ingress.extensions/apollo-portal created

k8s集群部署Apollo分布式配置中心_第3张图片

用户名:apollo

密码:admin

点击创建项目:

k8s集群部署Apollo分布式配置中心_第4张图片

k8s集群部署Apollo分布式配置中心_第5张图片

至此apollo部署成功