首页 > 其他分享 >k8s教程----零基础快速入门

k8s教程----零基础快速入门

时间:2024-01-14 15:34:54浏览次数:30  
标签:kubectl 教程 K8s 节点 ---- pod k8s Pod 资源

k8s详解教程----零基础快速入门


前言:

Kubernetes(k8s)作为云原生的核心平台,吸引了越来越多的运维、开发、测试以及其他技术员去了解学习。随着行业越来越内卷,k8s已经被广泛使用,作为一名运维人员,k8s将成为一个必须掌握的技术点,同时,我们也可以依靠它跳槽涨薪。

一、什么是K8s

它前生是谷歌的Borg系统,后经过Go语言重写,在2014 年开源了 Kubernetes 项目,并捐献给CNCF 基金会开源,即Kubernetes,之所以简称k8s,因为 Kubernetes 中间有 8个字母。

K8s是一个可移植的、用于自动化部署、扩展和管理容器化应用的开源容器编排技术。
K8s使部署和管理微服务架构应用程序变得很简单。它通过在集群之上形成一个抽象层来实现这一点,允许开发团队平滑地部署应用程序,而 K8s主要处理以下任务:

  • 控制和管理应用程序对资源的使用
  • 自动负载均衡应用程序的多个实例之间请求
  • 监控资源使用和资源限制,为了可以自动阻止应用消耗过多的资源并且可以再次恢复它们
  • 如果主机资源耗尽或主机死机,将应用程序实例从一台主机迁移到另一台主机是一个可行的选项
  • 当有新的主机加入集群时,新增加的额外资源可以被自动使用

二、K8s为何被广泛应用

为什么现在有很多企业依赖K8s来满足他们的容器编排需求? 因为k8s在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。同时Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。概括为:

  • 可移植性和灵活性: K8s有很强的兼容性,因为它可以在各种基础设施和环境设置下运行。大多数其他编排器没有这种灵活性。
  • 开源: CNCF负责管理K8s,这是一个完全开源、由社区驱动的项目。它有许多重要的企业赞助商,但没有一家公司能“控制”这个平台或者控制它的发展方向。
  • 多云兼容性: K8s不但可以将工作负载托管在单个云上,而且可以将工作负载分布在多个云上。 K8s也能轻松地将其环境从一个云扩展到另一个云。虽然其它编排器也能支持多云架构,但K8s在多云兼容性性方面可以完全超越它们。
  • 市场领导者: 大部分公司都在使用K8s,根据红帽公司的一项调查,K8s被客户广泛使用 (88%),尤其在生产环境中(74%)。

三、K8s架构

K8s是一个架构良好的分布式系统的例子,它将集群中的所有机器都视为单个资源池的一部分。K8s与其他成熟的分布式系统一样,主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件。
在这里插入图片描述

3.1、控制节点Master

K8S中的Master是集群控制节点,负责整个集群的管理和控制

  • ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制,其他模块通过API Server查询或修改数据,只有API Server才直接和etcd进行交互;
  • Scheduler : 负责集群资源调度,通过API Server的Watch接口监听新建Pod副本信息,按照预定的调度策略将Pod调度到相应的node节点上;
  • ControllerManager : K8S里所有资源对象的自动化控制中心,通过 api-server 提供的 restful 接口实时监控集群内每个资源对象的状态,发生故障时,导致资源对象的工作状态发生变化,就进行干预,尝试将资源对象从当前状态恢复为预期的工作状态,常见的 controller 有 Namespace Controller、Node Controller、Service Controller、ServiceAccount Controller、Token Controller、ResourceQuote Controller、Replication Controller等;
  • Etcd : 是Kubernetes的存储状态的数据库(所有master的持续状态都存在etcd的一个实例中)
3.2、工作节点Node

Node是K8S集群中的工作负载节点,每个Node都会被Master分配一些工作负载,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上

  • Kubelet : 负责维护容器的生命周期,即通过控制docker,控制Pod 的创建、启动、监控、重启、销毁等工作,处理Master节点下发到本节点的任务;
  • KubeProxy : 负责制定数据包的转发策略,并以守护进程的模式对各个节点的pod信息实时监控并更新转发规则,service收到请求后会根据kube-proxy制定好的策略来进行请求的转发,从而实现负载均衡,总的来说,负责为Service提供cluster内部的服务发现和负载均衡;
  • Docker : 负责节点上容器的各种操作;
