10分钟让你快速了解大厂应用的k8s到底是什么?
kubernetes是分钟google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,让快kubernetes也称为k8s;
k8s是速解google内部一个叫borg的容器集群管理系统衍生出来的,borg已经在google大规模生产运行十年之久;
2015年7月,大厂的ks到底kubernetes v1.0正式发布,应用截止到2018年1月27日最新稳定版本是分钟v1.9.2;
kubernetes目标是让部署容器化应用简单高效。
k8s容器管理主要功能
k8s在企业的让快实际应用功能主要如下:
数据存储应用:
pod中容器之间共享数据、可以使用数据卷;
健康检查应用:
容器内部服务可能遇到进程阻塞无法处理请求,速解可以设置监控检查策略保证应用健壮性;
程序实例应用:
控制器维护着pod副本数量,大厂的ks到底保证一个pod或一组同类的应用pod数量始终可用;
弹性伸缩应用:
根据设定的指标(CPU利用率)自动缩放Pod副本数;
服务发现应用:
使用环境变量或DNS服务插件保证容器中程序发现Pod入口访问地址;
负载均衡应用:
一组Pod副本分配一个私有的集群IP地址,负载均衡转发请求到后端容器。分钟在集群内部其他Pod可通过这个ClusterIP访问应用;
滚动更新应用:
更新服务不中断,让快一次更新一个Pod,速解而不是大厂的ks到底同时删除整个服务;
服务编排应用:
通过文件描述部署服务,使得应用程序部署变得更高效;
资源监控应用:
Node节点组件集成cAdvisor资源收集工具,应用可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDB时序数据库,再由Grafana展示;
认证授权应用:
支持角色访问控制(RBAC)认证授权等策略;
k8s技术架构组成模式
k8s的物理架构是b2b供应网master/node模式,集群中至少需要一个主节点master和多个工作节点worker;
master节点是集群控制节点:
主要负责整个集群的管理和控制,主要用于暴露API接口、调度部署和对节点进行管理;
node节点是集群工作节点:
主要是负责运行容器环境的;
单master节点架构图:

多master节点架构图:

k8s技术架构部署组件
k8s控制节点组件说明:
apiserver:
apiserver组件为rest操作提供服务,并为集群的共享状态提供前端,所有其他组件都通过该前端进行交互。
scheduler:
scheduler调度器组件是一个控制面进程,主要负责将pod指派分配到相应工作节点上。
controller-manager:
controller-manager控制器是一个守护进程,也是内嵌在k8s环境中的核心控制回路;
在自动化的应用中,控制回路是一个永不休止的循环,从而监视与调节集群的状态,并尝试进行更改以将当前状态转为期望状态。
etcd:
etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
k8s工作节点组件说明:
kubelet
每个节点上的亿华云计算kubelet定期就会调用API Server接口报告自身状态,API Server接收这些信息后,将节点状态信息更新到etcd中。
kubelet也通过API Server监听Pod信息,从而对Node机器上的pod进行管理,如创建、删除、更新Pod。
kube-proxy
提供网络代理和负载均衡,是实现service的通信与负载均衡机制的重要组件,kube-proxy负责为Pod创建代理服务;
从apiserver获取所有service信息,并根据service信息创建代理服务,实现service到Pod的请求路由和转发;
从而实现K8s层级的虚拟转发网络,将service的请求转发到后端的pod上。
Cordns
CoreDNS 其实就是一个 DNS 服务,而 DNS 作为一种常见的服务发现手段,很多开源项目以及工程师都会使用 CoreDNS ;
为集群提供服务发现的功能,Kubernetes 就在集群中使用 CoreDNS 解决服务发现的问题。
Calico
Calico是一套开源的网络和网络安全方案,服务器租用用于容器、虚拟机、宿主机之前的网络连接;
可以用在kubernetes、OpenShift、DockerEE、OpenStrack等PaaS或IaaS平台上。
Docker
容器运行池,负责启动容器的,在k8s1.20版本之后建议废弃docker,使用container作为容器运行时。

k8s核心资源信息解读
Pod资源:
Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定镜像用来运行具体的服务。
Pod代表集群上正在运行的一个进程,一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。
也就是说,应该把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。
如何创建一个Pod资源:
在k8s中,所有的资源都可以使用一个yaml配置文件来创建,创建Pod也可以使用yaml配置文件。
# 编写pod资源的yaml文件: [root@k8s-master-01 ~]# cat pod.yaml apiVersion: v1 kind: Pod metadata: name: tomcat-pod namespace: default labels: tomcat: tomcat-pod spec: containers: - name: tomcat-pod-java ports: - containerPort: 8080 image: tomcat:8.5-jre8-alpine imagePullPolicy: IfNotPresent # 更新配置好的pod资源yaml文件 [root@k8s-master-01 ~]# kubectl apply -f pod.yaml # 查看可应用的pod资源信息 [root@k8s-master-01 ~]# kubectl get pods -l tomcat=tomcat-pod NAME READY STATUS RESTARTS AGE tomcat-pod 1/1 Running 0 9slabel资源:
label是标签的意思,k8s中的资源对象大都可以打上标签,如 Node pod Service等,一个资源可以绑定任意多个label。
k8s通过label可实现多维度的资源分组管理,后续可通过label selector查询和筛选拥有某些label的资源对象。
例如:创建一个pod,给定一个label是app=tomcat,那么service可以通过label selector选择拥有app=tomcat的pod。
随之和其相关联,也可以通过app=tomcat删除拥有该标签的pod资源。

