Kubernetes是什么

描述

一、Kubernetes是什么?

2014年,Google开源一个PAAS平台,命名为Kubernetes。

其目标是管理大规模服务(容器)集群,解决人们对大规模容器的部署、升级、回滚带来的复杂性问题,实现在不停服务情况下的应用管理,以便最大可能地把精力集中在业务开发上。

Kubernetes以声明式方式进行容器部署,也就是只要告诉Kubernetes要做什么,不需要告之如何去做。

二、应用是如何部署和运行的?

我们在使用容器技术时,应用便打包在容器中,以容器为粒度进行操作,运行时体现为一个进程。

Kubernetes认为一个微服务可能由多个容器(进程)共同提供,便将多个容器看作一个组,看似豆荚,称为 Pod ,也被称为服务实例。Pod是Kubernetes最小调度单位。

一个应用运行时,可能需要N个服务实例(Pod)。如果某个服务实例出现异常或宕机,需要维持N个服务实例。这些工作由 ReplicaSet(副本集) 来做,也就是ReplicaSet能够保证始终有N个Pod在运行。(注:除 ReplicaSet --无状态外,还有DaemonSet、StatefulSet和Job等)

如果应用需要发布新版本,则需要“创建新版本的Pod,并替换旧版本的Pod”。这个工作由Deployment来做。Deployment会用新版本规范创建新ReplicaSet,新ReplicaSet创建新Pod数量会逐渐提高,旧ReplicaSet对应的Pod数量同步逐渐减少。也就是Deployment--ReplicaSet--Pod。

我们可以通过YAML文件来进行应用的部署,例如:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rss-site
  labels:
    app: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: front-end
          image: nginx
          ports:
            - containerPort: 80
        - name: rss-reader
          image: nickchase/rss-php-nginx:v1
          ports:
            - containerPort: 88

表达的意思为:部署 rss-site Web应用,有2个副本,符合spec规范定义。这里涉及到selector的概念,表示的是对象通过Label进行关联,类似SQL中的select语句。

三、如何访问微服务?

Pod在应用的运行过程中,可能会进行弹性伸缩。

相应地,Pod对应的IP地址也可能会发生变化。不能因Pod的IP地址变化,而影响服务的访问。于是,引入Service概念,为一组相同功能的Pod提供统一的入口。

四层Service体现为IP地址和端口号。7层Service又引入了一个新的概念: Ingress ,可根据不同的URL请求转发到后端不同的Service。

那么如何访问Service呢?

对于集群内部的服务来说,有两种方法。一种方法是在服务(客户端)启动时,将服务(服务端)的信息以环境变量的形式注入到(客户端)中。另一种方法是使用虚拟DNS,服务(客户端)只要知道服务的名称即可,不需要关注服务的IP地址。

对于集群外部来说,也有两种方法。一种是通过物理服务器的IP地址和端口号,也就是NodeIP + Port的形式。另一种是在公有云场景下,通过公有云的负载均衡来实现。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分