Deployment脚本部署Tomcat集群

部署是主节点向从节点发送指令,创建容器的过程;k8s支持yml格式的部署脚本

Deployment部署脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apiVersion: extensions/v1beta1 # 解析器版本
kind: Deployment
metadata: # 元数据
name: tomcat-deploy # 部署文件的名称
spec:
replicas: 2 # 部署 pod 数目
template:
metadata:
labels:
app: tomcat-cluster # pod 名
spec:
containers:
- name: tomcat-cluster # 创建的docker容器名
image: tomcat # 镜像来源
ports:
- containerPort: 8080 # tomcat容器对外服务端口

部署命令

  • kubectl create -f yml 创建部署
  • kubectl apply -f yml 更新部署
  • kubectl get pod [-o wide] 查看已部署的pod
  • kubectl describe pod pod_name 查看pod详情
  • kubectl logs [-f] pod_name 查看pod输出日志

部署步骤

  1. 创建***.yml 按照示例编写
  2. kubectl create -f ***.yml 创建pod
  3. kubectl get deployment 查看部署状态

外部访问 Tomcat 集群

在从节点上容器对外暴露的端口封装在Pod内,外界不能跨过Pod访问内部的容器。为了让外部能访问容器服务,做法是:在主节点上创建 service 服务,并向外暴露端口,通过访问 service服务,再由 service 转发到具体的 tomcat 服务,实现外部访问,也可以实现负载均衡

  1. 创建tomcat-service.yml
  2. kubectl create -f tomcat-service.yml
  3. kubectl get service
  4. kubectl descrive service service_name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# tomcat-service.yml
apiVersion: v1
kind: Service
metadata:
name: tomcat-service
labels:
app: tomcat-service
spec:
# type: NodePort
selector:
app: tomcat-cluster # Service要对应的目标 pod 的名称
ports:
- port: 8000 # Service 对外端口
targetPort: 8080 # 目标服务端口
# nodePort: 32500

这种方式可以在宿主机内部通过kubectl get services查看Cluster-IP,然后通过curl Cluster-IP:8080/.../...的形式访问 Tomcat 集群服务,但是外界无法访问Cluster-IP,因为外部只能看到宿主机的IP,如何通过宿主机IP+端口转到Cluster-IP+端口呢?

端口转发工具 Rinetd

Rinetd是Linux中的重定向传输控制协议工具,可将源IP端口数据转发到目标IP端口,在Kubernetes中用于将Service服务对外暴露

安装Rinetd

  1. cd /usr/local
  2. 下载源码:wget http://www.boutell.com/rinted/http/rinetd.tar.gz
  3. 解压并进入:tar -zxvf rinetd.tar.gzcd rinetd
  4. 替换字符串:sed -i 's/65536/65535/g' rinetd.c
  5. mkdir -p /usr/man
  6. 安装gcc:yum install -y gcc
  7. 编译并安装:make && make install

端口映射

  1. vi /etc/rinetd.conf,添加:0.0.0.0 8001 10.100.22.231 8000

    0.0.0.0表示哪些客户端可以访问,8001表示对外暴露的端口,10.100.22.231为将8001接受的数据转发到宿主机内的IP,8000为转发到的端口

  2. 加载配置文件:rinetd -c /etc/rinetd.conf

对集群资源限定

tomcat-deploy.yml做如下修改:

1
2
3
4
5
6
7
8
9
spec:
spec:
containers:
resources: # 最小资源限制
cpu: 0.5
memory: 200Mi
limits: # 最大资源限制
cpu: 1
memory: 512Mi

更新已部署的集群服务:kubectl apply -f tomcat-deploy.yml

您的支持鼓励我继续创作!