一、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的形式。另一种是在公有云场景下,通过公有云的负载均衡来实现。
-
管理
+关注
关注
2文章
384浏览量
26382 -
容器
+关注
关注
0文章
495浏览量
22060 -
kubernetes
+关注
关注
0文章
224浏览量
8713
发布评论请先 登录
相关推荐
评论