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使用java

2 部署ZK集羣

集羣分佈:7-11,7-12,7-21
zk是java服務,須要依賴jdkmysql

2.1 二進制安裝JDK

jdk請自行下載,只要是1.8版本的就能夠,rpm安裝或二進制安裝都可:linux

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

驗證結果nginx

[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

下載地址git

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

建立相關目錄sql

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

2.2.3 建立集羣配置

給每一個zk不一樣的myid,以便區分主從docker

#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解析記錄apache

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
相關文章
相關標籤/搜索