Kubernetes——使用Deployment脚本部署Tomcat集群

Kubernetes——使用Deployment脚本部署Tomcat集群

一、使用Deployment脚本部署Tomcat集群

1.1 Deployment脚本部署概念

  • 部署是指Kubernetes向Node节点发送指令,创建容器的过程

  • Kubernetes支持yml格式的脚本部署

  • kubectl create -f 部署的yml文件 # 创建部署

1.2 部署文件范本

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背景

​ Kubernetes的官方文档中并没有对apiVersion的详细解释,而且因为K8S本身版本也在快速迭代,有些资源在低版本还在beta阶段,到了高版本就变成了stable。

​ 如Deployment:

  • 1.6版本之前 apiVsersion:extensions/v1beta1

  • 1.6版本到1.9版本之间:apps/v1beta1

  • 1.9版本之后:apps/v1

1.2.1.1.2 各种apiVersion的含义

alpha

  • 该软件可能包含错误。启用一个功能可能会导致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/v1beta1

apps/v1

  • kubernetes1.9版本中,引入apps/v1,deployment等资源从extensions/v1beta1,
    apps/v1beta1apps/v1beta2迁入apps/v1,原来的v1beta1等被废弃。

    apps/v1代表:包含一些通用的应用层的api组合,如:Deployments, RollingUpdates, and ReplicaSets

batch/v1

  • 代表job相关的api组合

    在kubernetes1.8版本中,新增了batch/v1beta1,后CronJob 已经迁移到了
    batch/v1beta1,然后再迁入batch/v1

autoscaling/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组合
1.2.1.1.3 查看当前版本支持的apiVerison

执行 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.2 kind

kind表示当前文件的类型,例如项目快速生产的部署文件则叫Deployment,服务的部署文件则叫Service

1.2.1.3 metadata.name

表示当前部署文件的名称

1.2.1.3 spec.replicas

表示部署的份数

1.2.1.4 spec.replicas.template.metadata.lables.app

新产生的pod的label标签

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

被创建容器的docker镜像来源

1.2.1.8 spec.replicas.template.spec.containers.ports.containerPort

被创建容器对外开放的端口

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的时候,需要用到这个名称
				app: 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 【文件】.yml
1.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-node01   <none>           <none>
tomcat-deploy-54488fbdd5-9qb5l   1/1     Running   0          2m39s   10.244.2.14   k8s-node02   <none>           <none>

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:  <none>
# 隶属于哪个节点
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:        <none>
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:    <none>
    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:  <none>
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其他文档列表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes部署Tomcat集群,可以使用以下步骤: 1. 准备Docker镜像:可以使用官方的Tomcat镜像,或者自己构建镜像,并将其上传到Docker Registry中。 2. 创建Deployment使用kubectl create命令创建一个Deployment,指定使用的镜像和副本数,例如: ``` kubectl create deployment tomcat --image=tomcat:latest --replicas=3 ``` 这将创建一个名为tomcatDeployment使用最新版的Tomcat镜像,并启动3个副本。 3. 创建Service:使用kubectl expose命令创建一个Service,将Tomcat容器的端口暴露出来,例如: ``` kubectl expose deployment tomcat --type=LoadBalancer --name=tomcat-svc --port=8080 --target-port=8080 ``` 这将创建一个名为tomcat-svc的Service,将Tomcat容器的8080端口暴露出来,并使用LoadBalancer类型的Service。 4. 创建ConfigMap:使用kubectl create configmap命令创建一个ConfigMap,用于存储Tomcat的配置文件,例如: ``` kubectl create configmap tomcat-config --from-file=./tomcat/conf/server.xml ``` 这将创建一个名为tomcat-config的ConfigMap,并将当前目录下的server.xml文件存储到ConfigMap中。 5. 创建StatefulSet:使用kubectl create命令创建一个StatefulSet,指定使用的镜像、副本数和ConfigMap,例如: ``` kubectl create -f tomcat-statefulset.yaml ``` 这将从tomcat-statefulset.yaml文件中创建一个名为tomcat的StatefulSet,使用最新版的Tomcat镜像,并启动3个副本。tomcat-statefulset.yaml文件内容如下: ``` apiVersion: apps/v1 kind: StatefulSet metadata: name: tomcat spec: serviceName: tomcat-svc replicas: 3 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcat image: tomcat:latest ports: - containerPort: 8080 volumeMounts: - name: tomcat-config mountPath: /usr/local/tomcat/conf/server.xml subPath: server.xml volumeClaimTemplates: - metadata: name: tomcat-data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi ``` 其中,volumeClaimTemplates用于定义存储卷,将每个副本的数据存储到持久化存储中。 6. 验证部署使用kubectl get命令查看Deployment、Service和StatefulSet的状态,例如: ``` kubectl get deployment tomcat kubectl get service tomcat-svc kubectl get statefulset tomcat ``` 确认Deployment、Service和StatefulSet都处于运行状态,并且Service的EXTERNAL-IP不为<pending>。 7. 访问Tomcat使用浏览器访问Service的EXTERNAL-IP,即可访问Tomcat Web应用。如果有多个副本,则可以通过访问不同的Pod IP地址来访问不同的副本。 需要注意的是,以上步骤只是一个简单的示例,实际部署可能需要针对具体的需求进行调整。例如,可能需要配置存储卷、使用Ingress等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值