曾国藩:一勤天下无难事

某云ace 2.3平台部署

2019.03.19

需要环境

  • 一台数据库机器
  • 一台ake机器,也就是部署机
  • 三台master
  • 三台global
  • 三台es

注: 所有主机都需要单独挂载一块数据盘

环境准备

  • 将所有主机启动
  • 创建一个外网clb
  • 在clb上进行绑定,32001-32006(挂载三台master)、3306(挂载mysql主机)端口

注:此文档安装docker为1.12.6,使用devicemapper存储

部署mysql

  • 安装docker及docker-compose

    yum -y install docker docker-compose
    
  • 编辑mysql yaml文件

    vim mysql-master.yaml
    version: '2'
    services:
      mysql:
        network_mode: "bridge"
        ports:
          - "3306:3306"
        container_name: mysql-master
        image: mysql
        environment:
          MYSQL_ROOT_PASSWORD: "xxxx"   ### 密码自行修改
        image:  index.alauda.cn/alaudaorg/mysql-master:latest              ###### 注意此处images镜像的仓库地址需要更换,更换私有环境的镜像仓库IP
        privileged: true
        restart: always
        volumes:
          - /alauda/data/mysql/db:/var/lib/mysql
    
  • 登录镜像仓库index.alauda.cn

    docker login index.alauda.cn
    
  • 执行yaml文件,启动数据库

    docker-compose -f mysql-master.yaml up -d
    
  • 进入数据库修改内容

    docker exec -it mysql-master bash
    mysql -u root -psgOnxrI9WN638Hj8;
    grant replication slave on *.* to 'master'@'%' identified by 'sgOnxrI9WN638Hj8';
    flush privileges;
    show master status;
    
    +-------------------------+----------+--------------+------------------+-------------------+ 
    | File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | 
    +-------------------------+----------+--------------+------------------+-------------------+ 
    | mysql-master-bin.000003 |      455 |              |                  |                   | 
    +-------------------------+----------+--------------+------------------+-------------------+ 
    1 row in set (0.00 sec)
    

配置安装

注:建议单独挂一块大于100G的磁盘

  • 下载安装包

    scp alauda@xxxxxxx:/mnt/package/ALAUDA-release/ACE_2.3-1xxxxxx.tar.gz  <你的安装包目录>
    密码: xxxxx
    md5sum:xxxx  
    文件大小:  xxx 
    
  • 所有主机配置hostname及hosts文件,并安装jq sshpass命令(建议使用ansible)

  • 所有主机将单独的磁盘配置成lvm

  • 进入数据目录/data/mnt/package/ace/ace_xxxxxx 编写server_list.json文件

  • 修改所有主机内核参数:

    echo "vm.max_map_count=262144" >> /etc/sysctl.conf;sysctl -p
    
  • 执行up-alaudaace.sh脚本开始安装

    ./up-alaudaee.sh --network-interface=eth0 --kube_controlplane_endpoint clb-ip --alaudaee-domain-name clb-ip --db-info='DB_HOST=clb-ip;DB_PORT=3306;DB_USER=root;DB_PASSWORD=sgOnxrI9WN638Hj8;DB_ENGINE=mysql' --debug
    
    >注:命令中的用户名及密码可能需要修改,需要改成上边yaml里的
    以下为相关参数
    --network-interface                    用来指定网卡
    --alaudaee-domain-name                 global 的域名或者IP,具体解释请看白皮书
    --kube_controlplane_endpoint           k8s api lb 的地址,k8s api 的 vip 配置到这个 lb 上,具体解释请看白皮书
    --db-info                              数据库信息,其中DB_HOST、DB_PORT、DB_USER、DB_PASSWORD分别是数据库地址、端口、用户名和密码。DB_ENGINE是数据库类型,只有postgreql、mysql 两种
    --master-is-node                       可选参数,如果规划角色的时候,选择 k8s 集群的 master 也作为计算节点,就需要加上这个参数
    --debug                                可选参数,加上之后,ake 部署 k8s 集群的时候,会输出更多的信息,方便排除错误
    --not-deploy-k8s                       可选参数,不部署 k8s 集群,server_list.json 中记录的服务器,就是已经部署成功的 k8s 集群的所有服务器
    

访问web

  • ace

    http://<--alaudaee-domain-name 参数指定的地址>:32005

    账号/密码:alauda/alauda

  • acp

    https://<--kube_controlplane_endpoint 参数指定的地址>

    账号/密码:admin@alauda.io/password

常见问题

  • 在快启动完成时会有两个Pod一直启动失败,需要手动删除

    [root@xuejian-ace-update-m1 ~]# kubectl get deploy --all-namespaces | grep jaeger
    alauda-system   jaeger-collector             1         1         1            0           21m
    alauda-system   jaeger-query                 1         1         1            0           21m
    
    编辑deploy里的replicas参数,设置为0
    [root@xuejian-ace-update-m1 ~]# kubectl edit deploy -n alauda-system   jaeger-collector
    
  • k8s安装完成后,在执行helm时会报错

    在所有node上执行clear-all.sh脚本,重新运行脚本

  • upload chart 出错

    找到chart-repo 容器挂载的卷,将权限改成777 即可,挂载的目录一般是安装目录下的ACP/chartmuseum ,执行 cat /alauda/.run_chart_repo.sh 可以看到具体的目录

  • 若没有system项目,或未接入集群信息

    • 在 jakiro 容器中手动运行:

      curl --request POST \
        --url http://127.0.0.1/v1/project-templates/<org_name>/ \
        --header 'authorization: Token <token>' \
        --header 'content-type: application/json' \
        --data '{
          "name": "empty-template",
          "resource_actions": [
              "project_template:create",
              "project_template:delete",
              "project_template:view"
          ],
          "resources": [
      
          ],
          "roles": [
          ]
      }
      '
      

      注:

      <org_name>:根账号名称

      <token>:根账号token,在用户中心页面查看

      建议删掉jakiro 的数据库,重新给jakiro 做migrate 重新添加跟用户,重新对接ACE 集群。如果对上述操作不熟悉,也可以清空环境重新部署

    • 获取集群secret

      kubectl get secret -n kube-system | awk '/^clusterrole-aggregation-controller-token/{print $1}'
      
    • 获取集群token并记录

      kubectl get secret -n kube-system 集群secret -o jsonpath='{.data.token}' | base64 -d
      
    • 删除数据库

      DROP DATABASE jakirodb;
      
    • 创建数据库

      create database jakirodb;
      
    • 数据库初始化,进入jakiro容器执行

      python manage.py makemigrations
      
      python manage.py migrate
      
    • 创建根用户

      curl -X POST \
      -H 'Content-Type:application/json' \
      -d '{
      "username":"'alauda'",
      "password":"alauda",
      "realname":"alauda",
      "email":"alauda@alauda.io",
      "reference_code_id":"cn",
      "city":"beijing",
      "company":"alauda",
      "is_active": true,
      "informed_way":"others",
      "industry":"others",
      "mobile":"123123123123",
      "position":"beijing",
      "currency":"CNY"
      }' http://api-server:32001/v1/auth/register/
      
    • 接入集群

      点击平台的接入集群按钮

      填写集群地址 (f5的地址或者alb的地址)

      填写集群token (第二步获取的token)