网盘资料地址
https://pan.baidu.com/s/15DLwyQlWLw18Yzsz2Ef9dA
mif2

01 内容编排与Kubernetes介绍

集群环境容器部署的困境一个应用集群 10台服务器
Nginx 10 + Tomcat 10 + Mysql 4 + redis 1

需维护的实例太多太复杂,手动维护效率太低

资源如何充分利用

2万台服务器怎么办
容器编排:在哪些宿主机上安装什么容器,这些容器以什么样的方式通信与被管理

容器编排工具对比

docker compose 单机容器编排
docker swarm docker官方集群容器编排
kubernetes Google官方集群容器编排
k8s:kubernetes k+8个英文字母+s
image.png

集群容器管理几乎被k8s统一天下
image.png

Kubernetes的职责

自动化容器的部署和复制
随时扩展或收缩容器规模 (扩展机器数量只需要修改参数)
容器分组Group,并且提供容器间的负载均衡
实时监控(内置管理工具),及时故障发现,自动替换
[

](https://blog.csdn.net/SUNGGGM/article/details/108249632)

02-K8S基本概念

k8s基本结构


image.png

K8s Master

k8s集群管理节点

Node

k8s集群的被管理节点

POD(豆荚-一个应用)

  • POD是“容器”的容器,可以包含多个“Container”
  • POD是K8S最小可部署的单元,一个POD就是一个进程
  • POD内部容器网络互通,每个POD都有独立虚拟IP
  • POD都是部署完整的应用或模块

image.png
POD中内置了Pause容器

  • 提供共享的网络命名空间
  • 为当前的POD提供共享的Volume,挂载数据卷
    image.png

Pause容器使得pod内的容器通过localhost就能相互访问

Replication Controller(复制控制器)

  • 创建指定数量的POD
  • 监控POD,保证POD的数量

    Service

    跨主机,跨容器的网络通信,底层由kube-proxy实现

    k8s核心组件

  • etcd保存了整个集群的状态;

  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡

03-K8S集群部署

K8S的发展史
k8s搭建集群软硬件配置要求

国内安装K8S的四种途径

  1. 使用kubeadmin通过离线镜像安装
  2. 使用阿里公有云平台k8s,需要舍得花钱
  3. 通过yum官方仓库安装,上古版本 v1.5
  4. 二进制包的形式进行安装,kubeasz(GitHub)

本文通过第一种方式安装k8s集群

环境准备

k8s最小集群,1个Master节点,2个Node节点,共3台虚拟机

  • Centos 7 Master * 1
    • Master:192.168.0.31
  • Centos Node * 2
    • Node1:192.168.0.41
    • Node2:192.168.0.42

如下操作每个节点主机都需要进行设置,个别命令注意区分执行节点

设置主机名与时区

  1. # 都要执行
  2. timedatectl set-timezone Asia/Shanghai
  3. # 31上执行
  4. hostnamectl set-hostname master
  5. # 41上执行
  6. hostnamectl set-hostname node1
  7. # 42上执行
  8. hostnamectl set-hostname node2

添加hosts网络主机配置

三台虚拟机都要设置

  1. vim /etc/hosts
  2. 192.168.0.31 master
  3. 192.168.0.41 node1
  4. 192.168.0.42 node2

关闭防火墙 (生产勿执行)

三台虚拟机都要设置,生产环境跳过这一步

  1. # SELINUX为安全增强模块
  2. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  3. setenforce 0
  4. systemctl disable firewalld
  5. systemctl stop firewalld

安装基础工具

安装资源上传

将资源包上传至每台虚拟

  1. mkdir /usr/local/k8s-install
  2. cd /usr/local/k8s-install

XFTP上传安装文件
image.png

安装Docker

  1. tar -zxvf docker-ce-18.09.tar.gz
  2. cd docker
  3. yum localinstall -y *.rpm
  4. systemctl start docker
  5. systemctl enable docker

确保cgroups在同一组

  1. docker info |grep cgroup
  2. > cgroups

image.png

安装kubeadm

kubeadm是k8s集群部署工具

  1. cd /usr/local/k8s-install/kubernetes-1.14
  2. tar -zxvf kube114-rpm.tar.gz
  3. cd kube114-rpm
  4. yum localinstall -y *.rpm

关闭交换区

防止k8s安装与运行过程中使用swap分区导致的异常,需要关闭交换分区

  1. swapoff -a
  2. vi /etc/fstab
  3. #swap一行注释

配置网桥

  1. cat <<EOF > /etc/sysctl.d/k8s.conf
  2. net.bridge.bridge-nf-call-ip6tables = 1
  3. net.bridge.bridge-nf-call-iptables = 1
  4. EOF
  5. sysctl --system

加载k8s镜像

  1. docker load -i k8s-114-images.tar.gz
  2. docker load -i flannel-dashboard.tar.gz

利用kubeadm部署集群

配置Master主服务器

在Master节点上执行如下命令

  1. kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16
  2. mkdir -p $HOME/.kube
  3. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  4. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  5. kubectl get nodes
  6. #查看pod情况
  7. kubectl get pod --all-namespaces
  8. #安装flannel网络组件
  9. kubectl create -f kube-flannel.yml

加入NODE节点

  1. kubeadm join 192.168.0.31:6443 --token o6of46.215n8pmrgk613jhi \
  2. --discovery-token-ca-cert-hash sha256:5163e0acf843ccf5d6c63b674c87949fd12f95a771f0628df73f76bf361c547b

样例如上,具体命令复制Master节点上的输出
在Master上执行如下命令,观察节点状态

  1. kubectl get nodes

Master开启仪表盘

在Master节点上执行如下命令,开启仪表盘(Web访问界面)

  1. kubectl apply -f kubernetes-dashboard.yaml
  2. kubectl apply -f admin-role.yaml
  3. kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
  4. kubectl -n kube-system get svc

仪表盘访问地址:http://192.168.0.31:32000,即http://{{Master IP}}:32000

04-Deployment脚本部署Tomcat集群

Deployment(部署)

  • 部署是指Kubernetes向Node节点发送指令,创建容器的过程
  • Kubernetes支持yml格式的部署脚本
  • kubectl create -f 部署yml文件 #创建部署

    yml部署脚本范本

    ```bash apiVersion: extensions/v1beta1 #kubectl api版本 kind: Deployment # 资源类型 metadata: # 元数据 name: tomcat-deploy # 该Deployment的名称 spec: replicas: 2 # 副本数量 template: # 部署模板 metadata:
    1. labels: # pod的标识
    2. app: tomcat-cluster # 自定义标识
    spec:
    1. containers: # 容器组信息
    2. - name: tomcat-cluster # 容器名称
    3. image: tomcat # 容器使用的镜像
    4. ports:
    5. - containerPort: 8080 # 声明容器对外的端口
  1. <a name="URQlU"></a>
  2. ## 与部署相关常用命令
  3. ```bash
  4. # 创建部署
  5. kubectl create -f 部署yml文件
  6. # 更新部署配置,或第一次创建=create
  7. kubectl apply -f 部署yml文件
  8. # 查看已部署pod
  9. kubectl get pod [-o wide]
  10. # 查看Pod详细信息
  11. kubectl describe pod pod名称
  12. # 查看pod输出日志
  13. kubectl logs [-f] pod名称

部署Tomcat集群

  1. kubectl create -f tomcat-deploy.yml
  2. kubectl get pods
  3. kubectl describe pod tomcat-deploy-5fd4fc7ddb-r2nrj

外部访问Tomcat集群

NodePort方式

image.png
NodePort:使用Service(一个特殊的pod)在每个节点开辟一个端口与容器内部端口进行映射
创建tomcat-service.yml,内容如下

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: tomcat-service
  5. labels:
  6. app: tomcat-service # Service也是一个特殊的pod,需要设置lables
  7. spec:
  8. type: NodePort # Service类型
  9. selector:
  10. app: tomcat-cluster # 指定绑定的pod
  11. ports:
  12. - port: 8000 # Service在k8s集群内部暴露的端口
  13. targetPort: 8080 # 被映射的容器暴露端口
  14. nodePort: 32500 # 集群每个Node节点上对外暴露的端口

创建Service

  1. kubectl create -f tomcat-service.yml

查看Service列表

  1. kubectl get svc
  2. # 或
  3. kubectl get services

查看Service详细信息

  1. kubectl describe service tomcat-servic

在浏览器中输入http://{{任意Node节点IP}}:32500 即可访问tomcat

05-基于NFS的集群文件共享

NFS简介

  • NFS,是由SUN公司研制的文件传输协议,全称Network File System
  • NFS主要是采用远程过程调用RPC机制实现文件传输
  • 安装命令yum install -y nfs-utils rpcbind

    集群文件共享

    如何解决集群中文件的统一修改、统一使用?共享
    image.png
    通过在宿主机上安装NFS,将文件共享给多个容器

NFS使用示例

安装NFS服务

执行如下命令,在宿主机上安装NFS,这里我们选择Master节点

  1. yum install -y nfs-utils rpcbind

执行如下命令,配置并启动文件共享

  1. # 创建共享目录
  2. mkdir -p /datda/www-data
  3. # 设置NFS共享文件
  4. echo "/data/www-data 192.168.0.31/24(rw,sync)" > /etc/exports
  5. # 启动nfs服务
  6. systemctl start nfs
  7. # 启动rpcbind服务
  8. systemctl start rpcbind
  9. # 设置服务开机自启动
  10. systemctl enable nfs
  11. systemctl enable rpcbind
  12. # 查看文件共享情况
  13. exportfs
  14. # /data/www-data 192.168.0.31/24

客户端使用NFS服务

在Node节点上执行如下命令,安装NFS客户端

  1. yum install -y nfs-utils

挂载共享文件

  1. # 创建目录
  2. mkdir -p /data/www-data
  3. # 挂载目录
  4. mount 192.168.0.31:/data/www-data /data/www-data

设置开机启动

  1. systemctl enable nfs

辅助命令,查看nfs共享了哪些目录showmount -e 192.168.0.31

容器中使用nfs共享文件

延用之前的Tomcat集群,来加载nfs共享文件,变更该Tomcat集群可以通过kube apply命令修改集群,或者使用kube delete删除集群相关资源,再创建集群。这里我们使用第二种方法。

清理Tomcat集群

  1. # 查看deployment列表
  2. kubectl get deployment
  3. # 删除名为tomcat-deploy的deployment
  4. kubectl delete deployment tomcat-deploy
  5. # 查看service列表
  6. kubectl get service
  7. # 删除名为tomcat-deploy的service
  8. kubectl delete service tomcat-deploy

修改delployment

修改tomcat-deploy.yml内容如下

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: tomcat-deploy
  5. spec:
  6. replicas: 2
  7. template:
  8. metadata:
  9. labels:
  10. app: tomcat-cluster
  11. spec:
  12. volumes: # 创建volume数据卷
  13. - name: web-app # 数据卷名称
  14. hostPath: # 数据卷在宿主机上的路径
  15. path: /data/www-data
  16. containers:
  17. - name: tomcat-cluster
  18. image: tomcat:latest
  19. ports:
  20. - containerPort: 8080
  21. volumeMounts: # 绑定数据卷
  22. - name: web-app # 匹配之前创建的数据卷名称
  23. mountPath: /usr/local/tomcat/webapps # 指定容器中的挂载目录

创建deployment

  1. kubectl create -f tomcat-deploy.yml

使用命令查看生效情况

  1. # 查看deployment状态
  2. kubectl get deployment
  3. # 查看pod状态
  4. kubectl get pod
  5. # 进入容器,查看文件是否挂载成功
  6. kubectl exec -it tomcat-deploy-6cc6d68877-9wkwm /bin/bash
  7. # 在容器内查看文件
  8. ls /usr/local/tomcat/webapps
  9. # 在nfs宿主机的/data/www-data目录新增、修改文件,观察内容是否同步

至此就完成了基于NFS的K8S集群文件共享设置。

配置客户端的NFS自动挂载

使用mount命令挂载,重启系统后将失效,需配置/etc/fstab

  1. # /etc/fstab中添加如下配置
  2. 192.168.0.31:/data/www-data /data/www-data nfs defaults 0 0

06-基于Rinted的Service负载均衡

Service提供负载均衡实现

image.png
这里我们直接使用Service的负载均衡,不再将端口直接暴露在宿主机节点上,集群内部通过k8s内部网络相互访问。由tomcat-service这个特殊的pod来实现流量转发与负载均衡。
修改tomcat-service.yml如下:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: tomcat-service
  5. labels:
  6. app: tomcat-service # Service也是一个特殊的pod,需要设置lables
  7. spec:
  8. # type: NodePort # Service类型
  9. selector:
  10. app: tomcat-cluster # 指定绑定的pod
  11. ports:
  12. - port: 8000 # Service在k8s集群内部暴露的端口
  13. targetPort: 8080 # 被映射的容器暴露端口
  14. # nodePort: 32500 # 集群每个Node节点上对外暴露的端口

仅需注释如下两行内容

  1. # type: NodePort # Service类型
  2. # nodePort: 32500 # 集群每个Node节点上对外暴露的端口

变更service

  1. kubectl apply -f tomcat-service.yml

在NFS共享目录中增加测试index.jsp,验证负载均衡效果

  1. # 在Master节点(NFS Server)中执行如下命令
  2. mkdir /data/www-data/test/
  3. echo "IP:<%=request.getLocalAddr()%>" > /data/www-data/test/index.jsp
  4. # 查看Service内部IP
  5. kubectl get service tomcat-service
  6. # 使用curl测试,10.103.113.6为上一步中获取的ClusterIP
  7. curl 10.103.113.6:8000/test/index.jsp
  8. # 返回处理请求的pod容器的ip
  9. # IP:10.244.1.17

端口转发工具-Rinetd

上一步中10.*段的IP为K8S集群内部通信使用的IP,如何将这些IP提供的端口映射到外部呢?

  • Rinetd是Linux操作系统中为重定向传输控制协议工具
  • 可将源IP端口数据转发至目标IP端口
  • 在Kubernetes中用于将service服务对外暴露

    rinted安装

    rinted源码无法从官网下载,资源以事先准备好
    这里我们使用Master节点作为端口转发宿主机,所有rinted安装在Master节点(192.168.0.31)上,以下命令均在该节点执行。
    1. # 解压rinted源码
    2. tar -zxf rinetd.tar.gz
    3. cd rinetd/
    4. # 修改rinted运行映射的端口范围
    5. sed -i 's/65536/65535/g' rinted.c
    6. # 创建rinted依赖目录
    7. mkdir -p /usr/man/
    8. # 安装C语言编译器
    9. yum install -y gcc
    10. # 编译并安装
    11. make && make install

    配置rinted

    增加配置文件/etc/rinetd.conf ```bash

    宿主机映射监听的IP+端口(0.0.0.0表示所有IP)、映射目的IP+端口

    10.103.113.6即tomcat-service使用的ClusterIP

    0.0.0.0 8000 10.103.113.6 8000
  1. 运行rintedrinetd -c /etc/rinetd.conf
  2. <a name="qD8li"></a>
  3. ### 查看映射情况
  4. 使用netstat -nptl可以看到rinetd开启了8000端口
  5. 使用如下地址可在浏览器中访问rinted+service提供的服务
  6. [http://192.168.0.31:8000/test/index.jsp](http://192.168.0.31:8000/test/index.jsp)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22142574/1628988920240-edacbeef-149c-4d24-ba88-3ce9df2ddad5.png#clientId=u649d21b7-b323-4&from=paste&id=ua836ae39&margin=%5Bobject%20Object%5D&name=image.png&originHeight=164&originWidth=1010&originalType=url&ratio=1&size=22111&status=done&style=none&taskId=u9c528d6b-2a28-40df-8d74-04212b7fff3)
  7. 总结目前我们已经学习了k8s集群对外暴露服务的两种方式
  8. 使用Service提供的NodePort,在每一个Node节点开启端口映射,实现流量的转发<br />Rinted+Service,使用Rinted设置对外暴露的IP+端口,通过Service实现访问的负载均衡<br />一般而言,Rinted+Service性能上会略胜一筹,大型集群应用优先考虑选择该种方式。<br />[
  9. ](https://blog.csdn.net/SUNGGGM/article/details/108303192)
  10. <a name="IzzO0"></a>
  11. # 07-集群配置调整与资源限定
  12. <a name="pY7LQ"></a>
  13. ## K8S部署调整命令
  14. 更新集群配置
  15. ```bash
  16. kubectl apply -f yml文件路径

删除部署(Deployment)|服务(Service)

  1. kubectl delete deployment|service 部署|服务名称

资源限定

  1. containers:
  2. - name: tomcat-cluster
  3. image: tomcat:latest
  4. resources:
  5. requests: # 容器运行最小所需的资源,不满足则无法运行
  6. cpu: 1 # 可以是小数,如0.5
  7. memory: 500Mi
  8. limits: # 容器运行过程中,对多能暂用的资源
  9. cpu: 2
  10. memory: 1024Mi

requests设置了创建容器的基本需要
limits限定了容器使用的最大资源

Tomcat部署实验

修改tomcat-deploy.yml,增加resource配置

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: tomcat-deploy
  5. spec:
  6. replicas: 2
  7. template:
  8. metadata:
  9. labels:
  10. app: tomcat-cluster
  11. spec:
  12. volumes:
  13. - name: web-app
  14. hostPath:
  15. path: /data/www-data
  16. containers:
  17. - name: tomcat-cluster
  18. image: tomcat:latest
  19. resources:
  20. requests:
  21. cpu: 0.5
  22. memory: 200Mi
  23. limits:
  24. cpu: 1
  25. memory: 512Mi
  26. ports:
  27. - containerPort: 8080
  28. volumeMounts:
  29. - name: web-app
  30. mountPath: /usr/local/tomcat/webapps

生效配置

  1. kubectl apply -f tomcat-deploy.yml

查看配置生效情况

  1. kubectl describe pod tomcat-deploy-779d75c8f-ccjgl

08-项目实战:K8S构建贝亲婴童商城

项目拓扑

image.png
该项目拓扑结构如图所示,基本说明如下

  • 使用文件共享区的数据库脚本初始化mysql数据库
  • 使用beiqin-db-service在集群内部暴露mysql服务
  • 使用openjdk:8u222作为基础镜像,部署web应用(SpringBoot开发)
  • 使用beiqin-app-service暴露应用的端口

    部署所需资源文件

    部署所需资源均在文末的百度网盘中,所需资源目录结构如下 ```bash [root@master www-data]# tree beiqin beiqin ├── beiqin-app-deploy.yml # web应用部署文件 ├── beiqin-app-service.yml # web应用service部署文件 ├── beiqin-db-deploy.yml # 数据库部署文件 ├── beiqin-db-service.yml # 数据库service部署文件 ├── dist │ ├── application.yml # 应用程序配置文件 │ └── beiqin-app.jar # SpringBoot应用程序 └── sql └── beiqin.sql # 数据库初始化sql
  1. <a name="lUuDN"></a>
  2. ## 设置并挂载NFS文件
  3. 为了简化操作步骤,这里我们延用《05-基于NFS的集群文件共享》中的NFS设置,将Master节点中的/data/www-data共享到Node节点中的/data/www-data目录中<br />将需要共享的文件复制到Master节点的/data/www-data目录即可
  4. <a name="gCDg8"></a>
  5. ## 部署并初始化数据库
  6. 编写beiqin-db-deploy.yml
  7. ```bash
  8. apiVersion: apps/v1beta1 # 等价于extensions/v1beta1(1.6版本以前),1.6版本之后都可以使用apps/*
  9. kind: Deployment # 这是一个部署脚本
  10. metadata: # 元数据信息
  11. name: beiqin-db-deploy # deployment的名称
  12. spec: # 详细信息
  13. replicas: 1 # 部署的副本数量
  14. template: # 模板的设置选项
  15. metadata:
  16. labels: # 标签
  17. app: beiqin-db-deploy # 自定义app标签
  18. spec:
  19. volumes: # 定义数据卷
  20. - name: beiqin-db-volume # 数据卷名称
  21. hostPath: # 主机路径
  22. path: /data/www-data/beiqin/sql/ # Node宿主机上共享文件夹的路径
  23. containers:
  24. - name: beiqin-db-deploy
  25. image: mysql:5.7 # 容器使用镜像
  26. ports:
  27. - containerPort: 3306 # 容器对外声明的暴露端口
  28. env:
  29. - name: MYSQL_ROOT_PASSWORD # 设置mysql的root密码
  30. value: "root"
  31. volumeMounts: # 设置挂载点
  32. - name: beiqin-db-volume # 挂载之前定义的数据卷
  33. mountPath: /docker-entrypoint-initdb.d # 挂载到容器的目录,docker-entrypoint-initdb.d为mysql初始化脚本的目录

部署数据库

  1. kubectl create -f beiqin-db-deploy.yml

验证部署情况

  1. # 查看pod
  2. kubectl get pods
  3. # 进入pod实例内部
  4. kubectl exec -it beiqin-db-deploy-869d9cbdcb-6j567 /bin/bash
  5. # 在容器内部登录mysql
  6. mysql -uroot -proot
  7. # 查看数据库
  8. show databases;
  9. # 使用beiqin db,统计t_goods表
  10. use beiqin;
  11. show tables;
  12. select count(*) from t_goods;

创建db服务

编写beiqin-db-service.yml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: beiqin-db-service
  5. labels: # Service是特殊的pod,也必须定义labels
  6. app: beiqin-db-service
  7. spec:
  8. selector:
  9. app: beiqin-db-deploy
  10. ports:
  11. - port: 3310 # service对外暴露端口(对外指的是:容器外,K8S集群内部)
  12. targetPort: 3306 # 容器内部端口

创建beiqin-db-service

  1. kubectl create -f beiqin-db-service.yml


验证

  1. 查看service列表
  2. kubectl get svc
  3. 查看beiqin-db-service详情
  4. kubectl describe svc beiqin-db-service

部署Web应用

编写beiqin-app-deploy.yml,大部分字段意义与beiqin-db-deploy.yml相同,不再赘述。

  1. apiVersion: apps/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: beiqin-app-deploy
  5. spec:
  6. replicas: 2
  7. template:
  8. metadata:
  9. labels:
  10. app: beiqin-app-deploy
  11. spec:
  12. volumes:
  13. - name : beqin-app-volume
  14. hostPath:
  15. path: /data/www-data/beiqin/dist
  16. containers:
  17. - name: beiqin-app-deploy
  18. image: openjdk:8u222-jre
  19. command: ["/bin/sh"] # 容器部署完成后默认执行的命令
  20. args: ["-c","cd /usr/local/beiqin-dist;java -jar beiqin-app.jar"] # 启动web应用的命令
  21. volumeMounts:
  22. - name: beqin-app-volume
  23. mountPath: /usr/local/beiqin-dist

部署web应用

  1. kubectl create -f beiqin-app-deploy.yml

查看应用状态

  1. # 查看pod列表
  2. kubectl get pods
  3. # 查看容器日志
  4. kubectl logs -f beiqin-app-deploy-5bc96d54d9-pjnvf

确认beiqin-app.jar使用的配置文件application.yml

  1. server:
  2. port: 80
  3. spring:
  4. datasource:
  5. driver-class-name: com.mysql.jdbc.Driver
  6. url: jdbc:mysql://beiqin-db-service:3310/beiqin?useUnicode=true&characterEncoding=utf-8&useSSL=false
  7. username: root
  8. password: root
  9. mvc:
  10. favicon:
  11. enabled: false
  12. mybatis:
  13. mapper-locations: classpath:/mapper/*.xml
  14. configuration:
  15. map-underscore-to-camel-case: true

注意url: jdbc:mysql://beiqin-db-service:3310/beiqin?useUnicode=true&characterEncoding=utf-8&useSSL=false,数据库连接不再直接使用数据库的IP,而是使用DB Service中定义的服务名称/主机名称,这样配置文件就不用写死IP。

创建应用服务

编写beiqin-app-service.yml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: beiqin-app-service
  5. labels:
  6. app: beiqin-app-service
  7. spec:
  8. selector:
  9. app: beiqin-app-deploy
  10. ports:
  11. - port: 80
  12. targetPort: 80

创建beiqin-app-service

  1. kubectl create -f beiqin-app-service.yml

验证

  1. # 查看service的CLUSTER-IP
  2. kubectl get svc
  3. # 验证web应用接口
  4. curl 10.101.231.228/goods?gid=1788

使用rinetd实现端口转发

在Master节点上修改/etc/rinetd.conf

  1. 0.0.0.0 80 10.101.231.228 80

加载rinetd配置

  1. rinetd -c /etc/rinetd.conf

在浏览器中访问如下地址(192.168.0.31为Master节点/IP),就能看到商城的页面了。
http://192.168.0.31/goods?gid=1788
image.png

  1. 版权说明
  2. 本文章内容为马士兵教育《架构师高级技能kubernetes入门到精通》课程的学习笔记
  3. 百度网盘上相关源码资料包 提取码:xdji