deployment资源:
Replicaset是Kubernetes中的副本控制器,管理Pod,使pod副本的数量始终维持在预设的个数。
Deployment是管理Replicaset和Pod的副本控制器,Deployment可以管理多个Replicaset,是比Replicaset更高级的控制器。
也就是说在创建Deployment的时候,会自动创建Replicaset,由Replicaset再创建Pod。
Deployment能对Pod扩容、缩容、滚动更新和回滚、维持Pod数量。

如何创建一个deployment资源:
在k8s中所有的资源都可以使用一个yaml配置文件来创建,创建deployment也可以使用yaml配置文件。
# 编写depoyment资源的yaml文件: [root@k8s-master-01 ~]#cat deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: selector: matchLabels: run: my-nginx replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80 # 更新配置好的deployment资源yaml文件 [root@k8s-master-01 ~]# kubectl apply -f deployment.yaml # 查看可应用的pod资源信息 [root@k8s-master-01 ~]# kubectl get deploy | grep my-nginx my-nginx 2/2 2 2 2m52s [root@k8s-master-01 ~]# kubectl get rs | grep my-nginx my-nginx-5b56ccd65f 2 2 2 3m26s [root@k8s-master-01 ~]# kubectl get pods -l run=my-nginxservice资源:
在kubernetes中,Pod是有生命周期的,如果Pod重启IP很有可能会发生变化。如果我们的服务都是将Pod的IP地址写死;
Pod的挂掉或者重启,和刚才重启的pod相关联的其他服务将会找不到它所关联的Pod,为了解决这个问题;
在kubernetes中定义了service资源对象,Service 定义了一个服务访问的入口;
客户端通过这个入口即可访问服务背后的应用集群实例,service是一组Pod的逻辑集合,这一组 Pod 能够被 Service 访问到。
通常是通过 Label Selector实现的。

如何创建一个service资源:
在k8s中所有的资源都可以使用一个yaml配置文件来创建,创建service也可以使用yaml配置文件。
# 编写pod资源的yaml文件: cat pod_test.yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: selector: matchLabels: run: my-nginx replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80 # 编写service资源的yaml文件: cat service.yaml apiVersion: v1 kind: Service metadata: name: my-nginx labels: run: my-nginx spec: ports: - port: 80 protocol: TCP selector: run: my-nginx # 更新配置好的service资源yaml文件 [root@k8s-master-01 ~]# kubectl apply -f service.yaml #查看可应用的service资源信息 root@k8s-master-01 ~]# kubectl get svc -l run=my-nginxk8s容器编排技术总结
通过上文的内容介绍,相信很多对k8s技术不太了解的同学,也有了一定的认知,在学习k8s技术漫长的道路过程中。
对于初学者需要先关注k8s生态架构的组件构成,最终可以自己完成k8s集群环境的部署;
其次需要关注k8s集群架构中涉及的资源信息,逐一掌握每个资源信息的配置方法和应用场景;
最后还要结合一些项目实战,积攒更多生产问题处理案例,不断完善和优化对k8s集群的认知。
相关文章
- 摘要:在日常使用电脑的过程中,我们有时会遇到一些错误,其中之一就是电脑错误404。这个错误常常出现在我们访问网页或者资源时,让我们无法正常获取所需内容。本文将深入探讨电脑错误404的原因...2025-11-04
戴尔V54803528(从配置到设计,解析戴尔V54803528的各个亮点)
摘要:近年来,随着移动办公的普及和云计算的兴起,笔记本电脑成为人们工作和娱乐的必备工具。而在众多品牌中,戴尔一直以来都以高性能、稳定性和品质著称。本文将介绍戴尔最新推出的V5480352...2025-11-04影驰1050搭配i3CPU,性能如何?(一起探究影驰1050与i3CPU的协同表现)
摘要:如今,计算机硬件市场竞争激烈,消费者在购买电脑时面临着众多选择。其中,影驰1050显卡与i3CPU的搭配备受关注,今天我们将深入探究这对组合在性能上的表现。一:了解影驰10...2025-11-04佳能760D18-200的功能和性能综述(探索佳能760D18-200单反相机的优势和特点)
摘要:佳能760D18-200是一款功能强大且颇受好评的单反相机,拥有出色的性能和众多的特点,适合各种摄影需求。本文将全面介绍佳能760D18-200的各项功能,以帮助读者更好地了解该相...2025-11-04惠普暗影精灵6新手教程(掌握惠普暗影精灵6,打造专业级游戏体验)
摘要:惠普暗影精灵6是一款专为游戏玩家设计的高性能笔记本电脑,它拥有卓越的处理能力、出色的图形性能和出色的散热系统,适合各种类型的游戏。本篇文章将为大家提供惠普暗影精灵6的新手入门指南,...2025-11-04- 摘要:在现代社会中,我们对数据的需求越来越大,拥有一个高容量的可移动存储设备变得尤为重要。本教程将教你如何利用4gu盘制作一个便携式、高效且可靠的存储盘,以满足你的日常数据存储需求。...2025-11-04

最新评论