[root@VM-12-7-centos opt]# cat Dockerfile
FROM centos:7.2.1511
VOLUME /tmp
FROM centos
MAINTAINER Harry
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ADD apache-tomcat-8.5.54.tar.gz /usr/local/
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ENV MYPATH /usr/local/
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.54
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.54
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.54/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.54/bin/logs/cataline.out
docker build -f Dockerfile -t tomcat . >/dev/null 2>&1
17.3.1 给tomcat:latest修改标记为192.168.32.131/tomcat/tomcat:v4.14.1
docker tag tomcat:v4.14.1 192.168.32.131/tomcat/tomcat:v4.14.1
17.3.1 推送镜像到192.168.32.131/tomcat/tomcat:v4.14.1
docker push 192.168.32.131/tomcat/tomcat:v4.14.1
启动docker例子:
-p: 9090(外部映射端口) 8080(容器内部监控端口)
-d: 后台运行
docker run -id -d -p 9090:80 --name testnginx -v /usr/local/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf 192.168.32.131/nginx/nginx:22401
docker run -id -p 9090:8080 --name tomcat 192.168.32.131/tomcat/tomcat:v4.18.1
进入镜像:
docker exec -it 镜像名 /bin/bash
kubectl create namespace tomcat
使master主机下:/usr/local/www-data/内容发生改变node1、node2下的/mnt目录内容都将会改变,达到同步效果
作用:
node1、node2下的/mnt目录都是maser下/www-data/目录的映射
主要/www-data/内容发生改变node1、node2下的/mnt目录内容都将会改变
下载安装nfs-utils、rpcbind(Master节点)
yum install -y nfs-utils rpcbind
配置开放的目录(Master节点)
nno_root_squash: 无论主节点还是其他节点,映射的目录都以root权限执行,拥有rwx全部权限
mkdir -p /usr/local/data/www-data
echo "/usr/local/data/www-data 192.168.32.128/24(rw,sync,no_root_squash)" > /etc/exports
启动nfs-utils、rpcbind(Master节点)
systemctl restart rpcbind.service
systemctl restart nfs.service
子节点下载安装nfs-utils(Node节点)
yum install -y nfs-utils rpcbind
查看Master节点开放目录(Node节点)
[root@k8s-node1 ~]# showmount -e 192.168.32.128
Export list for 192.168.32.128:
/usr/local/data/www-data 192.168.32.128/24
node1、node2节点永久挂载nfs:
vim /etc/fstab
192.168.32.128:/usr/local/data/www-data /mnt xfs defaults 0 0
[root@k8s-node1 ~]# mount -a
设置开机启动(Master、Node1、Node2)
systemctl enable nfs.service
[root@k8s-master tomcat]# cat tomcat-deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment #绑定的是Deployment模板
metadata:
name: tomcat-deployment # deployment模板的名字
labels: # 标签
app: tomcat # app 名字,需要和后面的service.yaml 一致
spec: # pod 的描述信息
replicas: 2 # 开启两个pods
selector: # 选择器
matchLabels:
app: tomcat # 需要和app 一致
template:
metadata:
labels:
app: tomcat # 需要和app 名字一致
spec:
volumes: # 宿主机挂载目录
- name: web-app-webapps # 给需要挂载的宿主机路径起个名字
hostPath: # 宿主机路径
path: /mnt/webapps # 路径: 宿主机路径目录
- name: web-app-logs
hostPath:
path: /mnt/logs
containers: # 容器描述
- name: tomcat # 容器的名字
image: 192.168.32.131/tomcat/tomcat:v4.18.1 # 要拉取的镜像地址
ports: # 容器内部映射的端口号
- containerPort: 8080 # 容器内部映射的端口号
volumeMounts: # 容器内部映射的目录路径
- name: web-app-webapps # 给需要映射的目录路径起个名字,名字要和上面的宿主机器的名字对应
mountPath: /usr/local/apache-tomcat-8.5.54/webapps # 容器内部映射挂载的目录路径
- name: web-app-logs
mountPath: /usr/local/apache-tomcat-8.5.54/logs
[root@k8s-master tomcat]# kubectl apply -f tomcat-deploy.yaml -n tomcat
获取tomcat 命名空间下的pods,deploy情况
[root@k8s-master tomcat]# kubectl get pods,deploy -n tomcat -o wide
[root@k8s-master tomcat]# cat tomcat-service.yaml
apiVersion: v1 # service api版本
kind: Service # 使用service 模块
metadata: # 元数据
name: tomcat-service # 新建自定义service 模块的名字
spec: # service 信息
type: NodePort # 使用Nodeport协议,对外提供开放端口
ports: # 端口信息
- port: 8080 # service 的端口
targetPort: 8080 # 容器tomcat的端口
nodePort: 30090 # 自定义对外开发的端口
selector: # 选择标签器
app: tomcat # app tomcat 此名字要匹配deployment 的app: tomcat
18.4 创建启动tomcat-service.yaml
[root@k8s-master tomcat]# kubectl apply -f tomcat-service.yaml -n tomcat
获取tomcat 命名空间下的pods,svc,deploy情况
[root@k8s-master tomcat]# kubectl get pods,svc,deploy -n tomcat -o wide
18.5.3 查看pod 容器内部目录
[root@k8s-master tomcat]# kubectl exec -it tomcat-deployment-7cd7f897b7-5hbtt -n tomcat -- /bin/bash
可以看到node1,bode2宿主机下的/mnt/目录已经被映射进去了,node1,和pods 容器里的文件一致。
修改pods 容器里的文件,查看是否自动同步到外部宿主机/mnt 目录下
[root@tomcat-deployment-7cd7f897b7-5hbtt ROOT]# echo 'this is test page3
' > test.txt
查看node1 节点下的/mnt 目录是否同步了pods 容器内生成了test.txt文件
接着载查看master 节点,是否也同步了各节点下的test.txt文件
curl 192.168.32.128:30090