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

文章目录

  • 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——使用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其他文档列表

  • 初学Kubernetes——k8s简介
  • 初学Kubernetes——Kubernetes的安装
  • 初学Kubernetes——使用Dashboard部署Tomcat集群
  • 初学Kubernetes——使用Deployment脚本部署Tomcat集群
  • 初学Kubernetes——使用NodePort的方式让外部访问Tomcat集群
  • 初学Kubernetes——基于NFS文件文件集群共享
  • 初学Kubernetes——使用NFS映射的目录
  • 初学Kubernetes——使用Rinetd进行service的负载均衡
  • 初学Kubernetes——设置资源限定

你可能感兴趣的:(kubernetes,docker,kubernetes,docker)