kubernetes零基础快速入门!初学者必看!

qfjavabd qfjavabd     2022-12-08     274

关键词:

  起源

  Kubernetes 源自于 google 内部的服务编排系统 - borg,诞生于2014年。它汲取了google 十五年生产环境的经验积累,并融合了社区优秀的idea和实践经验。

  名字

  Kubernetes 这个名字,起源于古希腊,是舵手的意思,所以它的 logo 即像一张渔网又像一个罗盘,谷歌选择这个名字还有一个深意:既然docker把自己比作一只鲸鱼,驮着集装箱,在大海上遨游,google 就要用Kubernetes去掌握大航海时代的话语权,去捕获和指引着这条鲸鱼按照主人设定的路线去巡游。

  核心

  得益于 docker 的特性,服务的创建和销毁变得非常快速、简单。Kubernetes 正是以此为基础,实现了集群规模的管理、编排方案,使应用的发布、重启、扩缩容能够自动化。

  Kubernetes - 认知

  集群设计

  Kubernetes 可以管理大规模的集群,使集群中的每一个节点彼此连接,能够像控制一台单一的计算机一样控制整个集群。

  集群有两种角色,一种是 master ,一种是 Node(也叫worker)。

  master 是集群的大脑,负责管理整个集群:像应用的调度、更新、扩缩容等。

  Node 就是具体干活的,一个Node一般是一个虚拟机或物理机,它上面事先运行着 docker 服务和 kubelet 服务( Kubernetes 的一个组件),当接收到 master 下发的任务后,Node 就要去完成任务(用 docker 运行一个指定的应用)

  

技术图片

 

  Deployment - 应用管理者

  当我们拥有一个 Kubernetes 集群后,就可以在上面跑我们的应用了,前提是我们的应用必须支持在 docker 中运行,也就是我们要事先准备好docker镜像。

  有了镜像之后,一般我们会通过Kubernetes的 Deployment 的配置文件去描述应用,比如应用叫什么名字、使用的镜像名字、要运行几个实例、需要多少的内存资源、cpu 资源等等。

  有了配置文件就可以通过Kubernetes提供的命令行客户端 - kubectl 去管理这个应用了。kubectl 会跟 Kubernetes 的 master 通过RestAPI通信,最终完成应用的管理。

  比如我们刚才配置好的 Deployment 配置文件叫 app.yaml,我们就可以通过

  kubectl create -f app.yaml 来创建这个应用啦,之后就由 Kubernetes 来保证我们的应用处于运行状态,当某个实例运行失败了或者运行着应用的 Node 突然宕机了,Kubernetes 会自动发现并在新的 Node 上调度一个新的实例,保证我们的应用始终达到我们预期的结果。

  

技术图片

 

  Pod - Kubernetes最小调度单位

  其实在上一步创建完 Deployment 之后,Kubernetes 的 Node 做的事情并不是简单的docker run 一个容器。出于像易用性、灵活性、稳定性等的考虑,Kubernetes 提出了一个叫做 Pod 的东西,作为 Kubernetes 的最小调度单位。所以我们的应用在每个 Node 上运行的其实是一个 Pod。Pod 也只能运行在 Node 上。如下图:

  

技术图片

 

  那么什么是 Pod 呢?Pod 是一组容器(当然也可以只有一个)。容器本身就是一个小盒子了,Pod 相当于在容器上又包了一层小盒子。这个盒子里面的容器有什么特点呢?

  可以直接通过 volume 共享存储。

  有相同的网络空间,通俗点说就是有一样的ip地址,有一样的网卡和网络设置。

  多个容器之间可以“了解”对方,比如知道其他人的镜像,知道别人定义的端口等。

  至于这样设计的好处呢,还是要大家深入学习后慢慢体会啦~

  