3.3、其他组件

学习kubernetes的核心,就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作

  • Pod: kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
  • Controller: 控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
  • Service: pod对外服务的统一入口,下面可以维护者同一类的多个pod
  • Label: 标签,用于对pod进行分类,同一类pod会拥有相同的标签
  • NameSpace: 命名空间,用来隔离pod的运行环境

在这里插入图片描述

kubernetes在集群启动之后,会默认创建几个namespace:default、kube-node-lease、kube-public、kube-system。默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的,但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。

四、部署实例

4.1、nginx服务部署

为了方便理解,我们部署一个nginx服务来说明kubernetes系统各个组件调用关系:

首先要了解,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中。

一个nginx服务的安装请求会首先被发送到master节点的apiServer组件,apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上。在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer,apiServer调用controller-manager去调度Node节点安装nginx服务,kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod。pod是kubernetes的最小操作单元,容器必须跑在pod中。至此,一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理,这样,外界用户就可以访问集群中的nginx服务了。

4.2、Pod创建流程

1、客户端提交创建请求,可以通过API Server的Restful API,也可以使用kubectl命令行工具。支持的数据类型包括JSON和YAML。

2、API Server处理用户请求,存储Pod数据到etcd。

3、调度器通过API Server查看未绑定的Pod。尝试为Pod分配主机。

4、过滤主机 (调度预选):调度器用一组规则过滤掉不符合要求的主机。比如Pod指定了所需要的资源量,那么可用资源比Pod需要的资源量少的主机会被过滤掉。

5、主机打分(调度优选):对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把容一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等。

6、选择主机:选择打分最高的主机,进行binding操作,结果存储到etcd中。

7、kubelet根据调度结果执行Pod创建操作: 绑定成功后,scheduler会调用APIServer的API在etcd中创建一个boundpod对象,描述在一个工作节点上绑定运行的所有pod信息。运行在每个工作节点上的kubelet也会定期与etcd同步boundpod信息,一旦发现应该在该工作节点上运行的boundpod对象没有更新,则调用Docker API创建并启动pod内的容器。

在这里插入图片描述

在整个生命周期中,Pod会出现5种状态(相位),分别如下:

  • 挂起(Pending): apiserver已经创建了pod资源对象,但它尚未被调度完成或者仍处于下载镜像的过程中
  • 运行中(Running): pod已经被调度至某节点,并且所有容器都已经被kubelet创建完成
  • 成功(Succeeded): pod中的所有容器都已经成功终止并且不会被重启
  • 失败(Failed): 所有容器都已经终止,但至少有一个容器终止失败,即容器返回了非0值的退出状态
  • 未知(Unknown): apiserver无法正常获取到pod对象的状态信息,通常由网络通信失败所导致

五、K8s常用命令

kubectl 命令的语法如下:

kubectl [command] [TYPE] [NAME] [flags]
 
  • 1

kubectl命令中,指定执行什么操作(command,如create,delete,describe ,get ,apply 等)指定什么类型资源对象(type)指定此类型的资源对象名称(name)指定可选参数(flags)

查看pod,nodee,service,endpoints,secret等信息

kubectl get 组件名      #例如kubectl get pod
 
  • 1

查看资源状态,比如有一组deployment内的pod没起来,一般用于pod调度过程出现的问题排查

kubectl describe pod pod名    #先用kubectl get pod查看
 
  • 1

查看node节点或者是pod资源(cpu,内存资源)使用情况

kubectl top 组件名     #例如kubectl top node  kubectl top pod
 
  • 1

进入pod内部

kubectl exec -ti pod名 /bin/bash   #先用kubectl get pod查看
 
  • 1

删除pod

kubectl delete pod -n
 
  • 1

查看集群健康状态

kubectl get cs
 
  • 1

基于 pod.yaml 定义的名称删除指定资源

kubectl delete -f pod.yaml
 
  • 1

查看容器的日志

