找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 105|回复: 1

[教程] Kubernetes

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:245
  • 打卡月天数:2
  • 打卡总奖励:7719
  • 最近打卡:2025-12-05 20:56:49

350

主题

557

回帖

1万

积分

管理员

积分
10407
发表于 2024-4-17 08:54:04 | 显示全部楼层 |阅读模式
软件开发70年历史,软件工程发展了近50年,互联网从出现到现在的蓬勃发展二十多年。软件开发的模型从最早的瀑布模型,到敏捷开发,再到现在的DevOps理念。软件的形态从物理扎线,到打孔编程,再到大机,到微机,到网络时代的C/S、B/S、再到移动互联网时代App。架构的演变经过几十年的进化,在硬件、网络、信息的认知、用户数等都达到条件后,再才发展出了微服务,然后进而才出现了Kubernetes的框架。

Kubernetes的出现是大型互联网公司(Google)在非常庞大的微服务体系下,为了降低维护成本,为了提高维护效率,提高交付效率,更重要是为了服务自治不断思考和实践才开发出来的。IT行业的技术革新,总是会有先驱者为我们艰辛的躺平道路,然后我们再站在巨人的肩膀上借得更高的视野。

Kubernetes是什么?它不是简单的master/worker,controller/apiserver/etcd/scheduler等等一些二进制及配置文件。也不仅仅是pod/deployment/service/daemonset等等一些部署单元,也更不是一个简单的PAAS平台。它是一个体系,包含了软件工程管理、软件开发模型和理念、项目管理、架构设计、运维管理、交付管理等等,除此之外才是一个类PAAS平台。


如果要真正能了解Kubernetes,除了学习基础的Linux,你还需要了解什么才算入门?
  • 微服务架构,及微服务能解决的问题
  • 对应微服务的语言生态,如JAVA、GO、Python等
  • 基础的软件配置管理,如代码管理、CI/CD、版本管理
  • 基础的生产维护管理,如变更管理、流程管理、监控、成本管理等
  • 其它运维知识,如基础网络、中间件、运维工具等
而上面这些是需要实际工作经验,而且需要多方了解才能积累的。了解上面这些知识后,你再回过头来看Kubernetes。你才能明白它为什么这么设计;也才能明白每个资源对象在什么场景使用;也才能明白Kubernetes中配置管理、变更管理怎么做,与传统虚拟机部署方式有什么不同;也才能明白信息收集及故障排错怎么做。

首先,你要知道你自己需要不需要学习 Kubernetes?Kubernetes 是一个专业性极强的工具,如果你的业务没有到一定的量级,根本无需使用 Kuberentes ,就可以完成工作。

先说下学习kubernetes的大概思路,学习一个产品或技术,要达到能使用的目的,一般需要掌握以下内容:
  • 了解这个产品、工具能做什么
  • 解决了什么问题
  • 产品架构是什么样的
  • 主要组件和该组件提供的功能
  • 产品的主要功能有哪些
  • 基本的产品部署、配置方法
  • 简单的故障排查能力
把Kubernetes的主要概念、组件和功能特性画一个脑图,可以从整体上对涉及的知识体系有一个大概的了解。类似下面这张脑图就提供了一个知识地图,可以按照这个框架来进行学习。从图里面能看出来,因为主要在IaaS这一层,除了主要组件外,kubernetes主要涉及的有计算、存储、网络、安全几个领域。这些领域内的很多知识都是通用的,如果已经有IaaS基础,那只需要学习Kubernetes独有的一些概念就可以了。把核心概念了解清楚是最重要的。对于初学者,学习这些基础概念有一个很好的资源,就是CNCF官方的http://Kubernetes.io这个网站。对于每个概念、组件都有介绍和实例,而且有很多文档已经有中文版本。想要入门的话,基本上把这个网站上的内容弄明白就够了。
除了理论学习,实践也很重要。对着每个概念都自己实际操作一遍,可以检测是否真正了解并掌握了这个概念,还可以加强学习效果。在kubernetes刚出推出的时候,搭建一个环境还是很麻烦的,现在有了kubeadm、minikube等工具,搭建环境也变得简单很多了。最省时间精力的办法还是使用http://Kubernetes.io这个网站tutorial部分提供的现成学习环境,完全不需要用户自己搭建环境就可以进行大部分kubernetes的基本操作,是非常好的实践资源。利益相关:网易轻舟提供全栈微服务能力,帮助用户快速实现易接入、易运维的微服务解决方案。覆盖开发、测试、构建、发布到上线运行、治理、运维以及故障排查,源于网易内部的互联网业务实践,经过金融、制造、电商、物流等行业客户的生产验证。
一、学习 Kubernetes 的预备知识
在开始学习 kubernetes 之前,你需要深入了解一些底层技术和概念。
  • 分布式系统:了解分布式系统基础知识以及它在现代 IT 基础架构中的用例。
  • 身份验证和授权:这是 在IT 中非常基本的一个概念。然而,资历尚浅的工程师往往也没能很好掌握这块知识,所以这块要好好理解学习。
  • 键值存储:这是一种 NoSQL 数据库。你需要了解它的基础知识和用例。
  • API: Kubernetes 是一个 API 驱动的系统。因此,你需要了解 RESTFUL API。另外,还要尝试了解 gRPC API。
  • YAML:它是一种数据序列化语言,可用于数据存储和配置文件。它非常容易学习,从 Kubernetes 的角度来看,我们将把它用于配置文件。所以理解 YAML 语法非常重要。
  • 容器:容器是 kubernetes 的基本构建块。Kubernetes 的主要工作是编排容器。你需要学习所有容器基础知识,并具有使用 Docker 或 Podman 等容器工具的实践经验。我还建议阅读有关Open container initiative和 Container Runtime Interface (CRI) 的文章
  • 服务发现:这在 Kubernetes 中是很重要的一块。你需要具备客户端和服务器端服务发现的基本知识。简而言之就是,在客户端服务发现中,请求进入服务注册中心以获取可用于后端服务的端点。在服务器端服务发现中,请求转到负载均衡器,负载均衡器使用服务注册表来获取后端服务的结束。
  • 网络基础
    • L4 和 L7 层(OSI 层)
    • SSL/TLS:单向和双向 TLS
    • 代理人
    • 域名系统
    • IP表
    • IPVS
    • 软件定义网络 (SDN)
    • 虚拟接口
    • 覆盖网络

