k8s交付实战-架构说明并准备zk集群

1 交付的服务架构图:

1.1 架构图解

  1. 最上面一排为K8S集群外服务

    1.1 代码仓库使用基于git的gitee

    1.2 注册中心使用3台zk组成集群

    1.3 用户通过ingress暴露出去的服务进行访问
  2. 中间层是K8S集群内服务

    2.1 jenkins以容器方式运行,数据目录通过共享磁盘做持久化

    2.2 整套dubbo微服务都以POD方式交付,通过zk集群通信

    2.3 需要提供的外部访问的服务通过ingress方式暴露
  3. 最下层是运维主机层

    3.1 harbor是docker私有仓库,存放docker镜像

    3.2 POD相关yaml文件创建在运维主机特定目录

    3.3 在K8S集群内通过nginx提供的下载连接应用yaml配置

1.2 交付说明:

docker虽然可以部署有状态服务,但如果不是有特别需要,还是建议不要部署有状态服务

K8S同理,也不建议部署有状态服务,如mysql,zk等。

因此手动将zookeeper创建集群提供给dubbo使用

2 部署ZK集群

集群分布:7-11,7-12,7-21

zk是java服务,需要依赖jdk

2.1 二进制安装JDK

jdk请自行下载,只要是1.8版本的就可以,rpm安装或二进制安装均可:

2.1.1 解压jdk

  1. mkdir /opt/src
  2. mkdir /usr/java
  3. cd /opt/src
  4. tar -xf jdk-8u221-linux-x64.tar.gz -C /usr/java/
  5. ln -s /usr/java/jdk1.8.0_221/ /usr/java/jdk

2.1.2 写入环境变量

  1. cat >>/etc/profile <<'EOF'
  2. #JAVA HOME
  3. export JAVA_HOME=/usr/java/jdk
  4. export PATH=$JAVA_HOME/bin:$JAVA_HOME/bin:$PATH
  5. export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
  6. EOF
  7. # 使环境变量生效
  8. source /etc/profile

验证结果

  1. [root@hdss7-11 ~]# java -version
  2. java version "1.8.0_221"
  3. Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
  4. Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

2.2 二进制安装zk

2.2.1 下载zookeeper

下载地址

  1. wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
  2. tar -zxf zookeeper-3.4.14.tar.gz -C /opt/
  3. ln -s /opt/zookeeper-3.4.14/ /opt/zookeeper

2.2.2 创建zk配置文件:

  1. cat >/opt/zookeeper/conf/zoo.cfg <<'EOF'
  2. tickTime=2000
  3. initLimit=10
  4. syncLimit=5
  5. dataDir=/data/zookeeper/data
  6. dataLogDir=/data/zookeeper/logs
  7. clientPort=2181
  8. server.1=zk1.zq.com:2888:3888
  9. server.2=zk2.zq.com:2888:3888
  10. server.3=zk3.zq.com:2888:3888
  11. EOF

创建相关目录

  1. mkdir -p /data/zookeeper/data
  2. mkdir -p /data/zookeeper/logs

2.2.3 创建集群配置

给每个zk不同的myid,以便区分主从

  1. #7-11上
  2. echo 1 > /data/zookeeper/data/myid
  3. #7-12上
  4. echo 2 > /data/zookeeper/data/myid
  5. #7-21上
  6. echo 3 > /data/zookeeper/data/myid

2.2.4 修改dns解析

7.11上增加dns解析记录

  1. vi /var/named/zq.com.zone
  2. ...
  3. zk1 A 10.4.7.11
  4. zk2 A 10.4.7.12
  5. zk3 A 10.4.7.21
  6. #验证结果
  7. ~]# dig -t A zk1.zq.com +short
  8. 10.4.7.11

2.3 启动zk集群

2.3.1 启动zookeeper

在每台zk机器上都执行此操作

  1. /opt/zookeeper/bin/zkServer.sh start

2.3.2 检查zk启动情况

  1. ~]# ss -ln|grep 2181
  2. tcp LISTEN 0 50 :::2181 :::*

