K8S(07)交付實戰-架構說明並准備zk集群


k8s交付實戰-架構說明並准備zk集群

1 交付的服務架構圖:

img

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM