zoukankan      html  css  js  c++  java
  • kubernetes实战-配置中心(二)交付apollo配置中心到k8s

    apollo官网:官方地址

    apollo架构图:

    apollo需要使用数据库,这里使用mysql,注意版本需要在5.6以上:

    本次环境mysql部署在10.4.7.11上,使用mariadb:10.1以上版本

    # 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

    导入key:

    # rpm --import https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
    # yum install MariaDB-server -y

    简单配置mysql:

    # vi /etc/my.cnf.d/server.cnf
    [mysqld]
    character_set_server = utf8mb4
    collation_server = utf8mb4_general_ci
    init_connect = "SET NAMES 'utf8mb4'"
    # vi /etc/my.cnf.d/mysql-clients.cnf
    [mysql]
    default-character-set = utf8mb4
    # systemctl start mariadb
    # systemctl enable mariadb
    # mysqladmin -u root password 

    登录检查字符集:

    # mysql -uroot -p
    > s

     执行数据库初始化脚本:configdb初始化脚本

    下载脚本:

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

    执行初始化脚本:

    # mysql -uroot -p < apolloconfig.sql

    检查数据库:

     给数据库授权:

    # grant INSERT,DELETE,UPDATE,SELECT on ApolloConfigDB.* to 'apolloconfig'@'10.4.7.%'  identified by "123456";

     修改初始化数据:

    > update ServerConfig set Value='http://config.od.com/eureka' where Id=1;
    也可以使用下面的sql:执行一个即可
     > update ApolloConfigDB.ServerConfig set ServerConfig.Value="http://config.od.com/eureka" where ServerConfig.Key="eureka.service.url";

    添加config域名解析:

    # vi /var/named/od.com.zone
    # systemctl restart named

    测试域名解析:

    # dig  -t A config.od.com @10.4.7.11 +short

    交付顺序:

      1、apolloconfigservice

      2、adminservice

      3、portal

    下载apolloconfigservice的包:放到200上,制作镜像

    # wget https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-configservice-1.5.1-github.zip
    # mkdir /data/dockerfile/apollo-configservice
    # unzip -o apollo-configservice-1.5.1-github.zip -d /data/dockerfile/apollo-configservice/
    # cd /data/dockerfile/apollo-configservice/

    修改连接数据库配置:

    # cd config
    # vi application-github.properties

     添加mysql.od.com域名解析:

     修改启动脚本:

    # cd scripts/
    # vi startup.sh

    将官网上的startup.sh内容替换进来 脚本地址

     添加一行:

    APOLLO_CONFIG_SERVICE_NAME=$(hostname -i)

    自行优化JVM

    添加执行权限:

    # chmod u+x startup.sh

    编写dockerfile:  官方地址

    # cd ..
    # vi Dockerfile
    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"]
    # docker build . -t harbor.od.com/infra/apollo-configservice:v1.5.1
    # docker push harbor.od.com/infra/apollo-configservice:v1.5.1

    编写资源配置清单:

    # cd /data/k8s-yaml/
    # mkdir apollo-configservice
    # cd apollo-configservice

    1、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

    2、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

    3、svc.yaml

    kind: Service
    apiVersion: v1
    metadata: 
      name: apollo-configservice
      namespace: infra
    spec:
      ports:
      - protocol: TCP
        port: 8080
        targetPort: 8080
      selector: 
        app: apollo-configservice

    4、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

    应用资源配置清单:

    # kubectl create -f http://k8s-yaml.od.com/apollo-configservice/cm.yaml
    # kubectl create -f http://k8s-yaml.od.com/apollo-configservice/dp.yaml
    # kubectl create -f http://k8s-yaml.od.com/apollo-configservice/svc.yaml
    # kubectl create -f http://k8s-yaml.od.com/apollo-configservice/ingress.yaml

    检查启动情况:

     

     

     需要等到eureka启动以后才可以,接下来使用浏览器访问config.od.com:

    下载adminservice:官方地址 放在200上

    # wget https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-adminservice-1.5.1-github.zip
    # mkdir /data/dockerfile/apollo-adminservice
    # unzip -o apollo-adminservice-1.5.1-github.zip -d /data/dockerfile/apollo-adminservice/
    # cd /data/dockerfile/apollo-adminservice/

    由于使用了configmap资源将配置文件挂载出来了,所以不在修改配置文件,如需修改配置文件,请参考部署apollo-configservice时候的修改方法:

    修改startup.sh:  官方地址

    将端口修改为:8080

    添加以下一项配置:

    APOLLO_ADMIN_SERVICE_NAME=$(hostname -i)

    制作dockerfile:

    # vi 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"]

    制作资源配置清单:

    # mkdir /data/k8s-yaml/apollo-adminservice && cd /data/k8s-yaml/apollo-adminservice 

    1、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

    2、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

    应用资源配置清单:

    # kubectl create -f http://k8s-yaml.od.com/apollo-adminservice/cm.yaml
    # kubectl create -f http://k8s-yaml.od.com/apollo-adminservice/dp.yaml

     通过日志检查启动情况:

     通过config.od.com检查是否注册到了eureka:

     已经顺利的注册到了注册中心中。

    接下来交付portal:官方地址  200上下载并制作镜像

    # wget https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-portal-1.5.1-github.zip
    
    # mkdir /data/dockerfile/apollo-portal
    # unzip -o apollo-portal-1.5.1-github.zip -d /data/dockerfile/apollo-portal/
    # cd /data/dockerfile/apollo-portal/

    由于portal使用的是另一个portaldb,我们需要在数据库中新建portdb,并初始化:初始化脚本

    在7-21上下载下来脚本:

    # wget https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/db/migration/portaldb/V1.0.0__initialization.sql -O apollo-portal.sql
    # mysql -uroot -p
    ]> source ./apollo-portal.sq

    创建用户并授权:

    # grant INSERT,DELETE,UPDATE,SELECT on ApolloPortalDB.* to "apolloportal"@"10.4.7.%" identified by "123456";

    修改数据库:

    创建部门:

    ]> update ServerConfig set Value='[{"orgId":"od01","orgName":"Linux学院"},{"orgId":"od02","orgName":"云计算学院"},{"orgId":"od03","orgName":"Python学院"}]' where Id=2;

     由于使用concigmap资源,故之做介绍,不在这里修改:

    配置portal meta serice:

    这里列出的是支持的环境列表配置:

    # vi /data/dockerfile/apollo-portal/config/apollo-env.properties

     修改startup.sh 官方地址

    修改端口为8080

    添加以下配置项:

    APOLLO_PORTAL_SERVICE_NAME=$(hostname -i)

    制作dockerfile:

    # vi 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"]
    # docker build . -t harbor.od.com/infra/apollo-portal:v1.5.1
    # docker push harbor.od.com/infra/apollo-portal:v1.5.1

    编写资源配置清单:

    # mkdir /data/k8s-yaml/apollo-portal && cd /data/k8s-yaml/apollo-portal

    1、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

    2、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

    3、svc.yaml

    kind: Service
    apiVersion: v1
    metadata: 
      name: apollo-portal
      namespace: infra
    spec:
      ports:
      - protocol: TCP
        port: 8080
        targetPort: 8080
      selector: 
        app: apollo-portal

    4、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

    应用资源配置清单:

    # kubectl create -f http://k8s-yaml.od.com/apollo-portal/cm.yaml
    # kubectl create -f http://k8s-yaml.od.com/apollo-portal/dp.yaml
    # kubectl create -f http://k8s-yaml.od.com/apollo-portal/svc.yaml
    # kubectl create -f http://k8s-yaml.od.com/apollo-portal/ingress.yaml

     添加域名解析:portal.od.com

     网页访问 portal.od.com

    默认用户名:apollo

    默认密码:   admin

    到此,apollo的三个组件都已经交付到k8s里了。

  • 相关阅读:
    使用beanShell来解析执行java的String方法,类似javascipt的eval方法
    osgi与流行的框架(spring,struts,hibernate等)的集成
    hibernate与ibatis比较的11大优势
    使用beanShell来解析执行java的String方法,类似javascipt的eval方法
    使用beanShell来解析执行java的String方法,类似javascipt的eval方法
    osgi与流行的框架(spring,struts,hibernate等)的集成
    hibernate与ibatis比较的11大优势
    osgi与流行的框架(spring,struts,hibernate等)的集成
    reparent指定进程到当前进程
    系统程序员成长计划动态数组(一)(上)
  • 原文地址:https://www.cnblogs.com/slim-liu/p/12017628.html
Copyright © 2011-2022 走看看