一、前言
上一个帖子和大家分享了k8s的一些基本概念,了解到k8s可以用来进行容器编排、管理与调度,今天就和大家分享一下,k8s如何实现基本的容器管理。 本文主要包含以下内容:
二、k8s的管理对象 我们一直在说k8s可以管理容器,但是实际上k8s不是直接管理容器的,而是通过管理其他的对象来实现对容器的管理与编排。 管理对象(Pod): Kubernetes基本管理单元,每个Pod是一个或多个容器的一组集合。 一个Pod作为一个整体运行在一个节点(node)上。
管理对象(RC:ReplicationController)Kubernetes需要管理大量的Pod,通常情况下一个应用不会以单独的一个Pod完成。比较常见的情况是使用大量的Pod组成一个简单应用。管理这些大量的Pod的一个方式就是RC。 RC可以指定Pod的副本数量,并且在其中有Pod故障时可以自动拉起新的Pod,大大简化了管理难度。
管理对象(RS:Replica Set)ReplicaSet是新一代的RC,主要功能和RC一样,维持Pod的数量稳定,指定Pod的运行位置等,使用方法也相似,主要区别是更新了api,支持更多功能。 ReplicaSet不建议直接使用,而是用更上层的概念Deployment调用ReplicaSet。
管理对象(Deployment)目前最常用的控制器就是Deployment,创建Deployment时会自动创建ReplicaSet。 Deployment可以管理一个或多个RS,并且通过RS来管理Pod。
管理逻辑:容器<Pod<ReplicaSet<Deployment
以一个业务来看:
三、创建Deployment 方式一:通过kubectl命令创建,通过其命令可以管理Deployment,Replicaset,ReplicationController,Pod等,进行新建、扩容、删除、升级等等全生命周期操作。 例: - 创建一个简单的Deployment:kubectl create deployment dep-nginx --image=nginx
复制代码kubectl语法: - kubectl [command] [TYPE] [NAME] [flags]
复制代码Command:常见生命周期管理,如create(创建资源),get(查看资源),describe(查看资源详细描述),delete(删除资源),apply(使资源的配置变更生效,可以代替create创建新的资源)等。 TYPE:指定操作对象的类型,如deployment,RS,Pod等 NAME:指定对象的名字 Flags: 可选的标志位
方式二:利用yaml文件创建 方式一中,我们使用一行命令创建了Deployment。这种方式过于简单,无法自定义大量个性化参数,并且后续对该Deployment的升级管理也有诸多问题。在实际使用中,我们更常见的用法是通过一个yaml文件来创建各类资源。 例: - 新建一个yaml文件:vi nginx-deployment.yaml
复制代码- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: nginx-deployment
- labels:
- app: nginx
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: nginx
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx:1.7.9
- ports:
- - containerPort: 80
复制代码- 利用yaml文件创建deployment:kubectl create -f nginx-deployment.yaml
复制代码 yaml文件格式还是有些复杂的,这里就先不展开详细介绍,简单描述下每一个参数的作用。apiVersion:版本号,固定为apps/v1,如果使用1.9.0以前版本的kubernetes,填写apps/v1beta2 Kind: 类型,选择创建资源类型,可以填写pod,replicaset等 Metadata:元数据,其中name项指定了名称,label项指定标签。 Spec:deployment规格,其中replicas指定pod副本数量,选择器选择标签匹配为app:nginx Template:对pod模板的定义,其中至少要定义一个label Containers:定义容器的属性,在范例中,容器名字是nginx,镜像为nginx:1.7.9,容器输入输出的端口是80端口。
最后和大家分享一个yaml在线格式校验工具,可以检查格式等错误。- https://www.bejson.com/validators/yaml/
复制代码
|