极速上手k8s,Kubernetes 从入门到摸鱼系列-理论篇

这篇具有很好参考价值的文章主要介绍了极速上手k8s,Kubernetes 从入门到摸鱼系列-理论篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 引言👋

大家好,我是比特桃!随着微服务架构越来越流行,大规模的微服务容器编排成了一件具有挑战的事情。在这次容器化云原生的发展中,Docker 成了容器化的赢家,而 Kubernetes 则成为了容器编排的赢家。k8s 是 Kubernetes 的简称,只因为 K 和 s 中间有8个字符。或许你还会看到 k3s ,这是轻量级的 Kubernetes,甚至可以跑在树莓派中。
极速上手k8s,Kubernetes 从入门到摸鱼系列-理论篇,kubernetes,容器,云原生

计算机的核心就是抽象,操作系统的抽象,让普罗大众用起来了电脑。面向对象的抽象,让软件开发人员更容易设计复杂系统。容器化的抽象,使得应用可以轻松的在云平台中提服务。当我们容器过于繁杂,上百上千的时候,不免就需要一个工具可以对这些容器进行编排控制。不可否认的是,如果你的应用并没有存在容器太多,也不存在高并发分布式的情况下。你或许并不需要 k8s,这被称为 YAGNI 理论,不知道则可以不用。当然了,即便是我们实际项目并不需要 k8s,但学习跟进一下这个技术也是很有必要的。

2. 架构☕️

Kubernetes 孵化于 Google 公司,并开源给了 CNCF(云原生基金会)。可在不同的服务器环境中,进行统一的容器编排部署,确保容器的高可用、高性能、可扩展、可恢复。下图为 k8s 一个集群的基础架构,主要包含两大部分:控制节点、工作节点。
极速上手k8s,Kubernetes 从入门到摸鱼系列-理论篇,kubernetes,容器,云原生
控制节点相当于整个集群的大管家,负责协调调度工作节点、以及与外界交互的部分。我们连接 k8s 的方式有两种,分别是Restful API 接口、KubeCLI命令行,通过yaml格式或json格式来进行沟通。而控制节点中主要包含了:控制管理器、调度器、etcd。ControllerManager负责运行管理集群状态控制器;Scheduler负责将pod调度到集群中的工作节点上;etcd是一个分布式key/value存储,用来存储和检索有关集群的信息。控制节点的 API Server 则是与工作节点交互的接口。
极速上手k8s,Kubernetes 从入门到摸鱼系列-理论篇,kubernetes,容器,云原生
工作节点主要包含:kubelet、kube-proxy。kubelet是在每个工作节点上运行的守护进程,他负责与控制平面通讯;kube-proxy是每个工作节点上运行的网络代理,他负责将流量路由到正确的pod。
极速上手k8s,Kubernetes 从入门到摸鱼系列-理论篇,kubernetes,容器,云原生

3. 组件🍗

Kubernetes 始终是个工具类软件而已,在使用角度来看,它和 Docker 类的工具并无两样。都只是协助业务提供了各种功能的调用,但本身并不具备提供服务的能力。所以在面对这类软件的时候,应该先了解它都具备什么样的功能调用,这样我们才知道自己需要他为我们做什么。

3.1 Pod

k8s 是针对容器的更高层次抽象,所以它的最小单位是 pod,一个可以包含多个容器的盒子。这里额外插入一个 k8s 世界中的一个重要理念:声明式无状态。我们和 k8s 通过 API 或 kubectl 沟通的时候,是一种声明式的方式告诉他的。也就是说,你只需要告诉 k8s 你期望最终的效果是什么样的,至于 k8s 怎么做,你不用管。并且 pod 也是一种无状态的,相同的一个 pod,他们的 ip 也不一样。即便崩溃后,k8s 重新新建了一个 pod 仍然不会记录上一个 pod的任何内容,ip也会变。所以这种声明式无状态的思想,要贯彻使用 k8s 的全过程。

3.2 Service & Ingress

Pod 既然这么容易变,那 pod 之间是如何调用的呢?我们可以使用 k8s 的service,一个 service 是一个静态的ip,可以索引它下面所有的 pod。

在当我们想在用户浏览器中使用 k8s 集群所提供的应用时,我们并不希望用户可以直接访问 service,因为它是我们内部沟通的一个组件。所以可以通过 Ingress 组件来对外提供服务,它再去转发到具体的 Service 中。

3.3 ConfigMap & Secret

通常,开发和部署在不同环境下需要不同的配置。在 Spring 开发中,我们会用 profile 来区分。而在 k8s 中,提供了配置文件和一些敏感的用户名密码信息的组件,供应用配置使用。ConfigMap 存储非敏感的配置信息;Secret 存储加密后的配置信息。

3.4 Volume

如 Docker 容器一样,k8s 也提供了持久化的功能。比如数据库 pod 如果不持久化的话,就会存在数据丢失的问题。Volume 允许我们映射本地或远程的持久化路径地址,进行数据持久化。正如之前所说的,k8s 理念是无状态的,所以它本身并不提供任何数据的持久化。所有持久化的工作都需要我们自己完成。

3.5 Deployment & StatefulSet

