【K8S系列】深入解析 k8s:入门指南(一)

简介: 【K8S系列】深入解析 k8s:入门指南(一)

1.背景介绍

k8s本身是一个很庞大的技术,读完这篇文章,希望你能在以下四个方面有一定的了解::

  • 了解容器技术、k8s、各大厂商使用k8s的情况
  • 理解掌握k8s的核心对象、架构层面
  • 掌握k8s的安装方式
  • k8s常见问题的解决方案

2.前情提要

在真正介绍k8s之前,需要先讲一下 架构对比和容器技术

2.1 架构对比

我们先一起看下单体架构

这张图是单体架构,那单体架构它有一个什么样的特点呢?

单体架构最早期,如果要开设一个网站,在这种架构下面,所有的业务逻辑都是在一起,那么这种紧偶合的应用架构会导致,随着业务复杂性提升,整个网站的维护成本会变得很高,有时候可能会因为改一点功能,就牵一发动全身,维护成本极高


那么怎么解决这个问题呢?

可以看到,业界在架构层面一直在不断地探索。从单体应用,到分布式,到微服务到k8s到service mesh。这都是探索出来的一些方案。今天我们看下微服务


看下这张图一个应用系统,它被切分成了很多微服务,比如,我们修改某个服务里面的业务逻辑,只需要发布这个服务即可,其他服务不会受到影响

问题1:

但是,虽然说微服务解耦了系统复杂性,但是在另一个层面上也带来了一个挑战问题,就是微服和微服之间如何互相通讯,服务如何部署、管理。就变成了一个需要解决的问题

怎么解决的呢,肯定是解决了,而且还有很多方案,容器技术就是其中一种。

如果从 2013 年 Docker 项目发布开始算起,这次变革也不过 10 年时间。容器技术,就已经完全重塑了整个云计算市场的形态。

它不仅催生出了一批容器技术人,更培育出了一个有相当规模的开源技术市场。因此很多公司都争相把容器和 Kubernetes 项目树立为战略重心之一。


容器技术为什么这么受欢迎?容器技术是什么?

讲容器技术之前,先思考一下这个问题


问题2:


在paas阶段,平台已经被包装成一个服务了,那用户如何使用这个服务,如何把自己的应用打包放到paas平台,这是paas需要解决的用户层面的问题。我们带着这个问题,来看下容器技术。


2.2 容器技术

想到容器技术,首先会想到Container这个单词,它直译过来,是容器,集装箱,货柜


其实容器技术是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把我们的应用“装”起来的一种技术。

这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去


容器技术的核心功能:是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。进而为每个应用创造了独立的运行空间

那他底层是如何实现的呢?是使用Linux 容器最基础的两种技术:Namespace 和 Cgroups

  • Namespace:作用是“隔离”,它让应用进程只能看到该 Namespace 内的“世界”
  • Cgroups :作用是“限制”,它给这个“世界”围上了一圈看不见的墙

这么一折腾,进程就真的被“装”在了一个与世隔绝的房间里,而这些房间就是 PaaS 项目赖以生存的应用“沙盒”。

我们回忆一下刚刚说的那个paas如何给应用打包问题,这样是不是就已经解决了?对,就是解决了!

这也是 Docker 项目刚刚开源不久,就能够带领一家原本默默无闻的 PaaS 创业公司脱颖而出,又迅速占领了所有云计算领域头条的技术原因。

总结下,我们可以简单理解为,容器,就是一种特殊的进程。

2.3 容器技术的优点

容器技术有以下优点:

  1. 一致的运行环境
  2. 更高效的利用系统资源
  3. 更快速的启动时间
  4. 持续交付和部署
  5. 更轻松的迁移
  6. 更轻松的维护和扩展

总结下来:安全性、隔离性、便携性、可配额

举个例子,一致的运行环境。主要是指:因为云端与本地服务器环境不同,应用的打包过程,一直是使用 PaaS 时最“痛苦”的一个步骤

但有了容器之后,更准确地说,有了容器镜像之后,这个问题被非常优雅地解决了。

另外,因为容器是一个特殊的进程,他更小了,所以资源利用率和启动时间变得更高更快了。

2.4 容器编排

随着互联网需求的爆发,服务暴增,出现了容器编排,而且容器从最开始一个开发者手里的小工具,一跃成为了云计算领域的绝对主角这也标志着它真正得到了市场和生态的认可

能够定义容器组织和管理规范的“容器编排”技术,就当仁不让地坐上了容器技术领域的“头把交椅”。

这其中,最具代表性的容器编排工具,属于:

1. Docker 公司的 Compose+Swarm 组合

2. Google 与 RedHat 公司共同主导的 Kubernetes 项目


