Files
kuboard-press/learning/k8s-basics/deploy-app.md
huanqing.shao 24b363392d 错别字修订
2019-11-13 20:22:31 +08:00

7.1 KiB
Raw Blame History

vssueId, layout, description, meta
vssueId layout description meta
21 LearningLayout Kubernetes教程_本文详细讲解了Kubernetes_Deployment的概念_并描述了如何使用kubectl_Kuboard创建一个Deployment
name content
keywords Kubernetes教程,K8S教程,Deployment,K8S培训,Kubernetes培训

1.部署一个应用程序

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

前提

假设您已经

目标

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

::: tip

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教程:部署第一个应用程序

上图是在第一篇文章的基础上添加上了Deployment、Pod和Container。

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

实战:部署 nginx Deployment

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

  • 使用 kubectl
  • 使用 Kuboard

创建 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为appvalue为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端口可访问
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9

应用 YAML 文件

kubectl apply -f nginx-deployment.yaml

查看部署结果

# 查看 Deployment
kubectl get deployments

# 查看 Pod
kubectl get pods

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

Kubernetes教程:部署第一个应用程序-Kuboard集群概览页

点击 default 名称空间

Kubernetes教程:部署第一个应用程序-Kuboard名称空间页

点击 创建工作负载

并填写表单如下:

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

Kubernetes教程:部署第一个应用程序-在Kuboard中创建工作负载

点击 保存

点击 应用

点击 完成

此时可查看到该应用的部署结果

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

~~任务二达成至此你已经成功在k8s上部署了一个实例的nginx应用程序

~~想要知道 Deployment部署、Pod容器组 和 Node(节点) 之间的关系吗?

~~lets go-> 查看 Pods容器组和 Nodes节点