[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.out2.执行dockerfile
docker build -f Dockerfile -t tomcat . >/dev/null 2>&13.上传镜像到Harbor 仓库
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/bash4. 创建namespace 命名空间
kubectl create namespace tomcat5. 创建NFS 共享目录
使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.service6. 编写tomcat-deploy.yaml 文件
[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
7. 创建启动tomcat-deploy.yaml
[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 wide8.创建Service
[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 wide9. 查看master主机挂载目录 10. 查看各节点的/mnt 目录是否同步了master 的挂载目录
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文件
18.6 访问tomcatcurl 192.168.32.128:30090



