k8s部署tomcat
tomcat4.0.yaml
文件用于在 Kubernetes 集群中部署包含 Tomcat 应用和 Nginx 负载均衡器的应用环境,包含以下主要组成部分:
- 命名空间:创建
fr-server
命名空间,用于资源隔离。
- Tomcat StatefulSet:部署两个 Tomcat 实例,使用
tomcat:9.0.44 - jdk8
镜像,将物理机 /root/tomcat_server/webroot
目录挂载到容器 /usr/local/tomcat/webapps/fr
目录。同时使用 Pod 反亲和性策略,确保实例分布在不同节点。
- Tomcat 服务:创建
ClusterIP
类型服务,将集群内部流量转发到 Tomcat Pod 的 8080 端口。
- Nginx ConfigMap:存储 Nginx 的配置文件,配置 Nginx 将请求代理到 Tomcat 后端服务。
- Nginx Deployment:部署一个 Nginx 实例,使用
nginx:1.21.6
镜像,将 ConfigMap 中的配置文件挂载到容器内。
- Nginx 服务:创建
NodePort
类型服务,通过节点的 31437 端口将 Nginx 服务暴露给集群外部。 tomcat4.0.yaml 文件用于在 Kubernetes 集群中部署包含 Tomcat 应用和 Nginx 负载均衡器的应用环境,下面是其主要组成部分的简要介绍:
- 命名空间:创建
fr-server
命名空间,用于资源隔离。
- Tomcat StatefulSet:部署两个 Tomcat 实例,使用
tomcat:9.0.44 - jdk8
镜像,将物理机 /root/tomcat_server/webroot
目录挂载到容器 /usr/local/tomcat/webapps/fr
目录。同时使用 Pod 反亲和性策略,确保实例分布在不同节点。
- Tomcat 服务:创建
ClusterIP
类型服务,将集群内部流量转发到 Tomcat Pod 的 8080 端口。
- Nginx ConfigMap:存储 Nginx 的配置文件,配置 Nginx 将请求代理到 Tomcat 后端服务。
- Nginx Deployment:部署一个 Nginx 实例,使用
nginx:1.21.6
镜像,将 ConfigMap 中的配置文件挂载到容器内。
- Nginx 服务:创建
NodePort
类型服务,通过节点的 31437 端口将 Nginx 服务暴露给集群外部。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| yum install -y unzip docker pull nignix docker pull tomcat:9.0.44-jdk8 docker pull redis
unzip /root/webroot.zip -d /root/tomcat_server/
kubectl apply -f /root/tomcat_server/tomcat4.0.yaml
kubectl get namespaces kubectl get pods -n fr-server kubectl get services -n fr-server
kubectl delete -f /root/tomcat_server/tomcat4.0.yaml kubectl apply -f /root/tomcat_server/tomcat4.0.yaml
kubectl exec -it tomcat-statefulset-0 -n fr-server -- ls /usr/local/tomcat/webapps/fr
kubectl logs -n fr-server <nginx-pod-name>
192.168.1.1 - - [timestamp] "GET /fr/decision HTTP/1.1" 200 ... 192.168.1.1 - - [timestamp] "GET /fr/decision HTTP/1.1" 200 ...
kubectl logs -n fr-server tomcat-statefulset-0 kubectl logs -n fr-server tomcat-statefulset-1
|
访问tomcat
http://192.168.200.120:31437/fr/decision
http://192.168.200.121:31437/fr/decision
http://192.168.200.122:31437/fr/decision
mysql主从同步
mysql_stat.yaml
文件用于在 Kubernetes 集群中部署一个 MySQL 主从复制集群,包含以下组件:
主节点 (Master):提供数据库读写服务。
从节点 (Slave):实时同步主节点数据(基于 binlog 复制)。
存储:使用本地持久卷(PV/PVC)保存数据。
网络:
- Headless Service:用于集群内部 DNS 发现。
- NodePort Service:暴露主节点到集群外部(端口
31306
)。
配置管理:通过 ConfigMap 管理 MySQL 配置文件。
安全:Secret 存储 MySQL root 密码(示例密码为 root
)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| mkdir -p /root/mysql_k8s/master/data
mkdir -p /root/mysql_k8s/slave/data
cd mysql_server kubectl apply -f mysql_stat.yaml
kubectl get ns mysql-server
kubectl get pods -n mysql-server
kubectl get pv,pvc -n mysql-server
kubectl get svc -n mysql-server
kubectl exec -it mysql-source-0 -n mysql-server -- mysql -uroot -proot -e "SHOW MASTER STATUS;"
kubectl exec -it mysql-replica-0 -n mysql-server -- mysql -uroot -proot
CHANGE MASTER TO MASTER_HOST='mysql-source-headless.mysql-server.svc.cluster.local', MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; START SLAVE;
kubectl exec -it mysql-replica-0 -n mysql-server -- mysql -uroot -proot -e "SHOW SLAVE STATUS\G"
|
测试数据同步
1 2 3 4 5 6 7 8 9 10
| kubectl exec -it mysql-source-0 -n mysql-server -- mysql -uroot -proot
CREATE DATABASE test; USE test; CREATE TABLE users (id INT, name VARCHAR(20)); INSERT INTO users VALUES (1, 'Tetuka');
kubectl exec -it mysql-replica-0 -n mysql-server -- mysql -uroot -proot -e "SELECT * FROM test.users;"
|