技术图片

 

  Service - 服务发现 - 找到每个Pod

  上面的 Deployment 创建了,Pod 也运行起来了。如何才能访问到我们的应用呢?

  最直接想到的方法就是直接通过 Pod-ip+port 去访问,但如果实例数很多呢?好,拿到所有的 Pod-ip 列表,配置到负载均衡器中,轮询访问。但上面我们说过,Pod 可能会死掉,甚至 Pod 所在的 Node 也可能宕机,Kubernetes 会自动帮我们重新创建新的Pod。再者每次更新服务的时候也会重建 Pod。而每个 Pod 都有自己的 ip。所以 Pod 的ip 是不稳定的,会经常变化的。

  面对这种变化我们就要借助另一个概念:Service。它就是来专门解决这个问题的。不管Deployment的Pod有多少个,不管它是更新、销毁还是重建,Service总是能发现并维护好它的ip列表。Service对外也提供了多种入口:

  ClusterIP:Service 在集群内的唯一 ip 地址,我们可以通过这个 ip,均衡的访问到后端的 Pod,而无须关心具体的 Pod。

  NodePort:Service 会在集群的每个 Node 上都启动一个端口,我们可以通过任意Node 的这个端口来访问到 Pod。

  LoadBalancer:在 NodePort 的基础上,借助公有云环境创建一个外部的负载均衡器,并将请求转发到 NodeIP:NodePort。

  ExternalName:将服务通过 DNS CNAME 记录方式转发到指定的域名(通过 spec.externlName 设定)。

  

技术图片

 

  好,看似服务访问的问题解决了。但大家有没有想过,Service是如何知道它负责哪些 Pod 呢?是如何跟踪这些 Pod 变化的?

  最容易想到的方法是使用 Deployment 的名字。一个 Service 对应一个 Deployment 。当然这样确实可以实现。但k ubernetes 使用了一个更加灵活、通用的设计 - Label 标签,通过给 Pod 打标签,Service 可以只负责一个 Deployment 的 Pod 也可以负责多个 Deployment 的 Pod 了。Deployment 和 Service 就可以通过 Label 解耦了。

  

技术图片

 

  RollingUpdate - 滚动升级

  滚动升级是Kubernetes中最典型的服务升级方案,主要思路是一边增加新版本应用的实例数,一边减少旧版本应用的实例数,直到新版本的实例数达到预期,旧版本的实例数减少为0,滚动升级结束。在整个升级过程中,服务一直处于可用状态。并且可以在任意时刻回滚到旧版本。

  

技术图片

 

  Kubernetes - 入门实践

  Deployment 实践

  首先配置好 Deployment 的配置文件(这里用的是 tomcat 镜像)

  [ app.yaml ]

技术图片

通过 kubectl 命令创建服务

技术图片

Service 实践

通过上面创建的 Deployment 我们还没法合理的访问到应用,下面我们就创建一个 service 作为我们访问应用的入口。

首先创建service配置

[ service.yaml ]

 

技术图片

创建服务

技术图片

访问服务

接下来就可以在任意节点通过ClusterIP负载均衡的访问后端应用了

 

技术图片

?

 

零基础学kubernetes(k8s)必看教程,带你10分钟快速实战入门k8s

...自动化运维开发经验的老鸟,我来说说我当初刚接触Kubernetes时的一些感受以及学习技巧。刚开始学习k8s时,我觉得挺难的,一头雾水,买了一本《Kubernetes权威指南》,真的很厚。我觉得作为应用开发人员的学... 查看详情

java零基础小白必看的学习路线图,快速入门!

Javaweb是用Java技术来解决相关web互联网领域的技术总和。说的简单的就是写网站的一种语言。一般分为前端和后端两种方向,前端所做的东西就像幕前表演的演员,所做的就是让网页看起来顺眼,用起来顺心,而后端则属于处理... 查看详情

html5从入门到精通,零基础学员必看

 学习html5从入门到精通,零基础新手也能看懂,无论你是唱歌,画画的艺术生,还是学习机械专业的工科生,或者大学读的文学学科。先了解HTML5可以实现的功能有哪儿些?1.HTML5可以同时在多种设备上运行,这一点是其他方... 查看详情

html5从入门到精通,零基础学员必看

 学习html5从入门到精通,零基础新手也能看懂,无论你是唱歌,画画的艺术生,还是学习机械专业的工科生,或者大学读的文学学科。先了解HTML5可以实现的功能有哪儿些?1.HTML5可以同时在多种设备上运行,这一点是其他方... 查看详情

好用的python入门书籍