真正在使用 k8s 的时候,我们其实很少会主动管理一个 pod。试想一下,如果做个分布式的部署,还需要每个工作节点都单独部署管理,那和 Docker 还有什么区别。所以我们会用 k8s 提供的 Deployment 组件,它可以直接声明我们想要的 pod,并且也指明了分布式部署的数量。并且它也提供了固定的 IP 以及负载均衡的功能。在无状态的微服务应用中,我们可以任意声明想要多少个 replica 当做该容器的替补。但如果我们部署数据库,用了 Volume 使其成为了有状态的 pod,则需要使用 StatefulSet 组件。它会保障数据库的读取和写入同步,以便不会出现数据库不同步的情况。虽然 k8s 为了兼容数据库这种场景提供了 StatefulSet 组件来支持有状态的服务。但其实有状态的服务使用外部托管,而不使用 k8s 去做也是一种常见的做法,因为 k8s 的主要能力就是无状态。

4. 总结🍡

现在,我们已经了解了 k8s 的作用及基础架构。也明白了这个工具类的软件,都提供了什么样的功能组件。我们只需要使用这些组件的组合,通过编写 yaml 文件,就可以完成分布式应用的部署。

  1. Pod :容器抽象
  2. Service :通讯组件
  3. Ingress :服务入口
  4. ConfigMap & Secret :配置文件
  5. Volume :数据持久化
  6. Deployment & StatefulSet :部署分布式应用

本文简明扼要的阐述了 k8s 中,所涉及的各种概念及理论。而后续的实操篇将介绍 minikube 及服务器中的使用,如果感觉理论篇不错的话欢迎阅读后面的文章。文章来源地址https://www.toymoban.com/news/detail-544516.html

5. 参考🍩

  1. Kubernetes Explained in 6 Minutes | k8s Architecture
  2. Kubernetes 官方文档

到了这里,关于极速上手k8s,Kubernetes 从入门到摸鱼系列-理论篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(K8s)从入门到精通系列之七:K8s的基本概念和术语之安全类

    开发的Pod应用需要通过API Server查询、创建及管理其他相关资源对象,所以这类用户才是K8s的关键用户。K8s设计了Service Account这个特殊的资源对象,代表Pod应用的账号,为Pod提供必要的身份验证。在此基础上,K8s实现和完善了基于角色的访问控制权限系统——RBAC(Role-Based Acce

    2024年02月15日
    浏览(48)
  • Kubernetes(K8s)从入门到精通系列之四:K8s的基本概念和术语之集群类

    集群表示一个由Master和Node组成的K8s集群。 Master指的是集群的控制节点。 在每个K8s集群都需要有一个或一组被称为Master的节点,来负责整个集群的管理和控制。 Master通常占据一个独立的服务器(在高可用部署中建议至少使用3台服务器),是整个集群的大脑。 在Master上运行以下

    2024年02月15日
    浏览(43)
  • Kubernetes(K8s)从入门到精通系列之三:K8s的基本概念和术语之资源对象概述

    K8s中的基本概念和术语大多是围绕资源对象(Resource Object)来说的,而资源对象在总体上可分为以下两类: 某种资源的对象,例如节点(Node)、Pod、服务(Service)、存储卷(Volume)。 与资源对象相关的事物与动作,例如标签(Label)、注解(Annotation)、命名空间(Namespace)、部署(Deployment)、

    2024年02月14日
    浏览(47)
  • Kubernetes(K8s)从入门到精通系列之十四:安装工具

    Kubernetes 命令行工具 kubectl, 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。 kind 让你能够在本地计算机上运行 Kubernetes。 使用这个工具需要你安装 Docker 或者 Podman。 与 kind 类似,minikube 是一个工具, 能让你在本地运

    2024年02月14日
    浏览(32)
  • Kubernetes(K8s)从入门到精通系列之十一:安装kubeadm

    一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。 CPU 2 核心及以上。 集群中的所有机器的网络彼此均能相互连接(公网和

    2024年02月14日
    浏览(43)
  • Kubernetes(K8s)从入门到精通系列之十三:软件负载平衡选项

    当设置具有多个控制平面的集群时,可以通过将 API Server 实例置于负载均衡器后面并在运行 kubeadm init 以便新集群使用它时使用 --control-plane-endpoint 选项来实现更高的可用性。 当然,负载均衡器本身也应该具有高可用性。这通常是通过向负载均衡器添加冗余来实现的。为此,

    2024年02月14日
    浏览(34)
  • Kubernetes(K8s)从入门到精通系列之十二:安装和设置 kubectl

    Kubernetes 命令行工具 kubectl, 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。 kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.27 版本的客户端能与 v1.26、 v1.27 和 v1.28 版本的控制面通信。 用最新兼容

    2024年02月14日
    浏览(32)
  • Kubernetes (K8S) 3 小时快速上手 + 实践

    https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/nd7yOvdY#nav_3 2.1.1 凭证问题 2.1.2 踩坑 问题1:初始化集群控制台 Control plane 解决: 问题2:把工作节点加入集群(只在工作节点跑) 只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起。 2.3.1 安装(在

    2024年01月18日
    浏览(35)
  • Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群

    默认情况下,kubeadm 在每个控制平面节点上运行一个本地 etcd 实例。也可以使用外部的 etcd 集群,并在不同的主机上提供 etcd 实例。 可以设置HA集群: 使用堆叠控制控制平面节点,其中 etcd 节点与控制平面节点共存 使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包