Kubernetes基本概念
Container
Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用namespace隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。
由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。这种一对一的应用镜像关系有很多好处。使用容器,不需要与外部的基础架构环境绑定,因为每一个应用程序都不需要外部依赖,更不需要与外部的基础架构环境依赖。完美解决了从开发到生产环境的一致性问题。
容器同样比虚拟机更加透明,这有助于监测和管理。尤其是容器进程的声明周期由基础设施管理,而不是被进程管理器隐藏在容器内部。最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。
其他容器的优点还包括
-
敏捷的应用程序创建和部署:与虚拟机镜像相比,容器镜像更易用、更高效
-
持续开发、集成和部署:提供可靠与频繁的容器镜像构建、部署和快速简便的回滚(镜像是不可变的)
-
开发与运维鹅关注分离:在构建/发布时即创建容器镜像,从而将应用于基础架构分离
-
开发、测试与生产环境一致性:在笔记本电脑上运行和云中一样
-
可观测:不仅显示操作系统的信息和度量,还显示应用自身的信息和度量
-
云和操作系统的分发可移植性:可运行在Ubuntu、Centos、CoreOS、物理机以及其他任何地方
-
以应用为中心的管理:从传统的硬件上部署操作系统提升到操作系统中部署应用程序
-
松耦合、分布式、弹性伸缩、微服务:应用程序被分成更小、更独立的模块,并可以动态管理和部署-而不是运行在专用设备上的大型单体程序
-
资源隔离:可预测的应用程序性能
-
资源利用:高效率和高密度
Pod
Kubernetes使用Pod来管理容器,每个Pod可以包含一个或多个紧密关联的容器。
Pod是一组紧密关联的容器集合,它们共享PID、IPC、Network和UTS namespace,是Kubernetes调度的基本单位。Pod内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
在Kubernetes中,所有对象都使用manifest(yaml或json)来定义,比如一个简单的nginx服务可以定义为nginx.yaml,它包含一个镜像为nginx的容器:
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
Node
Node是Pod真正运行的主机,可以是物理机,也可以是虚拟机。为了管理Pod,每个Node节点上至少要运行container runtime(如docker)、kubelet和kube-proxy服务。
Namespace
Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods、services、replication controller和deployment等都是属于某一个namespace的(默认是default),而node、persistentVolumes等则不属于任何namespace。
Service
Service是应用服务的抽象,通过labels为应用提供负载均衡和服务发现。匹配labels的Pod IP和端口列表组成endpoints,由kube-proxy负责将服务IP负载均衡到这些endpoints上。
每个Service都会自动分配一个cluster IP(仅在集群内部可访问的虚拟地址)和DNS名,其他容器可以通过该地址或DNS来访问服务,而不需要了解后端容器的运行。
示例:
apiVersion: v1 kind: Service metadata: name: nginx spec: ports: - port: 8078 name: http targetPort: 80 protocol: tomcat-pod selector: app: nginx
Label
Label是识别Kubernetes对象的标签,以key/value的方式附加到对象上(key最长不能超过63字节,value可以为空,也可以是不超过253字节的字符串)。
Label不提供唯一性,并且实际上经常是很多对象(如Pods)都使用相同的label来标志具体的应用
Label定义好后其他对象可以使用Label Selector来选择一组相同label的对象(比如ReplicaSet和Service用label来选择一组Pod)。Label Selector支持以下几种方式:
- 等式,如app=nginx和env!=production
- 集合,如env in (production,qa)
- 多个label(它们之间是AND关系),如app=nginx,env=test
Annotations
Annotations是key/value形式附加于对象的注解。不同于Labels用于标志和选择对象,Annotations是用来记录一些附加信息,用来辅助应用部署、安全策略以及调度策略等。比如deployment使用annotations来记录rolling update的状态。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)