【公开课】Kubernetes 应用部署

【百度云原生导读】在前两节课,我们学习了 Docker 和 Kubernetes 相关基础知识。Docker 实现了应用程序的镜像化和容器化,但是它的能力局限于单机。当应用规模特别大、需要部署在多台机器上时,则需要借助 Kubernetes 实现容器的集群化编排与生命周期管理,使得开发者可以更加关注应用本身而不需过多关注 DevOps。

 

本节课将带领大家进一步学习 Kubernetes。通过实践与学习,了解 Kubernetes 的应用部署。

 

课程主要分为以下四个部分:

第一部分:环境准备

第二部分:应用的组成与描述

第三部分:应用的部署与访问

第四部分:常见问题排查

 

1. 环境准备

 

搭建 Kubernetes 集群的三种方法

 

 一般来说,搭建 Kubernetes 集群主要有三种方法:

 

minikube:单机的 Demo 环境,只能用来做一些演示。

官方链接:https://minikube.sigs.k8s.io./docs/start/

 

kubeadm:可以自建集群,各个组件可定制化,需要对 kube 有深入的了解,这个方法推荐高阶用户使用。

官方链接:

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

 

CCE:生产环境下,建议尽量采用公有云的成熟产品,比如百度的 CCE。

官方链接:https://cloud.baidu.com/product/cce.html

 

2.应用的组成与描述

 

这一部分,主要介绍 Kubernetes 对应用的抽象与定义。

 

2.1 应用组成

 

在 Kubernetes 上,一个典型的无状态应用由三部分组成:

 

Deployment:即对应用规格的描述。包括应用的镜像(对应的是应用的程序)、启动命令、资源配额(规定了应用在运行中需要用多少资源,包括cpu/memory等)、实例数量(规定应用需要有几个实例来支撑)。

 

Configmap :应用的配置,分为两种,一是简单的 kvalue 对,另一种是配置文件。

 

Service :应用对外暴露的服务地址(是在集群内访问还是集群外)

 

以上三个对象互相解耦,创建顺序可以随意。

 

2.2 应用描述

 

以下结合代码具体阐述三个部分的内容:

 

2.2.1 Deployment

 

【公开课】Kubernetes 应用部署_第1张图片

元数据:metadata,包括 name 和 namespace。Namespace 是 K8S 对对象隔离的基本单位,即同一个namespace下不可以有同样name的对象,不同 namespace 中可以有相同 name 的对象。

 

副本数:spec 中的 replicas 字段。即你的应用将来要部署几个实例。

 

镜像地址:image。可以来自 dockerhub 或其他镜像仓库。

 

服务端口号:每个应用程序可以暴露一个或多个端口,以此被外界访问。

 

启动命令:应用程序是如何启动的。

这个 yaml 里面并没有写启动命令,这就是 K8S 的方便之处:如果你不写的话,那么应用程序就默认按照其 Dockerfile 里指定的启动命令来启动。

 

资源配额:resources 包括 limits 和 requests,代表对资源使用的上限和下限。每个里面其实都包含了 cpu 和 memory 两种资源。

 

挂载目录: 分为两个部分,分别是 volumeMounts,volumes。volumeMounts 代表容器内想如何使用存储,例如挂载到哪个目录;volumes 代表存储的来源,比如主机目录,网络存储等。两者都是数组形式,通过 name 字段做元素对应。

 

2.2.2 Configmap

 

元数据:metadata

配置数据:data

 

【公开课】Kubernetes 应用部署_第2张图片

 

技巧:如果直接手写 yaml 文件,可以看到有很多缩进比较麻烦,可以使用 --from-file 将本地的文件直接创建成一个 Configmap。

 

例如kubectl create configmap hello --from-file=<文件路径>

 

2.2.3 Service

 

元数据: metadata。

实例标签:即 spec 里面的selector 字段,通过 app:nginx 标签找到对应的实例(Pod)。

 

【公开课】Kubernetes 应用部署_第3张图片

端口号映射:targerPort 是容器实际监听的端口,port 是 Service 产生的虚拟 IP 所对应的端口,它并不是将来的 NodePort,NodePort 的取值是随机的。

 

服务暴露方式:也就是 type 字段。如果是 NodePort 的话,意味着容器所在的宿主机会开一个端口并映射给容器内的端口。

 

3. 应用的部署与访问

 

应用如何被外界访问?

比如,上面我们部署了一个 nginx 应用在集群中,一般而言有三种访问方式:

 

集群内访问:ClusterIP

这种方式意味着客户端和服务端都在 K8S 集群内。

 

集群外访问:NodePort

如果客户端在集群外,可以将 Node 节点的 IP 暴露给外界,同时将 NodePort 告知对方,用Node IP+NodePort的方式实现访问。

 

本地代理

通过 kubectl 的 port-forward 进行访问,一般用于调试,不适用于生产环境。

 

4. 常见问题排查

 

在最后部分,讲师将对上述内容进行实操,并手把手带你排查常见问题,包括:

 

•镜像下载失败
•应用启动失败
•服务访问不通
•应用异常退出

 

视频课程可点击下面链接进行学习:

https://www.bilibili.com/video/BV1B54y1Y7mZ/

 

重磅!云原生计算交流群成立

扫码添加小助手即可申请加入,一定要备注:名字-公司/学校-地区,根据格式备注,才能通过且邀请进群。

【公开课】Kubernetes 应用部署_第4张图片

了解更多微服务、云原生技术的相关信息,请关注我们的微信公众号【云原生计算】!

【公开课】Kubernetes 应用部署_第5张图片

你可能感兴趣的:(云原生)