3 K8S介绍

3.1 K8S是什么

有了前面内容的铺垫,现在我们来正式看下Kubernetes 是什么吧

他简称k8s,是谷歌开源的容器集群管理系统,他的前身Borg是一直以来都被誉为 Google 公司内部最强大的“秘密武器”。


这个说法,虽然有些夸张,但不算是吹牛可以看到,上图中,Borg处于架构最底层。

可以说:Borg 项目是谷歌内部整个基础设施技术栈的最底层,他是承载 Google 公司整个基础设施的核心依赖

所以,Kubernetes 从一开始就比较幸运地站在了一个他人难以企及的高度:

而且在它的成长阶段,这个项目每一个核心特性的提出,几乎都脱胎于 Borg 系统的设计与经验。

更重要的是,这些特性在开源社区落地的过程中,又在整个社区的合力之下得到了极大的改进,修复了很多当年遗留在 Borg 体系中的缺陷和问题

可以说,在某些功能层面,他比Borg更强大一些


Kubernetes 项目的本质:是为用户提供一个具有普遍意义的容器编排工具

它着重解决的问题是:大规模集群中的各种运行任务之间的关系处理,这些关系的处理,是作业编排和管理系统最困难的地方。

其能力有:

基于容器的应用部署、维护和滚动升级

负载均衡和服务发现

跨机器和跨地区的集群调度

自动伸缩

无状态服务和有状态服务

插件机制保证扩展性

3.2 K8S设计思想

Kubernetes 项目最主要的设计思想:从更宏观的角度,以统一的方式来定义任务之间的各种关系,并且为将来支持更多种类的关系留有了很多余地

而且,从一开始,Kubernetes 项目就没有像同时期的各种“容器云”项目那样,把 Docker 作为整个架构的核心,而仅仅把它作为最底层的一个容器运行时实现

它真正的价值,在于提供了一套基于容器构建分布式系统的基础依赖。这也是k8s能长久发展的一个原因


可以从这四个方面了解一下:

可扩展性

• 基于微服务部署应用

• 横向扩容缩容

• 自动扩容缩容

高可用

• 基于replicaset,statefulset 的应用高可用

• Kubernetes 组件本身高可用

可移植性

• 多种 host Os 选择

• 多种基础架构的选择

• 基于集群联邦建立混合云

安全

• 基于 TLS 提供服务

• Serviceaccount 和 user

• 基于 namespace 的隔离

• secret

• Taints,psp,networkpolicy

3.3 K8S的优势

资源利用:高效率/高密度

低耦合:松散耦合、分布式、弹性、解放的微服务

可移植性和灵活性:K8s有很强的兼容性,它可以在各种基础设施和环境设置下运行

敏捷性:敏捷应用程序的创建和部署,与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率

跨平台:跨云和操作系统,可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行

开源:CNCF负责管理K8s,这是一个完全开源、由社区驱动的项目

多云兼容性:    

1.容器编排支持多云架构    

2.轻松实现环境迁移/扩展

市场领导者:大部分公司都在使用K8s。根据一项调查,K8s被客户广泛使用 (88%),尤其在生产环境中(74%)

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
595 2
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
Kubernetes 监控 API
深入解析Kubernetes及其在生产环境中的最佳实践
深入解析Kubernetes及其在生产环境中的最佳实践
807 93
|
12月前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
12月前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
11月前
|
Web App开发 移动开发 前端开发
React音频播放器样式自定义全解析:从入门到避坑指南
在React中使用HTML5原生<audio>标签时,开发者常面临视觉一致性缺失、样式定制局限和交互体验割裂等问题。通过隐藏原生控件并构建自定义UI层,可以实现完全可控的播放器视觉风格,避免状态不同步等典型问题。结合事件监听、进度条拖拽、浏览器兼容性处理及性能优化技巧,可构建高性能、可维护的音频组件,满足跨平台需求。建议优先使用成熟音频库(如react-player),仅在深度定制需求时采用原生方案。
475 12
|
11月前
|
Java 关系型数据库 数据库连接
Javaweb之Mybatis入门程序的详细解析
本文详细介绍了一个MyBatis入门程序的创建过程,从环境准备、Maven项目创建、MyBatis配置、实体类和Mapper接口的定义,到工具类和测试类的编写。通过这个示例,读者可以了解MyBatis的基本使用方法,并在实际项目中应用这些知识。
276 11
|
11月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
3322 11
|
机器学习/深度学习 数据采集 数据挖掘
Python编程语言的魅力:从入门到进阶的全方位解析
Python编程语言的魅力:从入门到进阶的全方位解析

推荐镜像

更多