Kubernetes部署一个应用程序

Kubernetes功能

官方定义k8s能够对容器化软件进行部署管理,在不停机的前提下提供简单快速的发布和更新方式。换句话说,如果项目需要多机器节点的微服务架构,并且采用Docker image(镜像)进行容器化部署,那么k8s可以帮助我们屏蔽掉集群的复杂性,自动选择最优资源分配方式进行部署。在此基础上,k8s还提供简单的多实例部署及更新方案,仅需几个操作命令就可以轻松实现

K8s集群简单介绍

下图描述的是拥有一个Master(主)节点和六个Worker(工作)节点的k8s集群

k8s集群

Master 负责管理集群 负责协调集群中的所有活动,例如调度应用程序,维护应用程序的状态,扩展和更新应用程序。

Worker节点(即图中的Node)是VM(虚拟机)或物理计算机,充当k8s集群中的工作计算机。每个Worker节点都有一个Kubelet,它管理该Worker节点并负责与Master节点通信。该Worker节点还应具有用于处理容器操作的工具,例如Docker。

k8s集群角色

部署一个应用程序

本文翻译自 Kubernetes 官网 Using kubectl to Create a Deployment,并有所改写

前提

完成 Kubernetes 集群的安装,请参考文档 安装 Kubernetes 单Master节点
完成 Kuboard 的安装,请参考文档 安装 Kuboard

目标

使用 kubectl 在 k8s 上部署第一个应用程序。

  • kubectl 是 k8s 的客户端工具,可以使用命令行管理集群。
  • 如果参考文档 安装 Kubernetes 单Master节点,您可以在 master 节点的 root 用户使用 kubectl 操作您的集群
  • 也可以尝试 从客户端电脑远程管理 Kubernetes

Kubernetes 部署

在 k8s 上进行部署前,首先需要了解一个基本概念Deployment

Deployment译名为部署。在k8s中,通过发布 Deployment,可以创建应用程序 (docker image) 的实例 (docker container),这个实例会被包含在称为Pod的概念中,Pod是 k8s 中最小可管理单元。

在 k8s 集群中发布 Deployment 后,Deployment 将指示 k8s 如何创建和更新应用程序的实例,master 节点将应用程序实例调度到集群中的具体节点上。

创建应用程序实例后,Kubernetes Deployment Controller 会持续监控这些实例。如果运行实例的 worker 节点关机或被删除,则 Kubernetes Deployment Controller 将在群集中资源最优的另一个 worker 节点上重新创建一个新的实例。这提供了一种自我修复机制来解决机器故障或维护问题。

在容器编排之前的时代,各种安装脚本通常用于启动应用程序,但是不能够使应用程序从机器故障中恢复。通过创建应用程序实例并确保它们在集群节点中的运行实例个数,Kubernetes Deployment 提供了一种完全不同的方式来管理应用程序。

在 Kubernetes 上部署第一个应用程序

下图是在 Kubernetes 集群的基础上,添加上了DeploymentPodContainer

Deployment 处于 master 节点上,通过发布 Deployment,master 节点会选择合适的 worker 节点创建 Container(即图中的正方体),Container 会被包含在 Pod (即蓝色圆圈)里。

k8s集群角色

实战:部署 nginx Deployment

本套教程提供了两种实战方式:

  • 使用 kubectl
  • 使用 Kuboard

使用 kubectl

创建 YAML 文件

创建文件nginx-deployment.yaml,内容如下:

apiVersion: apps/v1    #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment    #该配置的类型,我们使用的是 Deployment
metadata:            #译名为元数据,即 Deployment 的一些基本属性和信息
  name: nginx-deployment    #Deployment 的名称
  labels:        #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
    app: nginx    #为该Deployment设置key为app,value为nginx的标签
spec:            #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
  replicas: 1    #使用该Deployment创建一个应用程序实例
  selector:        #标签选择器,与上面的标签共同作用,目前不需要理解
    matchLabels: #选择包含标签app:nginx的资源
      app: nginx
  template:        #这是选择或创建的Pod的模板
    metadata:    #Pod的元数据
      labels:    #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
        app: nginx
    spec:        #期望Pod实现的功能(即在pod中部署)
      containers:    #生成container,与docker中的container是同一种
      - name: nginx    #container的名称
        image: nginx:1.7.9    #使用镜像nginx:1.7.9创建container,该container默认80端口可访问

应用 YAML 文件

kubectl apply -f nginx-deployment.yaml

查看部署结果

# 查看 Deployment
kubectl get deployments

# 查看 Pod
kubectl get pods

可分别查看到一个名为nginx-deployment的 Deployment 和一个名为nginx-deployment-xxxxxxx的 Pod

使用 Kuboard

打开 Kuboard 集群概览界面,如下图所示:

Kuboard集群概览

点击 default 名称空间

Kuboard default名称空间

点击创建工作负载,并填写表单如下:

字段名 填写内容 备注
服务类型 Deployment
服务分层 展现层 Kuboard使用这个字段确定将部署显示在微服务架构的哪个分层
服务名称 nginx 服务分层的前缀 + 服务名 组成最终的 K8S Deployment name
服务描述 Nginx部署 显示在微服务分层架构图中便于识别的名字,可以是中文
副本数量 1 replicas
容器名称 nginx
镜像 nginx:1.7.9
抓取策略 Always 每次创建 Pod 都尝试抓取镜像
Ports TCP : 80 该容器组监听 TCP 80 端口

Kuboard 创建工作负载

点击保存应用完成

此时可查看到该应用的部署结果,如下图所示:

Kuboard 部署信息

点击上图中的代理按钮,可以直接测试部署结果。更多细节请参考 Kuboard Proxy, 此功能要求 Kuboard 版本不低于v1.0.9.4

通过代理访问已部署的 nginx 服务时,默认显示结果如下所示:

Kuboard 部署测试

可分别查看到一个名为nginx-deployment的 Deployment 和一个名为nginx-deployment-xxxxxxx的 Pod

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/31/kubernetes-deploy-application/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Kubernetes部署一个应用程序
Kubernetes功能 官方定义k8s能够对容器化软件进行部署管理,在不停机的前提下提供简单快速的发布和更新方式。换句话说,如果项目需要多机器节点的微服务架构,……
<<上一篇
下一篇>>
文章目录
关闭
目 录