2.3.3 检查zk集群情况

  1. [root@hdss7-11 ~]# /opt/zookeeper/bin/zkServer.sh status
  2. ZooKeeper JMX enabled by default
  3. Using config: /opt/zookeeper/bin/../conf/zoo.cfg
  4. Mode: follower
  5. [root@hdss7-12 ~]# /opt/zookeeper/bin/zkServer.sh status
  6. ZooKeeper JMX enabled by default
  7. Using config: /opt/zookeeper/bin/../conf/zoo.cfg
  8. Mode: leader
  9. [root@hdss7-21 ~]# /opt/zookeeper/bin/zkServer.sh status
  10. ZooKeeper JMX enabled by default
  11. Using config: /opt/zookeeper/bin/../conf/zoo.cfg
  12. Mode: follower

到此,zookeeper集群就搭建好了。

3 准备java运行底包

运维主机上操作

3.1 拉取原始底包

  1. docker pull stanleyws/jre8:8u112
  2. docker tag fa3a085d6ef1 harbor.zq.com/public/jre:8u112
  3. docker push harbor.zq.com/public/jre:8u112

3.2 制作新底包

  1. mkdir -p /data/dockerfile/jre8/
  2. cd /data/dockerfile/jre8/

3.2.1 制作dockerfile

  1. cat >Dockerfile <<'EOF'
  2. FROM harbor.zq.com/public/jre:8u112
  3. RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
  4. echo 'Asia/Shanghai' >/etc/timezone
  5. ADD config.yml /opt/prom/config.yml
  6. ADD jmx_javaagent-0.3.1.jar /opt/prom/
  7. WORKDIR /opt/project_dir
  8. ADD entrypoint.sh /entrypoint.sh
  9. CMD ["sh","/entrypoint.sh"]
  10. EOF

3.2.2准备dockerfile需要的文件

添加config.yml

此文件是为后面用普罗米修斯监控做准备的

  1. cat >config.yml <<'EOF'
  2. ---
  3. rules:
  4. - pattern: '.*'
  5. EOF

下载jmx_javaagent,监控jvm信息:

  1. wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar -O jmx_javaagent-0.3.1.jar

创建entrypoint.sh启动脚本:

使用exec 来运行java的jar包,能够使脚本将自己的pid 为‘1’ 传递给java进程,避免docker容器因没有前台进程而退出。并且不要加&符。

  1. cat >entrypoint.sh <<'EOF'
  2. #!/bin/sh
  3. M_OPTS="-Duser.timezone=Asia/Shanghai -javaagent:/opt/prom/jmx_javaagent-0.3.1.jar=$(hostname -i):${M_PORT:-"12346"}:/opt/prom/config.yml"
  4. C_OPTS=${C_OPTS}
  5. JAR_BALL=${JAR_BALL}
  6. exec java -jar ${M_OPTS} ${C_OPTS} ${JAR_BALL}
  7. EOF

3.2.3 构建底包并上传

在harbor中创建名为base的公开仓库,用来存放自己自定义的底包

  1. docker build . -t harbor.zq.com/base/jre8:8u112
  2. docker push harbor.zq.com/base/jre8:8u112

