一、zookeeper集群实例
1.k8s二进制安装和harbor安装参考文档: https://www.cnblogs.com/Yuanbangchen/p/17219073.html
2.下载JDK镜像,上传镜像到harbor.zzhz.com服务器,此镜像系统为:Alpine
[root@localhost7C zookeeper]# docker pull elevy/slim_java:8
[root@localhost7C zookeeper]# docker tag 0776147f4957 harbor.zzhz.com/pub-images/slim_java:8
[root@localhost7C zookeeper]# docker push harbor.zzhz.com/pub-images/slim_java:8
3.配置文件
[root@localhost7C zookeeper]# tree
├── bin
│ └── zkReady.sh
├── build-command.sh
├── conf
│ ├── log4j.properties
│ └── zoo.cfg
├── Dockerfile
└── entrypoint.sh
----------------------------------------
#创建集群状态检查脚本
[root@localhost7C zookeeper]# cat bin/zkReady.sh
#!/bin/bash
/zookeeper/bin/zkServer.sh status | egrep 'Mode: (standalone|leading|following|observing)'
----------------------------------------------
#日志配置文件
[root@localhost7C zookeeper]# cat conf/log4j.properties
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE, ROLLINGFILE
zookeeper.console.threshold=INFO
zookeeper.log.dir=/zookeeper/log
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=INFO
zookeeper.tracelog.dir=/zookeeper/log
zookeeper.tracelog.file=zookeeper_trace.log
#
# ZooKeeper Logging Configuration
#
# Format is "<default threshold> (, <appender>)+
# DEFAULT: console appender only
log4j.rootLogger=${zookeeper.root.logger}
# Example with rolling log file
#log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE
# Example with rolling log file and tracing
#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE
#
# Log INFO level and above messages to the console
#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n
#
# Add ROLLINGFILE to rootLogger to get log file output
# Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
# Max log file size of 10MB
log4j.appender.ROLLINGFILE.MaxFileSize=10MB
# uncomment the next line to limit number of backup files
log4j.appender.ROLLINGFILE.MaxBackupIndex=5
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n
#
# Add TRACEFILE to rootLogger to get log file output
# Log DEBUG level and above messages to a log file
log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
log4j.appender.TRACEFILE.Threshold=TRACE
log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file}
log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout
### Notice we are including log4j's NDC here (%x)
log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n
------------------------------
#zookeeper集群配置文件模板
[root@localhost7C zookeeper]# cat conf/zoo.cfg
tickTime=2000
initLimit=20
syncLimit=20
dataDir=/zookeeper/data
dataLogDir=/zookeeper/wal
#snapCount=100000
autopurge.purgeInterval=1
clientPort=2181
quorumListenOnAllIPs=true
----------------------------------------------------
#创建zookeeper生成集群配置文件脚本
[root@localhost7C zookeeper]# cat entrypoint.sh
#!/bin/bash
echo ${MYID:-1} > /zookeeper/data/myid
if [ -n "$SERVERS" ]; then
IFS=\, read -a servers <<<"$SERVERS"
for i in "${!servers[@]}"; do
printf "\nserver.%i=%s:2888:3888" "$((1 + $i))" "${servers[$i]}" >> /zookeeper/conf/zoo.cfg
done
fi
cd /zookeeper
exec "$@"
------------------------------------------
#此镜像系统为:Alpine
[root@localhost7C zookeeper]# cat Dockerfile
FROM harbor.zzhz.com/pub-images/slim_java:8
ENV ZK_VERSION 3.4.14
RUN apk add --no-cache --virtual .build-deps \
ca-certificates \
gnupg \
tar \
wget && \
#
# Install dependencies
apk add --no-cache \
bash && \
#
# Download Zookeeper
wget -nv -O /tmp/zk.tgz "https://www.apache.org/dyn/closer.cgi?action=download&filename=zookeeper/zookeeper-${ZK_VERSION}/zookeeper-${ZK_VERSION}.tar.gz" && \
wget -nv -O /tmp/zk.tgz.asc "https://www.apache.org/dist/zookeeper/zookeeper-${ZK_VERSION}/zookeeper-${ZK_VERSION}.tar.gz.asc" && \
wget -nv -O /tmp/KEYS https://dist.apache.org/repos/dist/release/zookeeper/KEYS && \
#
# Verify the signature
export GNUPGHOME="$(mktemp -d)" && \
gpg -q --batch --import /tmp/KEYS && \
gpg -q --batch --no-auto-key-retrieve --verify /tmp/zk.tgz.asc /tmp/zk.tgz && \
#
# Set up directories
#
mkdir -p /zookeeper/data /zookeeper/wal /zookeeper/log && \
#
# Install
tar -x -C /zookeeper --strip-components=1 --no-same-owner -f /tmp/zk.tgz && \
#
# Slim down
cd /zookeeper && \
cp dist-maven/zookeeper-${ZK_VERSION}.jar . && \
rm -rf \
*.txt \
*.xml \
bin/README.txt \
bin/*.cmd \
conf/* \
contrib \
dist-maven \
docs \
lib/*.txt \
lib/cobertura \
lib/jdiff \
recipes \
src \
zookeeper-*.asc \
zookeeper-*.md5 \
zookeeper-*.sha1 && \
#
# Clean up
apk del .build-deps && \
rm -rf /tmp/* "$GNUPGHOME"
COPY conf /zookeeper/conf/
COPY bin/zkReady.sh /zookeeper/bin/
COPY entrypoint.sh /
ENV PATH=/zookeeper/bin:${PATH} \
ZOO_LOG_DIR=/zookeeper/log \
ZOO_LOG4J_PROP="INFO, CONSOLE, ROLLINGFILE" \
JMXPORT=9010
ENTRYPOINT [ "/entrypoint.sh" ]
CMD [ "zkServer.sh", "start-foreground" ]
EXPOSE 2181 2888 3888 9010
-------------------------------------------------
[root@localhost7C zookeeper]# cat build-command.sh
#!/bin/bash
TAG=$1
docker build -t harbor.zzhz.com/linux39/zookeeper:${TAG} .
sleep 1
docker push harbor.zzhz.com/linux39/zookeeper:${TAG}
构建zookeeper镜像
[root@localhost7C zookeeper]# chmod +x *.sh
[root@localhost7C zookeeper]# chmod a+x bin/*.sh
[root@localhost7C zookeeper]# ./build-command.sh v1
#测试,使用客户端ZooInspector连接zookeeper:
[root@localhost7C zookeeper]# docker run -it --rm -p 2181:2181 harbor.zzhz.com/linux39/zookeeper:v1 bash
bash-4.3# ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ...
STARTED
4.安装nfs服务器,基于PV和PVC作为后端存储,实现zookeeper集群
[root@localhost7B ]# cat /etc/exports
/data/k8sdata *(rw,no_root_squash)
[root@localhost7B ]# mkdir /data/k8sdata/magedu/zookeeper-datadir-1 -p
[root@localhost7B ]# mkdir /data/k8sdata/magedu/zookeeper-datadir-2 -p
[root@localhost7B ]# mkdir /data/k8sdata/magedu/zookeeper-datadir-3 -p
[root@localhost7B ]# systemctl restart nfs-server.service
#写数据测试
mount -t nfs 192.168.80.110:/data/k8sdata/magedu/zookeeper-datadir-1 /mnt
cp /etc/passwd /mnt
umount /mnt/
#创建zookeeper集群pv
[root@localhost7C pv]# cat zookeeper-persistentvolume.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: zookeeper-datadir-pv-1
namespace: default
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.80.110
path: /data/k8sdata/magedu/zookeeper-datadir-1
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: zookeeper-datadir-pv-2
namespace: default
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.80.110
path: /data/k8sdata/magedu/zookeeper-datadir-2
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: zookeeper-datadir-pv-3
namespace: default
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.80.110
path: /data/k8sdata/magedu/zookeeper-datadir-3
#创建zookeeper集群pvc
[root@localhost7C pv]# cat zookeeper-persistentvolumeclaim.yaml
apiVersion: v1
kind: PersistentVolumeClaim #定义kind类型为PVC
metadata:
name: zookeeper-datadir-pvc-1
namespace: default
spec:
accessModes: #访问模式,
- ReadWriteOnce
volumeName: zookeeper-datadir-pv-1 #调用PV名称。
resources: #定义PVC创建存储卷的空间大小
requests:
storage: 2Gi #使用大小,要比PV的值小,如果容器已运行,不随意变更大小。
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: zookeeper-datadir-pvc-2
namespace: default
spec:
accessModes:
- ReadWriteOnce
volumeName: zookeeper-datadir-pv-2
resources:
requests:
storage: 3Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: zookeeper-datadir-pvc-3
namespace: default
spec:
accessModes:
- ReadWriteOnce
volumeName: zookeeper-datadir-pv-3
resources:
requests:
storage: 4Gi
#创建PVC PV
[root@localhost7C pv]# kubectl apply -f zookeeper-persistentvolumeclaim.yaml -f zookeeper-persistentvolume.yaml
查看
[root@localhost7C pv]# kubectl get persistentvolumes
[root@localhost7C pv]# kubectl get persistentvolumeclaims
[root@localhost7C pv]# kubectl describe persistentvolume zookeeper-datadir-pv-1
[root@localhost7C pv]# kubectl describe persistentvolumeclaims zookeeper-datadir-pvc-1
5.k8s 运行zookeeper服务:通过yaml文件将zookeeper集群服务运行k8s环境
[root@localhost7C namespaces]# cat magedu-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: magedu
[root@localhost7C namespaces]# kubectl apply -f magedu-ns.yaml
namespace/magedu created
#创建zookeeper k8s资源清单文件 deployment和service
[root@localhost7C zookeeper]# cat zookeeper.yaml
#所有zookeeper节点内网访问client
apiVersion: v1
kind: Service
metadata:
name: zookeeper
namespace: magedu
spec:
ports:
- name: client
port: 2181
selector:
app: zookeeper
---
#对外访问zookeeper1
apiVersion: v1
kind: Service
metadata:
name: zookeeper1
namespace: magedu
spec:
type: NodePort
ports:
- name: client
port: 2181
nodePort: 32181 #
- name: followers
port: 2888
- name: election
port: 3888
selector:
app: zookeeper
server-id: "1"
---
#对外访问zookeeper2
apiVersion: v1
kind: Service
metadata:
name: zookeeper2
namespace: magedu
spec:
type: NodePort
ports:
- name: client
port: 2181
nodePort: 32182 #
- name: followers
port: 2888
- name: election
port: 3888
selector:
app: zookeeper
server-id: "2"
---
#对外访问zookeeper3
apiVersion: v1
kind: Service
metadata:
name: zookeeper3
namespace: magedu
spec:
type: NodePort
ports:
- name: client
port: 2181
nodePort: 32183 #
- name: followers
port: 2888
- name: election
port: 3888
selector:
app: zookeeper
server-id: "3"
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
name: zookeeper1
namespace: magedu
spec:
replicas: 1
selector:
matchLabels:
app: zookeeper
template:
metadata:
labels:
app: zookeeper
server-id: "1"
spec:
volumes:
- name: data
emptyDir: {}
- name: wal
emptyDir:
medium: Memory #预写日志数据持久化到内存
containers:
- name: server
image: harbor.zzhz.com/linux39/zookeeper:v1
imagePullPolicy: IfNotPresent
env:
- name: MYID
value: "1"
- name: SERVERS
value: "zookeeper1,zookeeper2,zookeeper3"
- name: JVMFLAGS
value: "-Xmx1G"
ports:
- containerPort: 2181
- containerPort: 2888
- containerPort: 3888
volumeMounts:
- mountPath: "/zookeeper/data"
name: zookeeper-datadir-pvc-1
volumes:
- name: zookeeper-datadir-pvc-1
persistentVolumeClaim:
claimName: zookeeper-datadir-pvc-1
---
#创建zookeeper
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
name: zookeeper2
namespace: magedu
spec:
replicas: 1
selector:
matchLabels:
app: zookeeper
template:
metadata:
labels:
app: zookeeper
server-id: "2"
spec:
volumes:
- name: data
emptyDir: {}
- name: wal
emptyDir:
medium: Memory
containers:
- name: server
image: harbor.zzhz.com/linux39/zookeeper:v1
imagePullPolicy: IfNotPresent
env:
- name: MYID
value: "2"
- name: SERVERS
value: "zookeeper1,zookeeper2,zookeeper3"
- name: JVMFLAGS
value: "-Xmx1G"
ports:
- containerPort: 2181
- containerPort: 2888
- containerPort: 3888
volumeMounts:
- mountPath: "/zookeeper/data"
name: zookeeper-datadir-pvc-2
volumes:
- name: zookeeper-datadir-pvc-2
persistentVolumeClaim:
claimName: zookeeper-datadir-pvc-2
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
name: zookeeper3
namespace: magedu
spec:
replicas: 1
selector:
matchLabels:
app: zookeeper
template:
metadata:
labels:
app: zookeeper
server-id: "3"
spec:
volumes:
- name: data
emptyDir: {}
- name: wal
emptyDir:
medium: Memory
containers:
- name: server
image: harbor.zzhz.com/linux39/zookeeper:v1
imagePullPolicy: IfNotPresent
env:
- name: MYID
value: "3"
- name: SERVERS
value: "zookeeper1,zookeeper2,zookeeper3"
- name: JVMFLAGS
value: "-Xmx1G"
ports:
- containerPort: 2181
- containerPort: 2888
- containerPort: 3888
volumeMounts:
- mountPath: "/zookeeper/data"
name: zookeeper-datadir-pvc-3
volumes:
- name: zookeeper-datadir-pvc-3
persistentVolumeClaim:
claimName: zookeeper-datadir-pvc-3
[root@localhost7C zookeeper]# kubectl apply -f zookeeper.yaml
[root@localhost7C zookeeper]# kubectl get pod -A -o wide
magedu zookeeper1-565bb9fc8b-cn8m2 1/1 Running 0 3m49s 10.20.5.37 192.168.80.160 <none> <none>
magedu zookeeper2-5559dfb959-s9tnd 1/1 Running 0 3m49s 10.20.6.27 192.168.80.150 <none> <none>
magedu zookeeper3-64b877777b-fl6qm 1/1 Running 0 3m49s 10.20.5.36 192.168.80.160 <none> <none>
[root@localhost7C zookeeper]# kubectl exec -it -n magedu zookeeper1-565bb9fc8b-cn8m2 bash
bash-4.3# /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Mode: leader
[root@localhost7C zookeeper]# kubectl exec -it -n magedu zookeeper2-5559dfb959-s9tnd bash
bash-4.3# /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@localhost7C zookeeper]# kubectl exec -it -n magedu zookeeper3-64b877777b-fl6qm bash
bash-4.3# /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Mode: follower
#任意一台node节点查看
[root@localhost7h ~]# netstat -anltp | grep 218
tcp6 0 0 :::32183 :::* LISTEN 1251/kube-proxy
tcp6 0 0 :::32181 :::* LISTEN 1251/kube-proxy
tcp6 0 0 :::32182 :::* LISTEN 1251/kube-proxy
测试,使用客户端ZooInspector连接zookeeper
![]()
二、dubbo实现provider与consumer微服务注册与发现及dubboadmin
二、dubbo实现provider与consumer微服务注册与发现及dubboadmin
[root@localhost7C dubbo]# ls
consumer dubboadmin provider
1.provider 镜像制作
[root@localhost7C dubbo]# ll provider/
-rwxr-xr-x 1 root root 144 3月 31 16:35 build-command.sh
-rw-r--r-- 1 root root 411 3月 31 16:22 Dockerfile
drwxr-xr-x 5 root root 40 4月 7 2020 dubbo-demo-provider-2.1.5
-rw-r--r-- 1 root root 10281793 4月 7 2020 dubbo-demo-provider-2.1.5-assembly.tar.gz
-rwxr-xr-x 1 root root 313 3月 31 16:22 run_java.sh
#配置文件
[root@localhost7C provider]# cat dubbo-demo-provider-2.1.5/conf/dubbo.properties
##
dubbo.container=log4j,spring
dubbo.application.name=demo-provider
dubbo.application.owner=
dubbo.registry.address=zookeeper://zookeeper1.magedu.svc.zzhz.local:2181 | zookeeper://zookeeper2.magedu.svc.zzhz.local:2181 | zookeeper://zookeeper3.magedu.svc.zzhz.local:2181
dubbo.monitor.protocol=registry
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.log4j.file=logs/dubbo-demo-provider.log
dubbo.log4j.level=WARN
#运行脚本
[root@localhost7C provider]# cat run_java.sh
#!/bin/bash
#echo "nameserver 223.6.6.6" > /etc/resolv.conf
#/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat &
su - tomcat -c "/apps/dubbo/provider/bin/start.sh"
tail -f /etc/hosts
#镜像制作文件,#此镜像安装了JDK ,参考:https://www.cnblogs.com/Yuanbangchen/p/17264215.html
[root@localhost7C provider]# cat Dockerfile
#Dubbo provider
FROM harbor.zzhz.com/pub-images/jdk-base:v8.212
MAINTAINER zhangshijie "zhangshijie@magedu.net"
RUN yum install file nc -y
RUN mkdir -p /apps/dubbo/provider && useradd tomcat
ADD dubbo-demo-provider-2.1.5/ /apps/dubbo/provider
ADD run_java.sh /apps/dubbo/provider/bin
RUN chown tomcat.tomcat /apps -R
RUN chmod a+x /apps/dubbo/provider/bin/*.sh
CMD ["/apps/dubbo/provider/bin/run_java.sh"]
#构造脚本
[root@localhost7C provider]# cat build-command.sh
#!/bin/bash
docker build -t harbor.zzhz.com/linux39/dubbo-demo-provider:v1 .
sleep 3
docker push harbor.zzhz.com/linux39/dubbo-demo-provider:v1
[root@localhost7C provider]# chmod +x ./*.sh
#生产者清单文件
[root@localhost7C provider]# cat provider.yaml
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
labels:
app: magedu-provider
name: magedu-provider-deployment
namespace: magedu
spec:
replicas: 1
selector:
matchLabels:
app: magedu-provider
template:
metadata:
labels:
app: magedu-provider
spec:
containers:
- name: magedu-provider-container
image: harbor.zzhz.com/linux39/dubbo-demo-provider:v1
#command: ["/apps/tomcat/bin/run_tomcat.sh"]
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always
ports:
- containerPort: 20880
protocol: TCP
name: http
---
kind: Service
apiVersion: v1
metadata:
labels:
app: magedu-provider
name: magedu-provider-spec
namespace: magedu
spec:
type: NodePort
ports:
- name: http
port: 20880
protocol: TCP
targetPort: 20880
#nodePort: 30001
selector:
app: magedu-provider
[root@localhost7C provider]# kubectl apply -f provider.yaml
2.consumer 镜像制作
[root@localhost7C dubbo]# ll consumer/
-rwxr-xr-x 1 root root 145 3月 31 16:44 build-command.sh
-rw-r--r-- 1 root root 409 3月 31 16:43 Dockerfile
drwxr-xr-x 5 root root 40 4月 7 2020 dubbo-demo-consumer-2.1.5
-rw-r--r-- 1 root root 10282529 4月 7 2020 dubbo-demo-consumer-2.1.5-assembly.tar.gz
-rwxr-xr-x 1 root root 313 4月 7 2020 run_java.sh
#配置文件
[root@localhost7C consumer]# cat dubbo-demo-consumer-2.1.5/conf/dubbo.properties
dubbo.container=log4j,spring
dubbo.application.name=demo-consumer
dubbo.application.owner=
dubbo.registry.address=zookeeper://zookeeper1.magedu.svc.zzhz.local:2181 | zookeeper://zookeeper2.magedu.svc.zzhz.local:2181 | zookeeper://zookeeper3.magedu.svc.zzhz.local:2181
dubbo.monitor.protocol=registry
dubbo.log4j.file=logs/dubbo-demo-consumer.log
dubbo.log4j.level=WARN
#运行脚本
[root@localhost7C consumer]# cat run_java.sh
#!/bin/bash
#echo "nameserver 223.6.6.6" > /etc/resolv.conf
#/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat &
su - tomcat -c "/apps/dubbo/consumer/bin/start.sh"
tail -f /etc/hosts
#镜像制作文件,#此镜像安装了JDK ,参考:https://www.cnblogs.com/Yuanbangchen/p/17264215.html
[root@localhost7C consumer]# cat Dockerfile
#Dubbo consumer#
FROM harbor.zzhz.com/pub-images/jdk-base:v8.212
MAINTAINER zhangshijie "zhangshijie@magedu.net"
RUN yum install file -y
RUN mkdir -p /apps/dubbo/consumer && useradd tomcat
ADD dubbo-demo-consumer-2.1.5 /apps/dubbo/consumer
ADD run_java.sh /apps/dubbo/consumer/bin
RUN chown tomcat.tomcat /apps -R
RUN chmod a+x /apps/dubbo/consumer/bin/*.sh
CMD ["/apps/dubbo/consumer/bin/run_java.sh"]
#构造脚本
[root@localhost7C consumer]# cat build-command.sh
#!/bin/bash
docker build -t harbor.zzhz.com/linux39/dubbo-demo-consumer:v1 .
sleep 3
docker push harbor.zzhz.com/linux39/dubbo-demo-consumer:v1
#消费者清单文件
[root@localhost7C consumer]# cat consumer.yaml
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
labels:
app: magedu-consumer
name: magedu-consumer-deployment
namespace: magedu
spec:
replicas: 1
selector:
matchLabels:
app: magedu-consumer
template:
metadata:
labels:
app: magedu-consumer
spec:
containers:
- name: magedu-consumer-container
image: harbor.zzhz.com/linux39/dubbo-demo-consumer:v1
#command: ["/apps/tomcat/bin/run_tomcat.sh"]
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always
ports:
- containerPort: 20880
protocol: TCP
name: http
---
kind: Service
apiVersion: v1
metadata:
labels:
app: magedu-consumer
name: magedu-consumer-server
namespace: magedu
spec:
type: NodePort
ports:
- name: http
port: 20880
protocol: TCP
targetPort: 20880
#nodePort: 30001
selector:
app: magedu-consumer
[root@localhost7C consumer]# kubectl apply -f consumer.yaml
[root@localhost7C consumer]# kubectl get pod -n magedu
NAME READY STATUS RESTARTS AGE
magedu-consumer-deployment-85bc85ffb5-djrs2 1/1 Running 0 23m
magedu-provider-deployment-75bb794f4-9pfh7 1/1 Running 0 35m
zookeeper1-565bb9fc8b-cn8m2 1/1 Running 0 147m
zookeeper2-5559dfb959-s9tnd 1/1 Running 0 147m
zookeeper3-64b877777b-fl6qm 1/1 Running 0 147m
测试,使用客户端ZooInspector连接zookeeper
3. dubboadmin制作
[root@localhost7C dubbo]# unzip dubboadmin.war
[root@localhost7C dubbo]# ll dubboadmin
-rwxr-xr-x 1 root root 161 4月 9 2020 build-command.sh
-rwxr-xr-x 1 root root 22201 4月 7 2020 catalina.sh #其它tomcat复制来
-rw-r--r-- 1 root root 585 4月 9 2020 Dockerfile
drwxr-xr-x 8 root root 132 4月 7 2020 dubboadmin
-rw-r--r-- 1 root root 27777982 4月 9 2020 dubboadmin.war
-rw-r--r-- 1 root root 3436 4月 7 2020 logging.properties
-rwxr-xr-x 1 root root 101 4月 7 2020 run_tomcat.sh
-rw-r--r-- 1 root root 6427 4月 7 2020 server.xml #其它tomcat复制来,修改了路径部分
#dubboadmin配置文件
[root@localhost7C dubboadmin]# cat dubboadmin/WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://zookeeper1.magedu.svc.zzhz.local:2181 | zookeeper://zookeeper2.magedu.svc.zzhz.local:2181 | zookeeper://zookeeper3.magedu.svc.zzhz.local:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
#其它tomcat复制来,修改了路径部分
[root@localhost7C dubboadmin]# cat server.xml #部分
<Host appBase="/data/tomcat/webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/>
<Context docBase="dubboadmin" path="/" reloadable="true" source="org.eclipse.jst.jee.server:dubboadmin"/>
#服务运行脚本
[root@localhost7C dubboadmin]# cat run_tomcat.sh
#!/bin/bash
su - tomcat -c "/apps/tomcat/bin/catalina.sh start"
su - tomcat -c "tail -f /etc/hosts"
#日志配置文件
[root@localhost7C dubboadmin]# cat logging.properties
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = /data/tomcat/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = /data/tomcat/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = /data/tomcat/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = /data/tomcat/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler
# For example, set the org.apache.catalina.util.LifecycleBase logger to log
# each component that extends LifecycleBase changing state:
#org.apache.catalina.util.LifecycleBase.level = FINE
# To see debug messages in TldLocationsCache, uncomment the following line:
#org.apache.jasper.compiler.TldLocationsCache.level = FINE
#构造文件信息,
#此镜像安装了JDK,tomcat的路径设置等 ,参考:https://www.cnblogs.com/Yuanbangchen/p/17264215.html
[root@localhost7C dubboadmin]# cat Dockerfile
#Dubbo dubboadmin
FROM harbor.zzhz.com/pub-images/tomcat-base:v8.5.43
MAINTAINER zhangshijie "zhangshijie@magedu.net"
ADD server.xml /apps/tomcat/conf/server.xml
ADD logging.properties /apps/tomcat/conf/logging.properties
ADD catalina.sh /apps/tomcat/bin/catalina.sh
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
ADD dubboadmin.war /data/tomcat/webapps/dubboadmin.war
#RUN yum install unzip -y
#RUN cd /data/tomcat/webapps && unzip dubboadmin.war && rm -rf dubboadmin.war && chown -R tomcat.tomcat /data /apps
ADD dubboadmin /data/tomcat/webapps/dubboadmin
RUN chown -R tomcat.tomcat /data /apps
EXPOSE 8080 8443
CMD ["/apps/tomcat/bin/run_tomcat.sh"]
构造脚本
[root@localhost7C dubboadmin]# chmod +x ./*.sh
[root@localhost7C dubboadmin]# cat build-command.sh
#!/bin/bash
TAG=$1
docker build -t harbor.zzhz.com/linux39/dubboadmin:${TAG} .
sleep 3
docker push harbor.zzhz.com/linux39/dubboadmin:${TAG}
[root@localhost7C dubboadmin]# ./build-command.sh v1
#清单文件
[root@localhost7C dubboadmin]# cat dubboadmin.yaml
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
labels:
app: magedu-dubboadmin
name: magedu-dubboadmin-deployment
namespace: magedu
spec:
replicas: 1
selector:
matchLabels:
app: magedu-dubboadmin
template:
metadata:
labels:
app: magedu-dubboadmin
spec:
containers:
- name: magedu-dubboadmin-container
image: harbor.zzhz.com/linux39/dubboadmin:v1
#command: ["/apps/tomcat/bin/run_tomcat.sh"]
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
name: http
---
kind: Service
apiVersion: v1
metadata:
labels:
app: magedu-dubboadmin
name: magedu-dubboadmin-service
namespace: magedu
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
nodePort: 30080
selector:
app: magedu-dubboadmin
[root@localhost7C /]# kubectl get pod -A
magedu magedu-consumer-deployment-85bc85ffb5-kr9tt 1/1 Running 0 5m54s
magedu magedu-dubboadmin-deployment-77bc9ff9-mrjbj 1/1 Running 0 59m
magedu magedu-provider-deployment-75bb794f4-j685f 1/1 Running 0 6m59s
magedu zookeeper1-565bb9fc8b-m8nh4 1/1 Running 0 46h
magedu zookeeper2-5559dfb959-s9tnd 1/1 Running 0 2d20h
magedu zookeeper3-64b877777b-7nnlt 1/1 Running 0 46h
[root@localhost7C /]# kubectl exec -it -n magedu magedu-provider-deployment-75bb794f4-j685f bash
[root@magedu-provider-deployment-75bb794f4-j685f /]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:20880 0.0.0.0:* LISTEN -
[root@magedu-provider-deployment-75bb794f4-j685f /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 11688 1408 ? Ss 11:15 0:00 /bin/bash /apps/dubbo/provider/bin/run_java.sh
root 7 0.1 0.0 81980 2060 ? S 11:15 0:00 su - tomcat -c /apps/dubbo/provider/bin/start.sh
tomcat 8 0.1 0.0 11164 1484 ? Ss 11:15 0:00 /bin/bash /apps/dubbo/provider/bin/start.sh
tomcat 57 2.7 6.2 4614500 146780 ? Sl 11:15 0:09 java -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xmx1g -Xms1g -Xmn256m -XX:PermSize=128m -Xss256k -XX
root 1371 0.5 0.0 11828 1852 pts/0 Ss 11:21 0:00 bash
tomcat 1391 0.0 0.0 5936 356 ? S 11:21 0:00 sleep 1
root 1392 0.0 0.0 51752 1732 pts/0 R+ 11:21 0:00 ps aux
[root@localhost7C /]# kubectl exec -it -n magedu magedu-consumer-deployment-85bc85ffb5-kr9tt bash
[root@magedu-consumer-deployment-85bc85ffb5-kr9tt /]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.20.5.43:54966 10.10.115.171:2181 ESTABLISHED -
tcp 0 0 10.20.5.43:60018 10.10.107.121:2181 ESTABLISHED -
tcp 0 0 10.20.5.43:58876 10.20.5.42:20880 ESTABLISHED -
tcp 0 0 10.20.5.43:60872 10.10.231.109:2181 ESTABLISHED -
[root@magedu-consumer-deployment-85bc85ffb5-kr9tt /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 11688 1408 ? Ss 11:16 0:00 /bin/bash /apps/dubbo/consumer/bin/run_java.sh
tomcat 52 1.7 5.2 4497068 122508 ? Sl 11:16 0:05 java -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xmx1g -Xms1g -Xmn256m -XX:PermSize=128m -Xss256k -XX
root 78 0.0 0.0 4408 360 ? S 11:16 0:00 tail -f /etc/hosts
root 95 0.1 0.0 11828 1984 pts/0 Ss 11:20 0:00 bash
root 111 0.0 0.0 51752 1740 pts/0 R+ 11:21 0:00 ps aux
[root@magedu-consumer-deployment-85bc85ffb5-kr9tt /]#
[root@magedu-consumer-deployment-85bc85ffb5-kr9tt /]#
[root@magedu-consumer-deployment-85bc85ffb5-kr9tt /]# exit
exit
测试,使用客户端ZooInspector连接zookeeper
![]()
测试 http://192.168.80.170:30080/dubboadmin/
![]()
第一部分基本cnetos系统的另一种写法。
cnetos系统方式创建dockerfile镜像文件
root@master1:/dockerfile/project/zookeeper# cat Dockerfile
FROM harbor.cncf.net/baseimages/jdk:1.8.191
ENV ZK_VERSION 3.5.10
COPY apache-zookeeper-3.5.10-bin.tar.gz /usr/local
RUN mkdir -p /usr/local/zookeeper/data /usr/local/zookeeper/wal /usr/local/zookeeper/log
RUN cd /usr/local/ && \
tar xf apache-zookeeper-3.5.10-bin.tar.gz -C /usr/local/zookeeper/ --strip-component=1 && \
rm -rf apache-zookeeper-3.5.10-bin.tar.gz
COPY conf /usr/local/zookeeper/conf/
COPY bin/zkReady.sh /usr/local/zookeeper/bin/
COPY entrypoint.sh /
ENV PATH=/usr/local/zookeeper/bin:${PATH} \
ZOO_LOG_DIR=/usr/local/zookeeper/log \
ZOO_LOG4J_PROP="INFO, CONSOLE, ROLLINGFILE" \
JMXPORT=9010
ENTRYPOINT [ "/entrypoint.sh" ]
CMD [ "zkServer.sh", "start-foreground" ]
EXPOSE 2181 2888 3888 9010
----------------------------------------
创建zookeeper生成集群配置文件脚本
root@master1:/dockerfile/project/zookeeper# cat entrypoint.sh
#!/bin/bash
echo ${MYID:-0} > /usr/local/zookeeper/data/myid
#k8s zookeeper集群service名称
servers=(zookeeper1 zookeeper2 zookeeper3)
if [ -n "$servers" ]; then
for list in "${!servers[@]}"; do
printf "\nserver.%s = %s:2888:3888" "$((1 + $list))" "${servers[$list]}" >> /usr/local/zookeeper/conf/zoo.cfg
done
fi
exec "$@"
---------------------------------------------
参考博客
https://www.cnblogs.com/punchlinux/p/16575844.html