首页 > 其他分享 >Kubernetes 基本概念

Kubernetes 基本概念

时间:2023-01-18 13:31:52浏览次数:36  
标签:容器 Kubernetes 部署 应用程序 nginx 镜像 Pod 基本概念

Container

Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用 namespace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。

由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。这种一对一的应用镜像关系拥有很多好处。使用容器,不需要与外部的基础架构环境绑定, 因为每一个应用程序都不需要外部依赖,更不需要与外部的基础架构环境依赖。完美解决了从开发到生产环境的一致性问题。

容器同样比虚拟机更加透明,这有助于监测和管理。尤其是容器进程的生命周期由基础设施管理,而不是被进程管理器隐藏在容器内部。最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。

其他容器的优点还包括

  • 敏捷的应用程序创建和部署: 与虚拟机镜像相比,容器镜像更易用、更高效。
  • 持续开发、集成和部署: 提供可靠与频繁的容器镜像构建、部署和快速简便的回滚(镜像是不可变的)。
  • 开发与运维的关注分离: 在构建/发布时即创建容器镜像,从而将应用与基础架构分离。
  • 开发、测试与生产环境的一致性: 在笔记本电脑上运行和云中一样。
  • 可观测:不仅显示操作系统的信息和度量,还显示应用自身的信息和度量。
  • 云和操作系统的分发可移植性: 可运行在 Ubuntu, RHEL, CoreOS, 物理机, GKE 以及其他任何地方。
  • 以应用为中心的管理: 从传统的硬件上部署操作系统提升到操作系统中部署应用程序。
  • 松耦合、分布式、弹性伸缩、微服务: 应用程序被分成更小,更独立的模块,并可以动态管理和部署 - 而不是运行在专用设备上的大型单体程序。
  • 资源隔离:可预测的应用程序性能。
  • 资源利用:高效率和高密度。

Pod

Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或多个紧密关联的容器。

Pod 是一组紧密关联的容器集合,它们共享 IPC 和 Network 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 或者 rkt)、​​kubelet​​ 和 ​​kube-proxy​​ 服务

Namespace

Namespace 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的 pods, services, replication controllers 和 deployments 等都是属于某一个 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 # the port that this service should serve on
name: http
# the container on each pod to connect to, can be a name
# (e.g. 'www') or a number (e.g. 80)
targetPort: 80
protocol: TCP
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 的状态。




标签:容器,Kubernetes,部署,应用程序,nginx,镜像,Pod,基本概念
From: https://blog.51cto.com/u_15222272/6019211

相关文章

  • Kubernetes 部署MinIO
    2.2.4Kubernetes部署MinIOKubernetes的部署和状态集提供了在独立,分布式或共享模式下部署MinIO服务器的完美平台。在Kubernetes上部署MinIO有多种选择,您可以选择最适合......
  • 【纠错编码原理】1-纠错编码的基本概念:简单入门
    纠错编码的基本概念纠错编码就是在信息序列中加入一些冗余码元,组成一个相关的码元序列——码字,译码时利用码元之间的相关性质类检测错误和纠正错误。不同的纠错编码方法有......
  • 虚拟化技术浅析第二弹之初识Kubernetes
     作者:京东物流杨建民一、微服务架构起源单体架构:可以理解为主要业务逻辑模块(我们编写的代码模块,不包括独立的中间件)运行在一个进程中的应用,最典型的是运行在一个Tomcat容......
  • Kubernetes CronJob
    CronJobCronJob用于执行常规的计划操作(如备份、报告生成等)。格式*****分时日月周创建一个Job[root@master01job]#kubectlcreate-fcronjob.yamlapiVer......
  • 基于sealos 4.1.4 搭建Kubernetes集群
    软件版本操作系统:CentOS7.9Sealos:4.1.4Kubernetes:1.25.5步骤1、创建一个虚拟机作为模板,要求核心数大于等于2;2、模板机上确定net-tools、vim等安装到位;3、克......
  • 从 Kubectl Top 说起, 谈谈 Kubernetes 是如何进行资源监控的?
    一、前言kubectltop可以很方便地查看node、pod的实时资源使用情况:如CPU、内存。这篇文章会介绍其数据链路和实现原理,同时借kubectltop阐述k8s中的监控体系,窥一斑而......
  • ifc 基本概念
    基本概念和假设该规范包括定义数据类型的模式,以及指示数据类型在特定场景中的使用的常见概念。本章定义了此类通用概念,适用于具有特定用途的实体。这样的概念也构成了模型......
  • Kubernetes(k8s) YAML文件详解
    原文网址:https://www.cnblogs.com/liugp/p/16361487.html目录一、yaml文件简介1)yaml的语法规则:2)在Kubernetes中,只需要知道两种结构类型即可:二、yaml常见语法1......
  • 基于containerd部署kubernetes v1.20.4
    本次集群部署采用的容器技术是containerd系统版本:CentOs8.1k8s版本:v1.20.4containerd版本:ctrcontainerd.io1.4.3master:192.168.43.151node1:192.168.43.152node2:......
  • kubernetes安装ingress-nginx的步骤
    kubernetes安装ingress-nginx的步骤系统版本:CentOs8.1k8s版本:v1.21.3containerd版本:ctrcontainerd.io1.4.3一:准备yaml文件github仓库地址:wgethttps://raw.githubuse......