- Kubernetes——使用Deployment脚本部署Tomcat集群
- 一、使用Deployment脚本部署Tomcat集群
- 1.1 Deployment脚本部署概念
- 1.2 部署文件范本
- 1.2.1配置文件简介
- 1.2.1.1 apiVersion
- 1.2.1.1.1背景
- 1.2.1.1.2 各种apiVersion的含义
- 1.2.1.1.3 查看当前版本支持的apiVerison
- 1.2.1.2 kind
- 1.2.1.3 metadata.name
- 1.2.1.3 spec.replicas
- 1.2.1.4 spec.replicas.template.metadata.lables.app
- 1.2.1.5 spec.replicas.template.spec.containers
- 1.2.1.6 spec.replicas.template.spec.containers.name
- 1.2.1.7 spec.replicas.template.spec.containers.image
- 1.2.1.8 spec.replicas.template.spec.containers.ports.containerPort
- 1.3 部署相关的常用命令
- 1.4 简单部署一个Tomcat
- 1.4.1编写部署脚本
- 1.4.2 依据脚本进行部署
- 1.4.3 查看部署情况
- Kubernetes其他文档列表
-
部署是指Kubernetes向Node节点发送指令,创建容器的过程
-
Kubernetes支持yml格式的脚本部署
-
kubectl create -f 部署的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
1.2.1配置文件简介
1.2.1.1 apiVersion
1.2.1.1.1背景1.2.1.2 kind Kubernetes的官方文档中并没有对apiVersion的详细解释,而且因为K8S本身版本也在快速迭代,有些资源在低版本还在beta阶段,到了高版本就变成了stable。
如Deployment:
1.2.1.1.2 各种apiVersion的含义
1.6版本之前 apiVsersion:extensions/v1beta1
1.6版本到1.9版本之间:apps/v1beta1
1.9版本之后:apps/v1
1.2.1.1.3 查看当前版本支持的apiVerisonalpha
- 该软件可能包含错误。启用一个功能可能会导致bug
- 随时可能会丢弃对该功能的支持,恕不另行通知
beta
- 软件经过很好的测试。启用功能被认为是安全的。
- 默认情况下功能是开启的
- 细节可能会改变,但功能在后续版本不会被删除
stable
- 该版本名称命名方式:vX这里X是一个整数
- 稳定版本、放心使用
- 将出现在后续发布的软件版本中
v1
- Kubernetes API的稳定版本,包含很多核心对象:pod、service等
apps/v1beta2
- 在kubernetes1.8版本中,新增加了apps/v1beta2的概念,apps/v1beta1同理
DaemonSet,Deployment,ReplicaSet 和StatefulSet的当时版本迁入apps/v1beta2,兼容原有的extensions/v1beta1apps/v1
在kubernetes1.9版本中,引入apps/v1,deployment等资源从extensions/v1beta1,
apps/v1beta1 和 apps/v1beta2迁入apps/v1,原来的v1beta1等被废弃。apps/v1代表:包含一些通用的应用层的api组合,如:Deployments, RollingUpdates, and ReplicaSets
batch/v1
代表job相关的api组合
在kubernetes1.8版本中,新增了batch/v1beta1,后CronJob 已经迁移到了
batch/v1beta1,然后再迁入batch/v1autoscaling/v1
- 代表自动扩缩容的api组合,kubernetes1.8版本中引入。 这个组合中后续的alpha 和
beta版本将支持基于memory使用量、其他监控指标进行扩缩容extensions/v1beta1
- deployment等资源在1.6版本时放在这个版本中,后迁入到apps/v1beta2,再到apps/v1中统一管理
certificates.k8s.io/v1beta1
- 安全认证相关的api组合
authentication.k8s.io/v1
- 资源鉴权相关的api组合
执行 kubectl api-versions
Kubernetes-1.14
[root@k8s-master kubernetes-1.14]# kubectl api-versions admissionregistration.k8s.io/v1beta1 apiextensions.k8s.io/v1beta1 apiregistration.k8s.io/v1 apiregistration.k8s.io/v1beta1 apps/v1 apps/v1beta1 apps/v1beta2 authentication.k8s.io/v1 authentication.k8s.io/v1beta1 authorization.k8s.io/v1 authorization.k8s.io/v1beta1 autoscaling/v1 autoscaling/v2beta1 autoscaling/v2beta2 batch/v1 batch/v1beta1 certificates.k8s.io/v1beta1 coordination.k8s.io/v1 coordination.k8s.io/v1beta1 events.k8s.io/v1beta1 extensions/v1beta1 metrics.k8s.io/v1beta1 networking.k8s.io/v1 networking.k8s.io/v1beta1 node.k8s.io/v1beta1 policy/v1beta1 rbac.authorization.k8s.io/v1 rbac.authorization.k8s.io/v1beta1 scheduling.k8s.io/v1 scheduling.k8s.io/v1beta1 storage.k8s.io/v1 storage.k8s.io/v1beta1 v1
1.2.1.3 metadata.namekind表示当前文件的类型,例如项目快速生产的部署文件则叫Deployment,服务的部署文件则叫Service
1.2.1.3 spec.replicas表示当前部署文件的名称
1.2.1.4 spec.replicas.template.metadata.lables.app表示部署的份数
1.2.1.5 spec.replicas.template.spec.containers新产生的pod的label标签
1.2.1.6 spec.replicas.template.spec.containers.name用于说明被创建的容器的命名规则和来源
1.2.1.7 spec.replicas.template.spec.containers.image被创建容器的名称
1.2.1.8 spec.replicas.template.spec.containers.ports.containerPort被创建容器的docker镜像来源
1.3 部署相关的常用命令被创建容器对外开放的端口
kubectl create -f ./tomcat-deploy.yml # 根据部署脚本创建新的pod kubectl apply -f 部署yml文件 # 更新部署配置,如果没有这个pod,则会新建 kubectl get pod [-o wide] # 获取pod的详细信息 kubectl describe pod [pod名称] # 获取pod最详细的信息 kubectl logs [-f] [pods/kubernetes-dashboard-6647f9f49-8dshd] [--namespace kube-system] # 查看某个pod的日志1.4 简单部署一个Tomcat 1.4.1编写部署脚本
部署脚本如下
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
# 这边要取一个有意义的名字,让人一看就知道这个yaml是干什么用的
name: tomcat-deploy
spec:
# 部署2个tomcat pod
replicas: 2
# pod内部的具体信息
template:
metadata:
labels:
# pod的名称,后续写service的时候,需要用到这个名称
apps: tomcat-cluster
spec:
containers:
# 容器的名字,通常会和${metadata.name}一致
- name: tomcat-cluster
# 拉取的镜像名称
image: tomcat:latest
ports:
# 容器内部对外暴露的端口,因为是tomcat,所以是8080,如果是mysql则是3306
- containerPort: 8080
1.4.2 依据脚本进行部署
上传上面的部署脚本至自己的目录下,后使用kubectl create命令
kubectl create -f 【文件】.yml1.4.3 查看部署情况
使用kubectl get deployment
[root@k8s-master tomcat-deploy]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE tomcat-deploy 2/2 2 2 34s
AVAILABLE与最大数量相同,则说明创建成功
使用kubectl get pod -o wide查看创建的pods的信息
[root@k8s-master tomcat-deploy]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES tomcat-deploy-54488fbdd5-2txwv 1/1 Running 0 2m39s 10.244.1.17 k8s-node01tomcat-deploy-54488fbdd5-9qb5l 1/1 Running 0 2m39s 10.244.2.14 k8s-node02
NAME是指pod的名称,STATUS指的是状态,READY:1/1代表pod内部存在1容器,以及正在运行的容器数量
使用kubectl describe pod tomcat-deploy-54488fbdd5-2txwv
[root@k8s-master tomcat-deploy]# kubectl describe pod tomcat-deploy-54488fbdd5-2txwv # 当前pod的名称 Name: tomcat-deploy-54488fbdd5-2txwv # 相当于java代码中的package,把每个pod进行一个分区,default是默认的命名空间 Namespace: default Priority: 0 PriorityClassName:# 隶属于哪个节点 Node: k8s-node01/192.168.8.65 # 开始时间 Start Time: Fri, 19 Nov 2021 15:55:08 +0800 # 当前的pod名称,统一设置的,会在service中用到 Labels: apps=tomcat-cluster pod-template-hash=54488fbdd5 Annotations: Status: Running IP: 10.244.1.17 Controlled By: ReplicaSet/tomcat-deploy-54488fbdd5 # 当前pod内部的容器信息 Containers: # yml设置的容器信息 tomcat-cluster: Container ID: docker://e8da1daea3a61c75a59924bdbe0f32910545cc7386d60a6252d143e3fe805650 Image: tomcat:latest Image ID: docker-pullable://tomcat@sha256:93ff3bc7fb766a9bb5bb0d1f925f9d8795594d87e8365164908ddddcdaa75ff4 Port: 8080/TCP Host Port: 0/TCP # 当前状态 State: Running Started: Fri, 19 Nov 2021 15:55:28 +0800 Ready: True Restart Count: 0 Environment: Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-r6scl (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-r6scl: Type: Secret (a volume populated by a Secret) SecretName: default-token-r6scl Optional: false QoS Class: BestEffort Node-Selectors: Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s # 当前pod的一些事件 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 11m default-scheduler Successfully assigned default/tomcat-deploy-54488fbdd5-2txwv to k8s-node01 Normal Pulling 11m kubelet, k8s-node01 Pulling image "tomcat:latest" Normal Pulled 11m kubelet, k8s-node01 Successfully pulled image "tomcat:latest" Normal Created 11m kubelet, k8s-node01 Created container tomcat-cluster Normal Started 11m kubelet, k8s-node01 Started container tomcat-cluster
使用kubectl logs tomcat-deploy-54488fbdd5-2txwv可查看pod内部的日志
Kubernetes其他文档列表- 初学Kubernetes——k8s简介
- 初学Kubernetes——Kubernetes的安装
- 初学Kubernetes——使用Dashboard部署Tomcat集群
- 初学Kubernetes——使用Deployment脚本部署Tomcat集群
- 初学Kubernetes——基于NFS文件文件集群共享



