首页 > Web开发 > 详细

kubernetes 实践一:基本概念和原理

时间:2019-09-23 22:35:56      阅读:119      评论:0      收藏:0      [点我收藏+]

这里记录kubernetes学习和使用过程中的内容。

CentOS7 k8s-1.13 flanneld-0.10 docker-18.06 etcd-3.3

本节记录kubernetes的基本概念。

kubernetes基本概念

Master

Master是Kubernetes里的集群控制节点,每个k8s集群里都需要一个Master节点来负责整个集群的管理和控制,基本k8s上所有的控制命令都是由它发起的,如果它宕机了,那整个集群所有的控制命令都可能不可用了。所有一般它是一台物理机或虚拟机。

一般Master节点上需要启动以下服务:

  • kube-apiserver (Kubernetes Api Server),提供 HTTP Rest 接口的关键服务进程,是 k8s 里所有资源增、删、查、改等操作的唯一入口,也是集群控制的入口服务。
  • kube-controller-manager(Kubernetes Controller Manager),k8s 里所有资源对象的自动化中心,管理所有的资源。
  • kube-scheduler(Kubernetes Scheduler),负责资源调度(Pod 调度)的服务。

其实还有一个etcd服务,存储 k8s 里所有资源对象的数据。

Node

k8s 集群中节点分为管理节点Master和工作节点Node,在早期版本里叫Minion。和Master一样,它一般是一台物理机或虚拟机。Master负责任务的分配调度,Node就负责任务执行,实际的工作都是在Node节点上(使用docker),当一个Node宕机是,它的任务会被分配到其他Node节点上。

Node节点也有一些关键的服务:

  • kubelet:负责Pod对应容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
  • kube-proxy:实现 Kubernetes Service 的通信与负载均衡机制的重要组件
  • Docker Engine(docker):docker引擎,负责本机的容器创建和管理工作。
  • flanneld:严格来说它不是 k8s 的核心组件,它用来管理 k8s 集群的网络。

使用命令

[root@k8s-master ~]# kubectl get nodes     
NAME            STATUS   ROLES    AGE    VERSION
192.168.10.11   Ready    <none>   2d7h   v1.13.0
192.168.10.12   Ready    <none>   2d2h   v1.13.0

Pod

Pod 是 k8s 最重要也是最基本的概念,每个Pod都有一个特殊的被称为“根容器”的Pause容器。Pause容器对应的镜像属于 k8s 平台的一部分,每个Pod由Pause容器和业务容器组成。

技术分享图片

为什么由Pod的概念和Pod这样的结构呢:原因如下:

  • 在一组容器作为单元的情况下,我们难以对“整体”简单地进行判断及有效地行动。引入业务无关并且不易死亡地Pause容器作为Pod的根容器,以它地状态代表整个容器组地状态,以此来解决这个难题。
  • Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume,这样既简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间地文件共享问题。

Kubernetes为每个Pod都分配了唯一地IP地址,称之为Pod IP,一个Pod里地多个容器共享Pod IP地址。k8s采用虚拟二层网络技术,如flanneld、OpenvSwitch等实现集群内任务两个Pod之间地TCP/IP直接通信。

Pod有两种类型:普通地Pod和静态Pod(static Pod)

  • 普通Pod 存储在etcd中,创建后就被k8s调度到某个Node上,随后被kubelet实例化成一组容器并启动。默认情况下,如果Pod中某个容器停止,则重启Pod中所有容器,如果所在地Node宕机,则调度到其他Node上。
  • static Pod 存储在某个具体Node地一个具体文件中,并且只在此Node上启动运行。

以下是Pod、容器和Node的关系:
技术分享图片

同时Pod还能对使用的服务器上的计算资源设置限额,配置如下:

spec:
  containers:
  - name: db
    image: mysql
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

Requests 为该资源的最小申请量,Limits则是上限值,超过可能被k8s kill并重启。memory单位为字节数,cpu单位m表示千分之一的配额,“250m”表示占用0.25个CPU

[root@k8s-master ~]# kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
mysql-f8g28   1/1     Running   0          80m
myweb-529z6   1/1     Running   0          73m
myweb-dkb4n   1/1     Running   0          73m
myweb-ggvwz   1/1     Running   0          73m
myweb-j5t4x   1/1     Running   0          73m
myweb-l6wqv   1/1     Running   0          73m
nginx         1/1     Running   1          88m

Event

Event是一个事件的记录,记录了事件的最早产生时间、最后重现时间、重复时间、发起者、类型,以及导致此事件的原因等信息。Event通常会关联到某个具体的资源对象上、是排错的重要参考信息。

[root@k8s-master ~]# kubectl get events
LAST SEEN   TYPE      REASON                    KIND                    MESSAGE
100m        Normal    RegisteredNode            Node                    Node 192.168.10.11 event: Registered Node 192.168.10.11 in Controller
99m         Normal    Starting                  Node                    Starting kube-proxy.
99m         Normal    Starting                  Node                    Starting kubelet.

Label

Label是一个 key=value的键值对,用来管理k8s中的资源。它可以附加到各种资源对象上,如Node、Pod、Service、RC等。资源和对象为多对多关系,支持在资源生命周期的任意阶段确定。它支持以下语法:

  • name = redis:匹配具有标签name=redis的资源对象
  • env != production:匹配所有不具有标签 env=production 的资源对象
  • name in (redis-master, redis-slave):匹配所有具有标签name=redis-master或者name=redis-slave的资源对象
  • name not in (php-frontend):匹配所有不具有标签 name = php-frontend 的资源对象
  • name=redis,env!=production:匹配多个条件

Label Selector 在 k8s 中重要使用场景如下:

  • kube-controller 进程通过资源对象RC上定义的Label Selector来筛选要监控的Pod副本的数量,从而实现Pod副本的数量始终符合预期设定的全自动控制流程。
  • kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立起每个Service到对应Pod的请求转发路由表,从而实现Service的智能负载机制。
  • 通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector这种标签调度策略,kube-scheduler进程可以实现Pod“定向调度”的特性。

kubernetes 实践一:基本概念和原理

原文:https://www.cnblogs.com/xingyys/p/11574597.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!