kubernetes基础概念整理发布
1、拓扑图
2、kubernetes概念:
是谷歌开源的生产级容器编排系统,是谷歌多年大规模容器管理技术borg的开源版本
-基于容器的应用部署,维护和滚动升级
-负载均衡和服务发现
-跨机器和夸地区的集群调度
-自动伸缩
-无状态服务和有状态服务
-广泛的volome支持
-插件机制保证扩展性
3、容器
概念:
一系列隔离的进程,提供了一中轻量级操作系统层面的虚拟化技术
优势:
每个容器都有自己de文件系统、CPU、内存、进程空间等
与传统的VM比具有启动快。性能消耗少,轻量级等优点
4、容器编排
容器编排:用于自动部署,扩展,管理容器化应用程序的开源系统
容器编排:以容器为基本对象进行管理,协同容器共同实现应用功能
容器编排系统主要功能:容器调度,资源管理,服务管理
5、集群插件
5.1 master:
api server 对外服务交互的接口
scheduler 资源调度,分配容器该运行到那个服务器上
controller manager 监控docker服务的运行情况,并自动维护
5.2 node:
container runtime 容器引擎
kubelet 运行在node节点上的agent,处理master节点下发到本节点的任务,管理pod和其中的容器,定期向master汇报节点资源的使用情况
kube-proxy 运行在node节点上的agent,实现service的抽象,为一组pod抽象的服务(service)提供统一接口,并提供负载均衡和服务发现的功能
etcd:coreos开发并开源,基于raft协议的分布式的一致性kv存储,类似于zookeeper,在k8s中用作分布式kv存储系统,用于保存集群所有的网络配置和对象的状态信息
zookeeper 分布式存储的一个中间件
6、kubernetes调用流程:
1、用户通过kubectl进行操作,例如:部署新的应用
2、api server请求,并将其储存到etcd中
3、watcher和controller检测到资源状态的变化,并进行操作
4、replicaset watcher和controller检测到新的app,创建新的pod达到期望的实例个数
5、schedule将新的pod分配到kubectl
6、kubelet检测到pods,并通过容器运行时部署他们
7、kube-proxy管理pods的网络,包括服务发现,负载均衡
7、项目迁移到k8s平台的具体流程:
制作镜像--控制器管理pod--暴露应用--对外发布应用--日志、监控
8、Pod概念
最小部署单元,一组容器的组合,一个pod中的容器共享网络命名空间,pod是短暂的。
9、Controllers概念
Label :标签,附加到某个资源上,用于关联对象,查询和筛选
Namespace:命名空间,将对象逻辑上隔离
Replicset:确保预期的pod副本数量
Deployment:无状态应用部署
Satefulset:有状态应用部署
Daemonset:确保所有的node运行在同一个pod
Job:一次性任务
Cronjob:定时任务
10、Service概念(服务发现和负载均衡)
找到该服务的pod,并定义一组负载均衡的策略
10.1 创建基础yaml文件
10.2 创建deployment,指定名称空间
kubectl create deployment java-demo --image=lizhenliang/java-demo --namespace=kube-system --dry-run -o yaml >deployment.yaml
10.3 创建service,手动添加namespace
kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run >service.yaml
10.4 结果图:
11、导出现成的yaml文件
kubectl get pods -n infra
kubectl get pods jenkins-754b546fd6-s5tpl -n infra -o yaml
kubectl get pods jenkins-754b546fd6-s5tpl -n infra -o yaml > jenkins.yaml
12、pod
12.1 概念
最小的部署单元
一个pod中的容器共享网络命名空间与存储
Pod是短暂的
12.2 Pod存在的意义
Pod为亲密性应用而存在
亲密性应用场景:
- 两个应用之间发生文件交互
- 两个应用需要通过127.0.0.1或者socket通信
- 两个应用需要发生频发的调用
12.3 Pod实现机制
共享网络
应用在同一个pod中,可通过127.0.0.1或者socket通信
共享存储
同一个pod中两个容器有一个共享目录,用作两个容器共用
12.4 Pod容器分类与设计
Infrastructure container:基础容器,维护整个pod网络空间
Initcontainers: 初始化容器,先于业务容器开始执行
Containers:业务容器,并行执行
12.5 Pod Template常用功能字段解析
变量
拉取镜像
资源限制
健康检查
13、Deployment控制器
13.1 Pod与controllers的关系
Controllers:在集群上管理和运行容器的对象
通过label-selector(标签)相关联
Pod通过控制器实现应用的运维,如伸缩,滚动升级等
13.2 Deployment功能与应用场景
部署无状态应用
管理pod和replicaset(单一的控制器)
具有上线部署,副本设定,滚动升级,回滚等功能
提供声明式更新,例如只更新一个新的image
应用场景:web服务,微服务
13.3 Yaml字段解析
13.4 使用deployment部署无状态应用
建议使用yaml文件,添加--dry-run -o yaml
13.5 升级与回滚
Clusterip 集群内部访问,nodeport集群外部访问,loadbalancer 配置腾讯云访问,externalname 配置集群外部服务名,使集群内部访问
13.6 在线修改pods容器的yaml文件
13.7 应用弹性伸缩
14、Service统一入口访问应用
14.1 Service存在的意义
防止pod失联(服务发现)
定义一组pod的访问策略(负载均衡)
支持ClusterIP,NodePort以及loadmalancer三种类型
14.2 Pod与service的关系
通过lbel-selector相关联
通过service实现pod的负载均衡(TCP/UDP 4层)
14.3 Service几种类型
Service默认采用iptables(建议采用ipvs,以为支持多种轮询算法)实现负载均衡策略
ClusterIP:分配内部集群ip地址,只能在集群内部访问(同namespace内的pod),默认ServiceType
ClusterIP模式的service为你提供的,就是一个pod的稳定的IP地址,即VIP
NodePort:分配一个内部集群ip地址,并在每个节点启用一个端口来暴露服务,可以再集群外部访问。访问地址:<NodeIP>:<NodePort>
Loadbalancer:分配一个内部集群ip地址,并在每个节点上启用一个端口来暴露服务。除此之外,kubernetes会请求底层云平台上的负载均衡器,将每个node([NodePort]:[NodePort])作为后端添加进去。
15、Ingress对外暴露应用
15.1 Pod与ingress的关系
通过service关联pod
基于域名访问
通过ingress controller实现pod的负载均衡
支持tcp/udp 4层和http 7层
15.2 Ingress controller
域名直接访问pod里边的控制器,基于七层协议。基于端口访问只能通过四层协议。
15.3 Ingress
15.4 查看某个名称空间的访问域名
kubectl get ingress -n infra
15.5 检查集群节点数
[[email protected] ~]# kubectl get ep -n test
16、Pod工作流程
注:以上概念问题是我在学习中记录的,如果哪里有问题,请联系我,我会及时更新,避免误导别人哈,谢谢!