kubectl logs -f <pod-name> # 实时查看日志
 
  • 1

创建资源

kubectl apply -f ./my-manifest.yaml
 
  • 1

六、总结

K8S概念很是复杂,这里先简单的介绍下k8s基础概念,后续接着更新k8s部署,已及更深层次的介绍k8s。以上涉及的概念以及知识点搞清楚后,如果在面试中被问到,相信也可以帮到大家。

   

标签:kubectl,教程,K8s,节点,----,pod,k8s,Pod,资源
From: https://www.cnblogs.com/py169/p/17963758

相关文章

  • 网络爬虫-处理cookie登录的问题,seesion的用法
    一、以17k的小说网的登录为例,网址小说_17K小说网|最新小说下载-一起免费看小说当想要在小说网中看一下书架上的书都有哪些,必须得先登录一个账户才能看到,不同的用户登录看到内容也是不一样的,服务器是如何区分的呢?这里要引入cookie,不同的用户访问到服务器的时候,除了访问地......
  • Spring代理
    Spring代理概述在生活中,常见到的房产中介,会负责代理业务的房产进行售卖、招租,撮合买卖双方达成交易,减少买家和卖家的时间成本和交易成本,俗称代理模式(图)在软件开发中,也存在这样的机制,就是常说的设计模式中的代理模式Spring及相关的框架也广泛应用了代理技术Spring代理......
  • Wireshark与恶意流量
    sqlmap流量特征1、过滤http后发现有大量类似的sql注入语句,并且时间接近2、http协议的user-agent字段中会出现sqlmap的网址 3、使用过滤语句http.user_agentcontainssqlmap可以过滤出所有的sqlmap语句4、GET请求中的url字段会出现select、information_schema、table、fr......
  • 折腾物料代码
    问题:物料代码最后点后是三位数保留原状,最后点后是有效四位数保留原状,后四位不满千的保留三位。函数公式解决:=TEXTBEFORE(C2,".",-1)&"."&TEXT(TEXTAFTER(C2,".",-1),"000")TextBefore():提取从右往左数第一个点之前的内容&"."&:与点连接,再连接后面的内容Text():将数字格式......
  • 解决nginx http 429
    当Nginx作为反向代理服务器收到HTTP429TooManyRequests响应时,这通常意味着后端服务由于请求速率过高而拒绝了更多的请求。要解决这个问题,可以从以下几个方面入手:调整客户端请求频率:如果你是客户端应用的开发者,可以通过限制应用程序发出请求的速度来避免触发后端服务的限流策略......
  • js 合并、复制和修改定型数组
    定型数组同样使用数组缓冲来存储数据,而数组缓冲无法调整大小。因此,下列方法不适用于定型数组:concat()pop()push()shift()splice()unshift()不过,定型数组也提供了两个新方法,可以快速向外或向内复制数据:set()和subarray()。set()从提供的数组或定型数组中把值复制到当前定型数组......
  • js 定型数组行为
    //创建一个长度为6的Int32Arrayconstints2=newInt32Array(6);//每个数值使用4字节,因此ArrayBuffer是24字节alert(ints2.length);//6//类似DataView,定型数组也有一个指向关联缓冲的引用alert(ints2.buffer.byteLength);//24//创建一个包含[2,4,6,8]的Int......
  • js边界情形
    //在内存中分配两个字节并声明一个DataViewconstbuf=newArrayBuffer(2);constview=newDataView(buf);//填充缓冲,让第一位和最后一位都是1view.setUint8(0,0x80);//设置最左边的位等于1view.setUint8(1,0x01);//设置最右边的位等于1//缓冲内容(为方便阅读,人......
  • css滑动门效果,文字两侧背景花纹自适应
    css滑动门效果:不同长度的文字,两侧的背景图案一致,如下图所示。效果预览:素材图片:t2.jpg源代码如下:<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • 无涯教程-LISP - 类(defclass)
    常见的LISP早于几十年的面向对象编程的发展,但是,它在稍后的阶段将面向对象并入其中。定义类defclass宏允许创建用户定义的类。它创建一个类作为数据类型。它具有以下语法-(defclassclass-name(superclass-name*)(slot-description*)class-option*))slot是存储数据......