K8S(07)交付实战-架构说明并准备zk集群的更多相关文章

  1. Dapr + .NET Core实战(十四)虚拟机集群部署 mDNS + Consul

    前面我们说了在单机模式下和K8S集群下的Dapr实战,这次我们来看看如何在不使用K8S的情况下,在一个传统的虚拟机集群里来部署Dapr. 1.环境准备 我们准备两台centos7虚拟机 Dapr1:1 ...

  2. 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现

    庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介      在第七篇文章<庐山真面目之七微服务架构Consul ...

  3. 《Apache kafka实战》读书笔记-管理Kafka集群安全之ACL篇

    <Apache kafka实战>读书笔记-管理Kafka集群安全之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家能看到这篇博客的小伙伴,估计你对kaf ...

  4. 【架构师之路】集群/分布式环境下5种session处理策略

    [架构师之路]集群/分布式环境下5种session处理策略   转自:http://www.cnblogs.com/jhli/p/6557929.html 在搭建完集群环境后,不得不考虑的一个问题就是 ...

  5. K8S从入门到放弃系列-(3)部署etcd集群

    摘要:etcd 是k8s集群最重要的组件,用来存储k8s的所有服务信息, etcd 挂了,集群就挂了,我们这里把etcd部署在master三台节点上做高可用,etcd集群采用raft算法选举Leade ...

  6. Redis架构之哨兵机制与集群

    Redis架构之哨兵机制与集群 哨兵机制 1.介绍: Sentinel(哨兵)是redis高可用性解决方案:由一个或多个由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个 ...

  7. K8S(09)交付实战-通过流水线构建dubbo服务

    k8s交付实战-流水线构建dubbo服务 目录 k8s交付实战-流水线构建dubbo服务 1 jenkins流水线准备工作 1.1 参数构建要点 1.2 创建流水线 1.2.1 创建流水线 1.2.2 ...

  8. K8S(08)交付实战-交付jenkins到k8s集群

    k8s交付实战-交付jenkins到k8s集群 目录 k8s交付实战-交付jenkins到k8s集群 1 准备jenkins镜像 1.1 下载官方镜像 1.2 修改官方镜像 1.2.1 创建目录 1. ...

  9. Kubernetes实战(二):k8s v1.11.1 prometheus traefik组件安装及集群测试

    1.traefik traefik:HTTP层路由,官网:http://traefik.cn/,文档:https://docs.traefik.io/user-guide/kubernetes/ 功能 ...

随机推荐

  1. 【Oracle】查看某个角色中有什么权限

    select * from role_sys_privs  where role='DBA'; 查看dba都有什么系统权限 select * from role_sys_privs where rol ...

  2. 分布式系统:xxl-job改造spring-cloud

    目录 改造原因 主要改造思路 调度中心 调度中心 执行器侧 总结 修改后的源码仓库地址:GitHub. : 改造原因 原有的xxl-job使用自己实现的http协议进行注册以及调度等,与目前框架中本身 ...

  3. [Noip模拟题]Seq

    题目描述 由于hyf长得实在是太帅了,英俊潇洒,风流倜傥,人见人爱,花见花开,车见车载.有一群MM排队看hyf.每个MM都有自己独特的风格,由于hyf有着一颗包容的心,所以,什么风格的MM他都喜欢-- ...

  4. 与图论的邂逅07:K短路

    在做最短路的题时我们不免会碰到许多求次短路的题,然而我们也能很快地想到解决的办法: 用dijkstra跑一遍最短路,当终点第二次被取出时就是次短路了.时间复杂度为O((N+M)logN).实际上前面得 ...

  5. linux中的虚拟环境工具

    1.虚拟环境工具的学习 python的虚拟环境,其实就是在机器上,方便的创建出多个解释器,每个解释器运行一个项目,互相之间不受影响 2.virtualenv工具,可以方便的创建,使用,删除也很方便 3 ...

  6. Oracle 常用命令大全(持续更新)

    数据库 ----数据库启动 & 关闭 启动数据库 SQL> startup nomount; SQL> alter database mount; SQL> alter da ...

  7. 深圳某小公司面试题:AQS是什么?公平锁和非公平锁?ReentrantLock?

    AQS总体来说没有想象中那么难,只要了解它的实现框架,那理解起来就不是什么问题了. AQS在Java还是占很重要的地位的,面试也是经常会问. 目前已经连载11篇啦!进度是一周更新两篇,欢迎持续关注 [ ...

  8. Cisco之show基础命令

    #show  version:显示版本信息等 #show running-config:显示当前(活动,并不一定保存)的配置 #show interfaces fastEthernet 0/1:进入接 ...

  9. 前端面试之HTTP状态码!

    前端面试之HTTP协议的东西! 一次HTTP请求的流程! HTTP 状态码 成功响应(200–299) 状态码 含义 200 请求成功 201 该请求已成功,并因此创建了一个新的资源.这通常是在POS ...

  10. code-server scala error: object apache is not a member of package org

    原因是scala缺少包,需要把spark或对应的包放入scala目录下的lib,然后重启主机,在terminal输入reboot即可. 如果不重启主机,则在交互式编程中可以成功import.但是直接在 ...