kubernetes基础入门知识点

2023-11-18

今天正式入门学习kubernetes,也就是大名鼎鼎的k8s,k就是开头字母,s是结尾字母,中间有8个字母,所以简称为k8s。这一小节学习总结一下Kubernetes的基础入门概念,比较简单,理解为主。


一.Kubernetes是什么

Kubernetes是Google开源的一个容器编排引擎,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效。它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。


二.Kubernetes的特性

☸ 1.自动化上线和回滚
Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。

☸ 2.服务发现与负载均衡
无需修改你的应用程序即可使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。关于服务发现和负载均衡的概念我在之前的Spring Cloud总结篇已经讲得非常清楚了,这里不做过多的解释。 服务发现:服务可以通过自动发现的形式找到它所依赖的服务。 负载均衡:如果一个服务启动了多个容器,能够自动实现请求的负载均衡。

☸ 3.存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。可以根据容器自身的需求自动创建存储卷。

☸ 4.自动完成装箱计算
Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

☸ 5.自我修复
Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。如果发现新发布的程序版本有问题,可以立即回退到原来的版本。

☸ 6.密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移、部署模式等。Kubernetes 的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。它的目的就是实现资源管理的自动化.


三.Kubernetes的设计架构

1.Kubernetes 组件介绍

一个 kubernetes 集群主要由若干个控制节点(Master Node)和 工作节点(Worker Node)构成,每个节点上都会安装不同的组件。

在这里插入图片描述
控制节点(Master Node):集群的控制平面,负责集群的决策。每个集群要求至少有一个 Master 节点来负责集群的管控。
○ API Server:集群操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制。
○ Scheduler:负责集群资源调度,按照预定的调度策略将 Pod 调度到相应的 node 节点上。
○ ControllerManager:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展和滚动更新等。
○ Etcd:负责存储集群中各种资源对象的信息。

工作节点(Worker Node) :集群的数据平面,负责为容器提供运行环境。工作负载节点,由 Master 分配容器到这些 Node 工作节点上,然后 Node 节点上的 Docker 负责容器的运行。
○ Kubelet:负责维护容器的生命周期,即通过控制 Docker ,来创建、更新、销毁容器。
○ KubeProxy:负责提供集群内部的服务发现和负载均衡。
○ Docker:负责节点上容器的各种操作。

2.kubernetes 组件调用关系的应用示例

以部署一个 Nginx 服务来说明 Kubernetes 系统各个组件调用关系:
● ① 首先需要明确,一旦 Kubernetes 环境启动之后,master 和 node 都会将自身的信息存储到etcd数据库中。
● ② 一个Nginx服务的安装请求首先会被发送到 master 节点上的 API Server 组件。
● ③ API Server 组件会调用 Scheduler 组件来决定到底应该把这个服务安装到那个 node 节点上。此时,它会从 etcd 中读取各个 node 节点的信息,然后按照一定的算法进行选择,并将结果告知 API Server 。
● ④ API Server 调用 Controller-Manager 去调用 Node 节点安装 Nginx 服务。
● ⑤ Kubelet 接收到指令后,会通知 Docker ,然后由 Docker 来启动一个 Nginx 的 Pod 。Pod 是 Kubernetes 的最小操作单元,容器必须跑在 Pod 中,一个 Pod 中可以有一个或多个容器。
● ⑥ 一个 Nginx 服务就运行了,如果需要访问 Nginx ,就需要通过 kube-proxy 来对 Pod 产生访问的代理,这样,外界用户就可以访问集群中的 Nginx 服务了。

3.kubernetes 相关的基本概念

● Master:集群控制节点,每个集群要求至少有一个 Master 节点来负责集群的管控。
● Node:工作负载节点,由 Master 分配容器到这些 Node 工作节点上,然后 Node 节点上的 Docker 负责容器的运行。
● Pod:Kubernetes 的最小控制单元,容器都是运行在 Pod 中的,一个 Pod 中可以有一个或多个容器。
● Controller:控制器,通过它来实现对 Pod 的管理,比如启动 Pod 、停止 Pod 、伸缩 Pod 的数量等等。控制器是一类概念,也就是说,不仅仅只有一种控制器,而是很多种控制器的,每一种控制器都有他特殊的应用场景。
● Service:Pod 对外服务的统一入口,可以维护同一类的多个 Pod 。
● Label:标签,用于对 Pod 进行分类,同一类 Pod 会拥有相同的标签。
● NameSpace:命名空间,用来隔离 Pod 的运行环境。


