kubernetes(一)核心概念
k8s核心概念
Kubernetes核心概念
文章目录
有了docker,为什么还要用Kubernetes?
为提高业务并发和高可用,会使用多台服务器,因此会面向这些问题
- 多容器跨主机提供服务
- 多容器分布节点部署
- 多容器怎么升级
- 怎么高效管理这些容器
为解决这些问题,出现了容器编排系统
- Kubernetes(15年开源)
- Docker Swarm(Doker 官方容器编排工具.工具比较少,基本没人用了)
- Mesos Marathon(主要是做分布式集群框架的,容器并不是特别专业)
Kubernetes是什么
Kubernetes是google2014年开源的一个容器集群管理系统,简称K8s.
Kubernetes用于容器化应用程序的部署,扩展和管理,目标是让部署容器化应用简单高效
Kubernetes集群架构与组件
节点
节点分为管理节点和工作节点
管理节点
管理节点的功能主要是接受用户的请求,把用户的请求转化为实际的事物
管理节点主要分为三个组件
- API Server : 核心组件,是整个集群的访问入口,不论是命令行还是dashboard都是连接API Server ,也是其他组件的协调者,其他的组件也都是和他进行交互(集群统一入口,各组件协调者,以RESTfull API 提供接口服务,所有对象资源的增删改查和监听操作都交给API Server处理后,在提交给Etcd存储)
- scheduler : 负责任务调度,当你创建一个容器的时候,帮你选择一个合适的工作节点
- controller-manager : 管理常规的后台任务,控制器会帮你确保副本的数量,包括容器升级,回滚操作(depolyment ,Service)
Etcd 是k8s的数据库,分布式键值数据库,用于保存集群状态数据,比如Pod,Service等对象信息
工作节点
工作节点主要分为两个组件
- kubelet : 相当于agent,让工作节点受控与管理节点,安装后通过调用docker可以进行容器的创建,管理等,
- kube-proxy : 负责容器以及集群相关的网络规则,在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作.
所有组件的调度和交互都是通过API Server连接实现的
k8s资源基本概念
- Pod:k8s最小部署单元,一组容器的集合
- Deployment:最常见的控制器,用于更高级别的部署和管理,Pod,(滚动升级等)
- Service:为一组Pod提供负载均衡,对外提供统一的访问入口
- Label: 标签,附加到某一个资源上,用于关联对象,查询和筛选
Namespace
Namespaces:命名空间,将资源对象逻辑上隔离,从而形成多个虚拟机群,也利于权限控制
应用场景:
- 根据不同团队划分命名空间
- 根据项目划分命名空间
kubectl get namespace
- default:默认命名空间
- kube-system: k8s系统方面的命名空间
- kube-public:公开的命名空间,谁都可以访问
- kube-node-lease:k8s内部命名空间
有两种方式指定资源命名空间
- 命令行加
-n
参数 - yaml资源元数据里指定namespace字段
kubectl create namespace anliancloud #可以通过命令创建新的namespace
kubectl get namespaces #可以通过命令,查看
Deployment控制器(管理应用)
Deployment是最常用的K8s工作负载控制器(workload Controllers),是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod.
我们在工作中一般不会直接创建Pod,而是通过Deployment来创建Pod
Deployment的主要功能:
- 管理Pod,即应用程序 和ReplicaSet期望值
- 具有上线部署,副本设定,滚动升级,回滚等功能
- 提供声明式更新,例如只更新一个新的Image
应用场景:网站,API微服务
Pod
K8s最小部署单元,一组容器的集合,里面有一个或者一组容器
这些容器共享存储和网络.
pod特点
- 一个Pod可以理解为是一个应用实例,提供服务
- Pod中容器始终部署在一个Node上
- Pod中容器共享网络,存储资源
- Kubernetes直接管理Pod,而不是容器
Service
为一组Pod提供负载均衡,对外提供统一访问入口
- 防止Pod失联
- 定义一组Pod的访问策略(负载均衡)
service
有三种模式,ClusterIP
,NodePort
,LoadBarlancer
三种模式,其中ClusterIP是通过一个稳定的集群IP来提供集群内部的负载均衡,NodePort模式是通过映射随机端口,提供从集群外访问Pod的模式,LoadBarlancer是通过连接公有云第三方负载均衡设备来提供服务,service有三种代理模式,userspace
,kube-proxy+iptables
,kube-proxy+ipvs
,其中 userspace是k8s自己的代理模式,工作在内核态,由于效率低下,已经淘汰,现在的k8s默认提供的是kube-proxy+iptables的代理模式,这种模式通过iptables进行DNAT地址转换,功能灵活,强大, 规则遍历匹配和更新,呈延时性.kube-proxy+ipvs模式的代理是通过virtual server --> real server 模式进行地址的转换,可以通过ipvsadm工具进行转换地址的查看和管理.ipvs的转发同样也处于内核态,效率高,开销少.
Label
标签,附加到某个资源上,用于关联对象,查询,筛选
kubectl get pod -A --show-labels 查看标签
kubectl get pod -A -l app=web10 通过-l参数以及已知标签查看Pod
对应标签的Pod和对应标签的Service进行端口转发
通过命令创建Pod 以及创建Service 可以看到标签是相同的,通过同样的标签进行端口转发
Ingress
Ingress
提供7层应用层的负载均衡服务,需要先以Pod的形式部署Ingress-controller,形式有很多种,其中官方在维护的有三种,推荐其中的nginx_ingress,部署方式默认是采用deployment形式,推荐改用daemonset模式,因为Ingress的规则会指向ingress-controller Pod所在的宿主机,所以用daemonset模式无疑更加适合,通过在Ingress中添加host字段,以及配置域名解析服务.可以实现使用域名进行访问,同时在自签认证后,Ingress可以提供tls的https服务.
StatefulSet
- 部署有状态应用
- 解决Pod独立生命周期,保持Pod启动顺序和唯一性。
- 稳定,唯一的网络标识符,持久存储。
- 有序,优雅的部署和扩展,删除和终止。
- 有序,滚动更新
应用场景:分布式应用,数据库集群
更多推荐
所有评论(0)