k8s的编排是什么意思?

我们知道k8s是Docker的编排工具,那么『编排』是什么意思呢?

阅读 5.9k
3 个回答

编排,顾名思义,就是调配安排

怎么调配、安排呢?

看官网 https://kubernetes.io

Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.
It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon 15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community.

中文翻译:

Kubernetes (K8s) 是一个用于自动化部署、弹性伸缩和管理容器化应用程序的开源系统。
它将应用程序的容器以逻辑单位分组,以便于容器管理和服务发现。Kubernetes 基于谷歌 15 年的生产环境工作负载经验,并吸收了来自社区的最佳想法和实践。

所以你看,它提及了几个方面,分别是:容器管理、应用部署、服务发现、弹性伸缩。

简单和通俗的讲, 大概包括这些点

  1. 服务发现: 某服务的具体状态, 以及他们的主机名, 访问端点都做到统一管理等
  2. 可伸缩和高可用: 根据流量自动调节, 创建系统冗余, 故障转移等等
  3. 资源管理: 调节各个服务的负载均衡, 控制其可访问的系统资源上限, 分配端口这类
  4. 监控

总之, 编排是一个让容器有机组合, 协调其运行情况, 保证高可用性, 完成具体业务的一系列工作的总和. 这些事情在 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

节点亲和性

如下面这个例子,我们希望:

  1. 比如 192.168.1.140 192.168.1.161 不要给我跑pod,
  2. area=south如的这个果有节点满足area=south的这个条件的话,pod尽量往这里安排。

apiVersion: v1
kind: Pod
...
spec:
containers:

  • name: with-node-affinity
    image: nginx

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:

  • name: with-pod-affinity
    image: nginx

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“编排”的能力
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