先写到这里,下一节再来学习k8s集群环境的搭建。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes基础入门知识点 的相关文章

  • 从 pod 连接到其他 pod

    基本上 我有一个部署 它创建了 3 个自动扩展的容器 PHP FPM NGINX 和包含应用程序的容器 所有这些都设置了机密 服务和入口 该应用程序还在 PHP FPM 和 NGINX 之间共享项目 因此一切都已设置完毕 由于我想使用 K8
  • Pod 清单写入 Deployment Manifest

    在 Kubernetes 中 将正在运行的 pod 清单转换为具有 x 个副本的部署的简单方法是什么 我尝试获取清单 k get po xyz o yaml gt po1 yaml 然后编辑 yaml 并与部署清单匹配 但这似乎并不容易 我
  • 跨命名空间共享秘密

    有没有办法在 Kubernetes 中跨命名空间共享秘密 我的用例是 我的所有命名空间都有相同的私有注册表 并且我想避免为每个命名空间创建相同的秘密 秘密 API 对象驻留在命名空间中 它们只能由同一命名空间中的 pod 引用 基本上 您必
  • 如何从 kubernetes 集群内部访问主机的 localhost

    在此应用程序中 nodejs pod 在 kubernetes 内部运行 而 mongodb 本身作为 localhost 位于主机外部 这确实不是一个好的设计 但它只适用于开发环境 在生产中 将有一个单独的 mongodb 服务器 因为这
  • Kubernetes ConfigMap 大小限制

    Though resourceQuotas可能会限制命名空间中的配置映射的数量 是否有任何这样的选项来限制单个配置映射的大小 我不喜欢某些用户开始上传大型文本文件作为配置映射 ConfigMap etcd 支持的最大大小是多少 如果 etc
  • Kubernetes 1.8 支持的 Docker 版本

    我要将我的 Kubernetes 集群升级到该版本1 8 7 有谁知道哪个 docker 版本与其最兼容 这是我在 Kubernetes 官方页面上找到的 但我想它可能是针对最新的 k8s 版本的 1 9 在每台计算机上安装 Docker
  • 从 celery 工作人员到普罗米修斯的自定义指标

    我有一些 celery 工作人员在 kubernetes 下的容器中运行 它们不会由 celery 自动缩放 并且每个都在单个进程中运行 即没有多处理 我想从他们那里获取一堆不同的指标到普罗米修斯中 我研究过 celery promethe
  • Ubuntu 16.04 中 kubeadm join 命令每次都会超时

    我正在使用 Ubuntu 16 04 Xenial 但我遇到了一个问题kubeadm加入时nodes to my master 在加入一个node to my master 我不断遇到超时问题 discovery Failed to req
  • Kubernetes Pod 动态环境变量

    我需要能够将自定义环境变量分配给 Pod 的每个副本 一个变量应该是一些随机的 uuid 另一个唯一的数字 怎么可能实现呢 我更愿意继续使用带有副本的 部署 如果这不是开箱即用的 如何通过自定义复制控制器 控制器管理器来实现 有没有可用的钩
  • kubectl --token=$TOKEN 未使用令牌的权限运行

    当我使用命令时kubectl与 token标记并指定令牌 它仍然使用来自kubeconfig file 这就是我所做的 NAMESPACE default SERVICE ACCOUNT NAME sa1 kubectl create sa
  • 在容器中运行多个相似的进程有意义吗?

    提供有关该问题的背景的简要背景 目前 我和我的团队正在将微服务迁移到 k8s 以减少维护多个部署工具和管道的工作量 我们计划迁移的微服务之一是 ETL Worker 它监听 SQS 上的消息并执行多阶段处理 它是使用 PHP Laravel
  • kubectl 运行本地 docker 镜像 - ImagePullBackOff 状态

    我在本地计算机上构建 docker 映像 并尝试使用 kubectl 拉取 docker 映像 但它没有启动 docker 容器 图像以 docker 命令开头 REPOSITORY TAG IMAGE ID CREATED SIZE to
  • 除了 80 / 443 之外,我还可以为 Kubernetes 入口设置自定义端口来侦听吗?

    我并不是说能够路由到特定端口 我的意思是实际更改入口侦听的端口 这可能吗 如何 这是在哪里记录的 不 从Kubernetes 文档 https kubernetes io docs concepts services networking
  • Podman:如何解析使用 Kubernetes YAML 部署的 pod 的主机名

    我正在使用 podman 4 5 dev 我使用以下方式部署了两个 Pod podman kube 播放 foo yaml podman kube play bar yaml 我在文件中指定了 pod 的主机名 但它们不会在容器内得到解析
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 如何将 configmap 附加到 Kubernetes 中的部署?

    根据此处找到的说明 https kubernetes io docs tasks access application cluster connecting frontend backend https kubernetes io docs
  • Kubernetes WatchConnectionManager:执行失败:HTTP 403

    我遇到错误Expected HTTP 101 response but was 403 Forbidden 在我使用以下命令设置新的 Kubernetes 集群之后Kubeadm当我提交下面遇到的 pyspark 示例应用程序时 只有一个主
  • 如何将 kubernetes LoadBalancer Ingress URL 发布到 aws Route53

    今天 当我通过 aws 使用 kubernetes 启动一个应用程序时 它公开了一个公开可见的 LoadBalancer Ingress URL 但是要将其链接到我的域以使公众可以访问该应用程序 我需要在每个设备上的浏览器中手动进入 aws
  • Kubernetes 通过基于时间的触发器扩展 Pod

    我有一台在 Kubernetes 上运行的服务器来处理每小时的处理作业 考虑使用服务来公开 pod 并使用 外部 cron 作业来访问负载均衡器 以便 kubernetes 可以根据需要自动缩放以处理更高的负载 然而在实现中 如果 cron
  • 如何防止两个卷声明在 Kubernetes 上声明同一个卷?

    在 GKE 上的 Kubernetes 集群上 我有以下持久卷声明 PVC kind PersistentVolumeClaim apiVersion v1 metadata name registry spec accessModes R

随机推荐