我们知道k8s是Docker的编排工具,那么『编排』是什么意思呢?
简单和通俗的讲, 大概包括这些点
总之, 编排是一个让容器有机组合, 协调其运行情况, 保证高可用性, 完成具体业务的一系列工作的总和. 这些事情在 Docker 之前其实也是要干的, 只是以前是物理机和虚拟机, 现在是容器
先吐槽一下: sf的编辑器好奇怪,对yaml代码的md支持不好。
我放弃了,斗不过sf的这个代码编辑器。。。
不能说是docker的编排工具,应该说是对“容器”的编排工具,docker只是一种容器实现方式
“编排”,通俗理解,类似我国以前大学生毕业后工作“包分配”,大学生毕业后,根据事业单位的特点和大学生的专业和特长信息,看看他们应该安排到哪个单位合适。
一般我们一个集群的会有“多台物理机器”,每个物理机器又可以跑“多个容器”,但是到底哪个容器应该跑在哪些物理机里面,就要有一套规则规划,k8s就是实现了这样一套规则。
简单举个几个例子,k8s的这些规则里面有比如“节点选择”,“节点亲和性”、“pod亲和性”等
比如下面这个这个规则,我们希望nginx安排跑在有ssd类型硬盘的物理机器上
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
如下面这个例子,我们希望:
192.168.1.140
和 192.168.1.161
不要给我跑pod,area=south
如的这个果有节点满足area=south
的这个条件的话,pod尽量往这里安排。
apiVersion: v1
kind: Pod
...
spec:
containers:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: NotIn
values:
- 192.168.1.140
- 192.168.1.161
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: area
operator: In
values:
- south
# pod亲和性
如下面这例子,我们希望:
1. 我们希望这个pod和有`app=busybox-pod`这个标签信息的pod,尽量分配到一起
2. 同时,不希望这个pod和有`app=node-affinity-pod`的这些pod尽量不要搞到一起。
apiVersion: v1
kind: Pod
...
spec:
containers:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- busybox-pod
topologyKey: kubernetes.io/hostname
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- node-affinity-pod
topologyKey: kubernetes.io/hostname
这几个例子体现了k8s“编排”的能力
2 回答2.5k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
2 回答1.7k 阅读
编排,顾名思义,就是调配、安排。
怎么调配、安排呢?
看官网 https://kubernetes.io:
中文翻译:
所以你看,它提及了几个方面,分别是:容器管理、应用部署、服务发现、弹性伸缩。