文章目录
1. 微服务
1.1 介绍
微服务 (Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic) 的 API 集相互通信。微服务的优点:应用解耦,可以单独升级,甚至不同模块之间可以编程语言不同;横向扩展方便,高可用。缺点:架构复杂,运维成本高
1.2 Dubbo微服务框架
阿里巴巴在2011年开源了Dubbo框架,虽然在2013年停止更新,但在2017年9月又重启维护并发布了新版本。目前已有很多的公司将自己的业务建立在Dubbo之上,同时阿里云也推出了企业级分布式应用服务EDAS,为Dubbo提供应用托管。Dubbo采用Zookeeper作为注册中心,RPC作为服务调用方式,致力于提供高性能和透明化的RPC远程服务调用方案。
• Provider:服务提供方发布服务到服务注册中心
• Consumer:服务消费方从服务注册中心订阅服务
• Registry:注册中心通知消息调用方服务已注册
• Monitor:监控计数
• 服务消费方调用已经注册的可用服务(RPC invoke)
2. Devops流水线
2.1 Jenkins老头
Jenkins是一款由Java编写的开源的持续集成工具。它运行在Servlet容器中(例如Apache Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。Jenkins是一个有状态的应用,如果托管在K8S中,只运行一个副本,且需要持久化存储。
官网:https://jenkins.io/zh/
下载地址:https://jenkins.io/zh/download/
官方文档:https://jenkins.io/zh/doc/
2.2 Maven工具
Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。Maven也可被用于构建和管理各种项目,例如C#,Ruby,Scala和其他语言编写的项目。Maven曾是Jakarta项目的子项目,现为由Apache软件基金会主持的独立Apache项目。在Devops流水线中,参与Java程序构建工具常用Maven。
官网:https://maven.apache.org/index.html
下载地址:https://archive.apache.org/dist/maven/
基础教程:https://www.runoob.com/maven/maven-setup.html
3. 本次实战架构
集群规划
主机名 | 角色 | ip |
---|---|---|
k8s7-11.host.com | k8s代理节点1,zk01 | 10.4.7.11 |
k8s7-12.host.com | k8s代理节点2,zk02 | 10.4.7.12 |
k8s7-21.host.com | k8s运算节点1,zk03 | 10.4.7.21 |
k8s7-22.host.com | k8s运算节点2,jenkins | 10.4.7.22 |
k8s7-200.host.com | k8s运维节点(docker仓库) | 10.4.7.200 |
4. 部署zookeeper
ZK集群是有状态的服务,其选择Leader的方式和ETCD类似,要求集群节点是不低于3的奇数个。
4.1 安装JDK 1.8
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
# cd /opt/src/
[root@k8s7-11.host.name /opt/src]# mkdir /usr/java
/opt/src]# tar xf jdk-8u221-linux-x64.tar.gz -C /usr/java/
[root@k8s7-11.host.name ~]# ln -s /usr/java/jdk1.8.0_221/ /usr/java/jdk
[root@k8s7-11.host.name ~]# tail -3 /etc/profile
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
[root@k8s7-11.host.name ~]# source /etc/profile
[root@k8s7-11.host.name ~]# 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)
其他节点安装方式与此类似。。。。
4.2 安装ZK[11,12,21]
zk下载地址:https://archive.apache.org/dist/zookeeper/
$解压、配置
[root@k8s7-11.host.name /opt/src]# tar xf zookeeper-3.4.14.tar.gz -C /opt/
[root@k8s7-11.host.name /opt/src]# cd /opt/
[root@k8s7-11.host.name /opt]# ln -s /opt/zookeeper-3.4.14/ /opt/zookeeper
[root@k8s7-11.host.name /opt]# mkdir -pv /data/zookeeper/data /data/zookeeper/logs
[root@k8s7-11.host.name /opt]# cat /opt/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
server.1=zk1.od.com:2888:3888
server.2=zk2.od.com:2888:3888
server.3=zk3.od.com:2888:3888
$myid配置
[root@k8s7-11.host.name ~]# echo 1 > /data/zookeeper/data/myid
[root@k8s7-12.host.com /opt]# echo 2 > /data/zookeeper/data/myid
[root@k8s7-21.host.com /opt]# echo 3 > /data/zookeeper/data/myid
4.3 配置DNS解析
[root@k8s7-11.host.name /opt]# tail -3 /var/named/od.com.zone
zk1 A 10.4.7.11
zk2 A 10.4.7.12
zk3 A 10.4.7.21
[root@k8s7-11.host.name ~]# systemctl restart named
[root@k8s7-11.host.name ~]# dig -t A zk1.od.com @10.4.7.11 +short
10.4.7.11
4.4 启动zk
[root@k8s7-11.host.name ~]# /opt/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@k8s7-11.host.name ~]# netstat -lntup|grep 2181
tcp6 0 0 :::2181 :::* LISTEN 18970/java
# 查看三个节点,其中一个为leader,其它为follower
[root@k8s7-12.host.com ~]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader