在上一篇我们介绍了如何用Dashboard可视化界面进行Tomcat集群的部署,但是在实际的集群环境下,我们更多的是通过编写Deployment 脚本来部署集群。
Deployment (部署)
-
Deployment 是指
Kubernetes向Node节点发送指令,创建容器的过程 -
Kubernetes支持yml格式的部署脚本 -
部署命令如下:
|
|
Deployment脚本基本格式
|
|
与部署相关的常用kubectl命令
|
|
手动部署tomcat集群
这里我们将部署脚本都放在 /usr/local/k8s/tomcat-deploy 目录下,你也可以创建自己的目录存放部署脚本。
-
创建目录
1 2$ mkdir /usr/local/k8s/tomcat-deploy $ cd /usr/local/k8s/tomcat-deploy -
编写部署脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18$ vim tomcat-deployment.yml # 输入如下的内容 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcat-deploy spec: replicas: 2 template: metadata: labels: app: tomcat-cluster spec: containers: - name: tomcat-cluster image: tomcat:latest ports: - containerPort: 8080
-
部署 tomcat 集群
1 2$ kubectl create -f tomcat-deploy.yml deployment.extensions/tomcat-deploy created -
查看部署的 pod
1 2 3 4[root@master tomcat-deploy]# kubectl get pods NAME READY STATUS RESTARTS AGE tomcat-deploy-5fd4fc7ddb-7vw4f 1/1 Running 0 98s tomcat-deploy-5fd4fc7ddb-t4wvp 1/1 Running 0 98s我们看到,已经启动了两个
pod,且都是Running状态,这两个pod分别部署在node1和node2 -
至此,tomcat集群已经部署完毕,我们可以通过
kubectl describe pod [pod名称]命令查看pod部署的详细信息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 40 41 42 43 44 45 46 47 48 49 50$ kubectl describe pod tomcat-deploy-5fd4fc7ddb-7vw4f Name: tomcat-deploy-5fd4fc7ddb-7vw4f Namespace: default Priority: 0 PriorityClassName: <none> Node: node1/192.168.233.129 Start Time: Fri, 15 Jan 2021 11:43:22 +0800 Labels: app=tomcat-cluster pod-template-hash=5fd4fc7ddb Annotations: <none> Status: Running IP: 10.244.1.7 Controlled By: ReplicaSet/tomcat-deploy-5fd4fc7ddb Containers: tomcat-cluster: Container ID: docker://fa36632bdf28f58e1ad61dee3c93da88df348d3a98c34531d4b6fa12a73a18f8 Image: tomcat:latest Image ID: docker-pullable://tomcat@sha256:94cc18203335e400dbafcd0633f33c53663b1c1012a13bcad58cced9cd9d1305 Port: 8080/TCP Host Port: 0/TCP State: Running Started: Fri, 15 Jan 2021 11:43:38 +0800 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-fkln2 (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-fkln2: Type: Secret (a volume populated by a Secret) SecretName: default-token-fkln2 Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m1s default-scheduler Successfully assigned default/tomcat-deploy-5fd4fc7ddb-7vw4f to node1 Normal Pulling 4m kubelet, node1 Pulling image "tomcat:latest" Normal Pulled 3m45s kubelet, node1 Successfully pulled image "tomcat:latest" Normal Created 3m45s kubelet, node1 Created container tomcat-cluster Normal Started 3m45s kubelet, node1 Started container tomcat-cluster
从外部访问Tomcat集群(NodePort)方式
上面我们部署了tomcat集群,但是这个集群只能在集群内部访问,如何将tomcat暴露给外部使用呢?回顾我们的Deployment部署脚本,有如下两行:
|
|
我们只设置了容器对外暴露的端口是8080,但是没有配置任何对外暴露的设置。
如下图,我们可以部署一个服务,这个服务也是一个pod,也有自己的虚拟IP和端口,服务pod是部署在master节点上的,当一个外部的请求进来时,会先送达给服务的8000端口。再按照负载均衡的规则分发给两个tomcat容器。这里的服务可以理解为K8S集群上的负载均衡器。

创建Tomcat服务
-
创建脚本
和部署
Deployment类似,我们在/usr/local/k8s/tomcat-service/目录下面,创建一个服务的脚本文件1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16$ cd /usr/local/k8s/tomcat-service $ vim tomcat-service.yml apiVersion: v1 # 版本号 kind: Service # 部署类型:服务 metadata: # 元数据 name: tomcat-service # 服务名称是 tomcat-service labels: # pod标签(因为服务也是一个pod) app: tomcat-service # 自定义标签名 tomcat-service spec: # 详细信息 type: NodePort # 设置服务的类型是“节点端口”,含义是我们将要开辟端口,来和tomcat容器进行端口映射 selector: # 选择器,通过标签来选择我这个服务要绑定的 pod app: tomcat-cluster # 选择 tomcat-cluster 标签的pod,也就是上一步我们已经部署的tomcat pod ports: # 端口设置 - port: 8000 # 当前服务的接收数据的端口 targetPort: 8080 # 目标端口,也就是指向子 tomcat 容器的端口 nodePort: 32500 # tomcat子容器对外暴露的端口(从外部可以直接访问) -
部署服务
1 2$ kubectl create -f tomcat-service.yml service/tomcat-service created这里提示我们服务已经创建了
-
查看服务详情
1 2 3 4$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18h tomcat-service NodePort 10.107.253.196 <none> 8000:32500/TCP /+++++ 2m3s