Posted on:
Last modified:
首先来回顾一下 Kubernetes 的一些基本信息:
K8s 中的几乎所有资源都是通过 yaml 文件来配置的。
Deployment 是使用 k8s 部署服务直接操作的概念。其他的概念往往都是通过 deployment 来间接 使用的,因此理解 deployment 至关重要。
一个典型的 deployment 配置文件如下:
# 1. 资源配置文件的元信息,总是 apiVersion, kind, metadata 三项
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
# 2. 资源配置文件的具体规格
spec:
# 3. Deployment 的部署信息
replicas: 2 # 副本数量:2
selector: # 关联到对应 label 的 template
matchLabels:
app: my-nginx
# 4. 创建 Pod 的模板
template:
metadata: # tempalte 的元信息
labels: # tempalte 的标签
app: my-nginx
# 5. 模板的具体规格
spec:
containers: # 这是一个数组,即上面提到的:Pod 中可以有多个 container
- name: my-nginx
image: nginx # container 的镜像
env: # 环境变量
- name: FOO
value: bar
ports: # 对外暴露的端口
- containerPort: 80
resources: # container 的资源限制
requests:
cpu: 300m
memory: 512Mi
可以看出 k8s 的配置文件整体上分了两部分,metadata 和 spec。每种资源的配置文件的 metadata 部分基本是一致的,spec 部分是不同的。Deployment 的 spec 分为了两部分,第一部分是部署的相关 信息,第二部分是 Pod 的模板,包含了如何创建 Pod 的具体配置。
Deployment 的配置可以发生改变,如果只是 replica 的数目发生了改变,那么这只是一个简单的 扩容或者缩容操作,k8s 只会启动或者杀死 Pod。如果 template 中镜像、命令等参数发生了改变, 那么 K8S 会把这次操作视为升级,也就是开始一个 Roll Out 操作,创建新的 Replica Set。 在这个过程中,如果 deployment 中的 spec 指定了保留历史 revision 的次数大于零,那么原有的 Replica Set 不会被删除,只是会被 Scale 到 0 而已,方便回滚。
Kubernetes 的一个核心功能就是资源管理,在上面的配置中,我们也看到了 resources 这个配置项。 具体来说,k8s 中内置的资源类型有 cpu 和 memory 两项,使用 requests 和 limits 两个属性控制。
对 CPU 来说,如果超过了 limits,那么就会得不到调度,但是也不会挂掉。对内存来说,如果超过了 limits,直接就给 OOM killer 杀掉了。
CPU 没有单位,直接使用数字指定核数。cpu: 1
值得就是使用一个核,cpu: 0.5
值得就是使用
半个核。不过,我们常见的指定方式都是:cpu: 500m
这种形式,其中 m 指的是千分之一,所以,
500m == 0.5
。值得注意的是,这里的一个核可能是一个物理核,也可能是一个虚拟核,取决于你在
物理机上还是虚拟机上运行集群。
内存的单位是字节,不过我们一般还是使用 ki
, Mi
, Gi
这些单位多一些。需要注意的有两点:
Mi
系列的单位基于 1024 进制,应该优先使用。M
系列的单位基于 1000 进制,最好别用Mi
是大写的 M,如果写成了小写,那就变成千分之一的意思了© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.
友情链接: MySQL 教程站