二、学习 Kubernetes 架构
要弄清 Kubernetes 的架构并非易事。Kubernetes 有许多活动部件,只有了解了这些部件才能深入了解发生在系统表面下的事。而在学习架构时,还会遇到我们在第一节中谈到的那些预备知识。
Kubernetes 是一整个复杂的系统,学习它的核心架构可能会让人有点不知从何下手。不过,随着实践经验的逐渐累积,你将会更好地理解它的核心架构。
下面是我的建议。了解 Kubernetes 中所涉及的高级架构和关键组件,如果无法掌握这些知识,你可以花时间对特定主题进行更多的学习,或者在动手实践的同时学习这个概念。
可以查看Kubernetes 架构指南,详细了解所有的 Kubernetes 组件。
总的来说,你需要学习以下内容:
  • 控制平面组件:了解每个组件的作用,如 API 服务器、etcd、调度程序和控制器管理器。
  • 工作节点组件:了解 Kube Proxy、Kubelet、Container Runtime
  • 插件组件: CoreDNS、网络插件(Calico、weave 等)、Metric Server
  • 集群高可用性:大多数组织使用托管 Kubernetes 服务(GKE、EKS、AKS 等)。因此,云提供商负责集群控制平面的高可用性。但是,了解在多区域和区域中扩展集群的高可用性概念非常重要。
  • 网络设计:虽然在开放网络中不受限制地设置集群很容易,但在公司网络中却不是那么容易。作为 DevOps 工程师,你应该了解 Kubernetes 网络设计和要求,以便更好地与网络团队协作。例如,当我在谷歌云上使用 kubernetes 设置时,我们使用了一个在公司网络中不可路由的 CIDR pod 范围。作为解决方法,我们必须为 pod 网络部署 IP 伪装。



  • 打卡等级:热心大叔
  • 打卡总天数:245
  • 打卡月天数:2
  • 打卡总奖励:7719
  • 最近打卡:2025-12-05 20:56:49

350

主题

557

回帖

1万

积分

管理员

积分
10407
 楼主| 发表于 2024-4-20 22:50:18 | 显示全部楼层
    k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。那么,问题来了,要运维何用?
    k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。。。
k8s的全生命周期管理
在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。
1、创建集群:为什么要使用集群?
    有一句古话叫做三个臭皮匠,赛过诸葛亮,这就是创建集群的原因。。。
    使用集群,create cluster是为了掩盖底层的无能,在各种环境中,底层的硬件各不相同,有的是各种低廉的服务器,有的各种云环境,有的是各种vm,有的各种host machine,要想屏蔽底层的细节,增强可靠性和稳定性,从而需要创建集群。
    创建集群的好处就是,统一对外提供接口,无须进行各种复杂的调用;提供更好的可靠性,服务器宕机那么频繁,物理磁盘那么容易损坏,无须担心,集群统一进行调配;提供更好的性能,组合集群中各个机器的计算存储网络资源,提供更好的TPS和PS;提供横向扩容的能力,在进行横向扩容的时候,性能基本上能呈线性增长。
    集群看起来很牛,那么创建起来很复杂么?并不会,在k8s只要使用两条指令就可以创建一个集群,一个是kubectl init进行初始化,创建一个master节点,第二条指令就是kubectl join xxx创建一个node节点,加入这个集群。
    在这边可以看到k8s在物理上进行划分的时候,划分了两种类型的主机,一个master节点,主要用来调度,控制集群的资源等功能;而node节点,主要是用来运行容器的节点,也就是运行服务的节点。
    其实集群都差不多,master用来控制,用来存储各种元数据,node节点是一个工作节点,真正来干活的;node节点定时与master进行通信,通过kubelet进程来汇报信息。




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2025-12-7 07:33 , Processed in 0.027573 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表