k8s容器云架构之dubbo微服务—k8s(07)交付实战-架构说明并准备zk集群 目录

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 博客地址:https://www.cnblogs.com/sseban哔哩哔哩:https://space.bilibili.com/394449264
  • k8s交付实战-架构说明并准备zk集群
  • 1 交付的服务架构图:
  • 1.1 架构图解
  • 1.2 交付说明:
  • 2 部署ZK集群
  • 2.1 二进制安装JDK
  • 2.1.1 解压jdk
  • 2.1.2 写入环境变量
  • 2.2 二进制安装zk
  • 2.2.1 下载zookeeper
  • 2.2.2 创建zk配置文件:
  • 2.2.3 创建集群配置
  • 2.2.4 修改dns解析
  • 2.3 启动zk集群
  • 2.3.1 启动zookeeper
  • 2.3.2 检查zk启动情况
  • 2.3.3 检查zk集群情况
  • 3 准备java运行底包
  • 3.1 拉取原始底包
  • 3.2 制作新底包
  • 3.2.1 制作dockerfile
  • 3.2.2准备dockerfile需要的文件
  • 3.2.3 构建底包并上传

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

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

2.1.2 写入环境变量

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

验证结果

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

2.2 二进制安装zk

2.2.1 下载zookeeper

下载地址

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

2.2.2 创建zk配置文件:

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

创建相关目录

mkdir -p /data/zookeeper/data
mkdir -p /data/zookeeper/logs

2.2.3 创建集群配置

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

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

2.2.4 修改dns解析

7.11上增加dns解析记录

vi /var/named/zq.com.zone
...
zk1        A    10.4.7.11
zk2        A    10.4.7.12
zk3        A    10.4.7.21
#验证结果
~]# dig -t A zk1.zq.com  +short
10.4.7.11

2.3 启动zk集群

2.3.1 启动zookeeper

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

/opt/zookeeper/bin/zkServer.sh start

2.3.2 检查zk启动情况

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

2.3.3 检查zk集群情况

[root@hdss7-11 ~]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@hdss7-12 ~]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[root@hdss7-21 ~]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower

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

3 准备java运行底包

运维主机上操作

3.1 拉取原始底包

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

3.2 制作新底包

mkdir -p /data/dockerfile/jre8/
cd /data/dockerfile/jre8/

3.2.1 制作dockerfile

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

3.2.2准备dockerfile需要的文件

添加config.yml

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

cat >config.yml <<'EOF'
--- 
rules: 
 - pattern: '.*'
EOF

下载jmx_javaagent,监控jvm信息:

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容器因没有前台进程而退出。并且不要加&符。

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

3.2.3 构建底包并上传

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

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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
28天前
|
Kubernetes 持续交付 开发者
探索后端技术的未来:微服务架构与容器化部署的融合
在数字化时代的浪潮中,后端技术正经历着前所未有的变革。本文将深入探讨微服务架构和容器化部署如何共同推动后端技术的发展,提升应用的性能、可扩展性和可靠性。通过分析现代软件开发的需求,我们将揭示这两种技术如何互补,以及它们在未来后端开发中的潜力和挑战。
|
8天前
|
运维 Kubernetes 安全
云时代的运维之光:容器化与微服务架构的融合之道
在数字化浪潮中,企业IT架构的演进从未停歇。本文以浅显的语言探讨了容器技术与微服务架构如何协同工作,提高运维效率。我们将从基础概念出发,逐步深入到它们在实际工作中的应用,最后分享一些行业内的最佳实践。无论你是运维新手还是资深专家,这篇文章都将为你带来新的视角和思考。
|
11天前
|
运维 Cloud Native 开发者
云原生时代:容器化与微服务架构的融合之旅
【8月更文挑战第9天】 在数字化浪潮的推动下,企业纷纷上云以追求更高效的运营模式。本文将深入探讨云原生技术的核心——容器化与微服务架构的结合,揭示它们如何共同塑造现代软件的开发与部署。通过浅显易懂的语言和实际案例,我们将一同见证这场技术变革给企业带来的创新与挑战,以及开发人员如何在这波潮流中找到自己的立足点。
16 4
|
10天前
|
运维 Cloud Native Android开发
云原生之旅:容器化与微服务架构的融合之道安卓应用开发入门指南
本文将深入探讨云原生技术的核心要素——容器化和微服务架构,并揭示它们如何共同推动现代软件的开发与部署。通过实际案例分析,我们将看到这两种技术如何相辅相成,助力企业实现敏捷、可扩展的IT基础设施。文章旨在为读者提供一条清晰的道路,指引如何在云原生时代利用这些技术构建和优化应用。 本文将引导初学者了解安卓应用开发的基本概念和步骤,从安装开发环境到编写一个简单的“Hello World”程序。通过循序渐进的讲解,让读者快速掌握安卓开发的核心技能,为进一步深入学习打下坚实基础。
19 1
|
11天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:从容器化到微服务架构的演进
在数字化浪潮中,云原生技术以其灵活性和可扩展性引领着软件开发的未来。本文将通过浅显的语言和生动的比喻,带领读者理解云原生的核心概念,探索它如何重塑我们的应用开发和部署方式,并展望这一趋势如何影响IT行业的走向。
18 1
|
16天前
|
Kubernetes 监控 开发者
探索后端开发的新境界:微服务架构与容器化技术
在数字化时代的浪潮中,后端开发不断演进,涌现出创新的架构与技术。本文深入探讨了微服务架构和容器化技术如何重塑后端开发,提升系统的可维护性、可扩展性和部署效率。通过实际案例分析,我们揭示了这些技术背后的原理,并提供了实施的最佳实践和面临的挑战,为后端开发者提供一条清晰的技术升级路径。
41 3
|
15天前
|
运维 开发者 Docker
深度探索微服务架构中的容器化技术
在现代软件开发中,微服务架构因其模块化和可扩展性而广受欢迎。而容器化技术,尤其是Docker,成为了支持微服务架构的核心工具。本文将探讨容器化在微服务架构中的作用,包括其如何提升开发效率、简化部署过程以及解决传统方法中的问题。通过具体实例和最佳实践的分析,读者将了解如何有效利用容器化技术来优化微服务架构。
|
21天前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之如何将PolarDB容器内的目录挂载到宿主机的指定目录
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
22天前
|
运维 Kubernetes 开发者
构建高效后端服务:微服务架构与容器化部署的实践
【7月更文挑战第29天】 在现代软件开发中,后端服务的构建不再仅仅是代码的堆砌,而是需要考虑到可扩展性、可靠性和快速迭代等多重因素。本文将探讨如何通过微服务架构和容器化技术来构建一个高效的后端服务系统。我们将从微服务的概念出发,分析其在后端开发中的应用优势,并结合容器化技术,特别是Docker和Kubernetes的使用,来展示如何在保证服务高可用性和伸缩性的同时,简化开发和部署流程。文章还将涵盖如何应对微服务架构下的数据一致性挑战,以及如何利用现代云平台资源来优化后端服务的性能和成本效益。
|
24天前
|
运维 Kubernetes 负载均衡
构建高效后端:微服务架构与容器化实践
【7月更文挑战第27天】在数字化浪潮的推动下,后端技术不断演进以满足日益增长的性能和可扩展性需求。本文深入探讨了微服务架构的设计原则、优势及其挑战,并结合容器化技术,分析了如何在现代软件开发中实现高效、灵活的后端系统。通过实际案例,我们揭示了微服务与容器化相结合的最佳实践,旨在为开发者提供一条清晰的技术路线图。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多