...书里每一章知识讲完后,都会配有相应的练习小题,帮助初学者在学中练,练中学,进一步巩固相关知识点。总之,这本书以习题的方式引导学习者一步一步学习编程,从简单的打印一直讲授到完整项目的实现,让初学者从基础... 查看详情

kubernetes入门:简介与基础操作命令(代码片段)

本专栏均为楼主个人理解,适合于初学者。能够很快帮助0基础的同学快速入门与落地一套k8s环境。1.为什么使用k8s在阅读本文章之前,建议了解docker。在当前软件环境下,即使是很小的公司会使用很多中间件,同... 查看详情

kubernetes入门:简介与基础操作命令(代码片段)

本专栏均为楼主个人理解,适合于初学者。能够很快帮助0基础的同学快速入门与落地一套k8s环境。1.为什么使用k8s在阅读本文章之前,建议了解docker。在当前软件环境下,即使是很小的公司会使用很多中间件,同... 查看详情

有零基础开始自学python的小伙伴吗?怎么样可以快速入门?

...hon难度高,其实这种情况是根据学习能力来决定的。对于初学者和完成普通任务,Python语言是非常简单易用的。当然了Python具有丰富库的,想要更高深的学习Python,同样是一件比较困难的事情。我们先来简单了解一下pythonPython编... 查看详情

零基础python入门书籍推荐读哪些书?

零基础python入门书籍推荐读哪些书?很多Python初学者都希望有经验的资深人士能推荐一些入门书籍,于是你就会搜到有网友推荐的超长的入门书单,然而这简直跟没推荐一样。这些书籍并不适合初学者,对于零基... 查看详情

零基础python入门书籍推荐读哪些书?

零基础python入门书籍推荐读哪些书?很多Python初学者都希望有经验的资深人士能推荐一些入门书籍,于是你就会搜到有网友推荐的超长的入门书单,然而这简直跟没推荐一样。这些书籍并不适合初学者,对于零基... 查看详情

k8s教程----零基础快速入门(代码片段)

k8s详解教程----零基础快速入门前言:Kubernetes(k8s)作为云原生的核心平台,吸引了越来越多的运维、开发、测试以及其他技术员去了解学习。随着行业越来越内卷,k8s已经被广泛使用,作为一名运维人员&... 查看详情

linux零基础快速入门到精通导学

Linux零基础快速入门到精通【黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等】文章目录Linux零基础快速入门到精通导学whyLinux课程设计如... 查看详情

python的推荐书籍都有哪些

...书里每一章知识讲完后,都会配有相应的练习小题,帮助初学者在学中练,练中学,进一步巩固相关知识点。总之,这本书以习题的方式引导学习者一步一步学习编程,从简单的打印一直讲授到完整项目的实现,让初学者从基础... 查看详情

初学者入门知识图谱必看的能力:推理

摘要:本文从知识推理的基本概念出发,通俗易懂得介绍了知识图谱知识推理的应用和方法。本文分享自华为云社区《0基础入门知识图谱的超能力——知识推理》,作者:CheriChen。一、知识推理的概念推理是运用... 查看详情

零基础快速入门springboot2.0

零基础快速入门SpringBoot2.0(一) 一、SpringBoot2.x依赖环境和版本新特性说明简介:讲解新版本依赖环境和springboot2新特性概述              1、依赖版本jdk8以上,Springboot2.x用JDK8 查看详情

零基础入门必看,python与python解释器详解

系列文章目录🍑Python语言基础—注释的作用及分类🍑Python语言基础—常用运算符总结🍑Python语言基础—定义变量与数据类型🍑Python语言基础—if判断和循环总结🍑Python语言基础—理解面向对象🍑Python语... 查看详情

黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程(代码片段)

一、基础班学习路线三、CSS3基础1.Emmet语法emmet语法生成html标签<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content 查看详情

llvm之后端篇:零基础快速入门tablegen

本文基于release/12.x版本的LLVM源码,介绍了TableGen的基本概念、操纵命令以及一些常见的词法和语法。从而,初步了解TableGen以便进一步研究LLVM后端。阅读完整内容见微信公众号同名文章(技术专栏->LLVM编译器) 查看详情