天天看點

k8s容器雲架構之dubbo微服務—k8s(07)傳遞實戰-架構說明并準備zk叢集 目錄

  • 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 建構底包并上傳

k8s容器雲架構之dubbo微服務—k8s(07)傳遞實戰-架構說明并準備zk叢集 目錄

  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配置

docker雖然可以部署有狀态服務,但如果不是有特别需要,還是建議不要部署有狀态服務

K8S同理,也不建議部署有狀态服務,如mysql,zk等。

是以手動将zookeeper建立叢集提供給dubbo使用

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

zk是java服務,需要依賴jdk

jdk請自行下載下傳,隻要是1.8版本的就可以,rpm安裝或二進制安裝均可:

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      

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)      

下載下傳位址
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      

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      

給每個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      

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      

在每台zk機器上都執行此操作

/opt/zookeeper/bin/zkServer.sh start      

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

[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叢集就搭建好了。

運維主機上操作

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

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

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      

添加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      

在harbor中建立名為

base

的公開倉庫,用來存放自己自定義的底包

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