首页 > 其他分享 >k8s详细教程零基础

k8s详细教程零基础

时间:2023-04-12 23:01:16浏览次数:43  
标签:kubectl 教程 节点 详细 Pod k8s pod 资源

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

一、什么是k8s

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

K8s是一个可移植的、用于自动化部署、扩展和管理容器化应用的开源容器编排技术。

使部署和管理微服务架构应用程序变得很简单。它通过在集群之上形成一个抽象层来实现这一点,允许开发团队平滑地部署应用程序,而 K8s主要处理以下任务:

     1、控制和管理应用程序对资源的使用

     2、自动负载均衡应用程序的多个实例之间请求

     3、监控资源使用和资源限制,为了可以自动阻止应用消耗过多的资源并              且可以再次恢复它们

    4、如果主机资源耗尽或主机死机,将应用程序实例从一台主机迁移到另              一台主机是一个可行的选项\n当有新的主机加入集群时,新增加的额              外资源可以被自动使用

二、k8s为何被广泛应用

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

           可移植性和灵活性: K8s有很强的兼容性,因为它可以在各种基础设               施和环境设置下运行。大多数其他编排器没有这种灵活性。

           开源: CNCF负责管理K8s,这是一个完全开源、由社区驱动的项目。             它有许多重要的企业赞助商,但没有一家公司能“控制”这个平台或者               控制它的发展方向。

           多云兼容性: K8s不但可以将工作负载托管在单个云上,而且可以将               工作负载分布在多个云上。 K8s也能轻松地将其环境从一个云扩展到               另一个云。虽然其它编排器也能支持多云架构,但K8s在多云兼容性               性方面可以完全超越它们。

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


三、K8s架构

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

k8s详细教程零基础_Server

3.1、控制节点Master

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

   1、ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授          权、API注册和发现等机制,其他模块通过API Server查询或修改数据只          有API Server才直接和etcd进行交互;

   2、Scheduler : 负责集群资源调度,通过API Server的Watch接口监听新建          Pod副本信息,按照预定的调度策略将Pod调度到相应的node节点上;

   3、ControllerManager : K8S里所有资源对象的自动化控制中心,通过 api-       server 提供的 restful 接口实时监控集群内每个资源对象的状态,发生            故障时,导致资源对象的工作状态发生变化,就进行干预,尝试将资源          对象从当前状态恢复为预期的工作状态,常见的 controller 有 Namesp          aceController、Node Controller、Service Controller、ServiceAccou          nt Controller、Token Controller、ResourceQuote Controller、Replic          ation Controller等;

   4、Etcd : 是Kubernetes的存储状态的数据库(所有master的持续状态都          存在etcd的一个实例中)

3.2、工作节点Node

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

    1、Kubelet : 负责维护容器的生命周期,即通过控制docker,控制Pod 的           创建、启动、监控、重启、销毁等工作,处理Master节点下发到本节点           的任务;

    2、 KubeProxy : 负责制定数据包的转发策略,并以守护进程的模式对各个              节点的pod信息实时监控并更新转发规则,service收到请求后会根                 据 kube-proxy制定好的策略来进行请求的转发,从而实现负载均                  衡,总的来说,负责为Service提供cluster内部的服务发现和负载衡;

   3、Docker : 负责节点上容器的各种操作;

3.3、其他组件

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

      1、Pod: kubernetes的最小控制单元,容器都是运行在pod中的,一个             pod中可以有1个或者多个容器

     2、Controller: 控制器,通过它来实现对pod的管理,比如启动pod、停            止pod、伸缩pod的数量等等

   3、Service: pod对外服务的统一入口,下面可以维护者同一类的多个pod

   4、Label: 标签,用于对pod进行分类,同一类pod会拥有相同的标签

    5、NameSpace: 命名空间,用来隔离pod的运行环境

k8s详细教程零基础_Pod_02

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内的容器。

k8s详细教程零基础_Server_03

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

挂起(Pending): apiserver已经创建了pod资源对象,但它尚未被调度完成或者仍处于下载镜像的过程中

运行中(Running): pod已经被调度至某节点,并且所有容器都已经被kubelet创建完成

成功(Succeeded): pod中的所有容器都已经成功终止并且不会被重启\n失败(Failed): 所有容器都已经终止,但至少有一个容器终止失败,即容器返回了非0值的退出状态

未知(Unknown): apiserver无法正常获取到pod对象的状态信息,通常由网络通信失败所导致

五、k8s常用命令

Kubectl命令的语法如下:

kubectl [command] [TYPE] [NAME] [flags]

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

查看Pod、nodee、service、endpoints、secret、等消息

kubectl get 组名             #列入kubectl get pod

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

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

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

kubectl top 组名            #列入kubectl top node kubectl top pod

进入pod内部

kubectl exec -ti pod名 /bin/bas

删除pod

kubectl delete pod -n

查看集群健康状态

kubectl get cs

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

kubectl delete -f pod.yaml

查看容器的日志

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

创建资源

kubectl apply -f ./my-manifest

六、总结

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

标签:kubectl,教程,节点,详细,Pod,k8s,pod,资源
From: https://blog.51cto.com/u_15947637/6186350

相关文章

  • 63、K8S-使用K8S部署Prometheus、grafana
    Kubernetes学习目录1、准备工作1.1、教程Github地址https://github.com/prometheus-operator/kube-prometheus.git1.2、下载编写好的yamlwgethttps://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.12.0.tar.gz1.3、解压项目代码tarxvfkub......
  • JDBC详解(韩顺平教程)
    JDBC一、原理示意图二、前提步骤IDEA导入MySQL的jdbc驱动,并操作数据库-打点-博客园(cnblogs.com)三、JDBC编写步骤:用法1:packageHsp.JDBC;​importcom.mysql.jdbc.Driver;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.Statement;......
  • Qt——.pro文件及详细说明
    使用过QT框架进行项目开发的小伙伴,也许都知道.pro文件,但文件里面的具体配置方式可能比较模糊。本文将详细说明文件里各配置项的含义,并对其编写方法进行归纳总结,以便各位读者可以在未来的项目开发中快速而准确地编写.pro文件。1.配置项详细说明注释:注释是从一行的#开始,到这......
  • 通过代理使用人工智能服务保姆级教程
    今年,以OpenAI(ChatGPT)、微软Microsoft(NewBing),谷歌Google(Bard)为代表的通用人工智能横空出世。其表现出的智能水平和无所不知的能力令人叹为观止,能够高分通过各类高考和专业考试,能够大大提升文字工作者和程序员的生产力。将会对教育、咨询、中介、IT、软件、设计、制造等行业产生......
  • 【附教程】亲身体验AI绘画的艺术之旅——EP0
    体验在线AI画图服务MidjourneyMidjourney是一个由同名研究实验室开发的人工智能程序,可根据文本生成图像,于2022年7月12日进入公开测试阶段,用户可透过Discord的机器人指令进行操作。该研究实验室由LeapMotion的创办人大卫·霍尔兹负责领导。——Wikipedia 可......
  • k8s---Calico网络
    什么是calico?Calico是一种开源网络和网络安全解决方案,适用于容器、虚拟机和基于主机的本机工作负载。Calico支持广泛的平台,包括Kubernetes,OpenShift,MirantisKubernetesEngine(MKE),OpenStack和裸机服务。无论您选择使用Calico的eBPF数据平面还是Linux的标准网络管道,Calico......
  • 【manim动画教程】--常用动画效果
    manim的主要功能就是制作动画,因此它提供了各类丰富的动画效果,本篇主要介绍其中最常用的几种动画效果。至于特殊的动画效果,以及自定义动画效果的方法以后再另外介绍。1.创建效果展示某个元素或者文字时,一下子就全显示出来会显得比较突兀,通过创建效果的动画,让各个元素的出现更......
  • mac-m1安装jmeter详细步骤
    mac-m1安装jmeter详细步骤查看jdk安装路径:/usr/libexec/java_home-V修改jmeter的java路径vim/opt/homebrew/Cellar/jmeter/5.4.1/bin/jmeter修改java环境变量,jmeter需要给赋值写的权限,chmod+wjmeter修改成当前java的执行路径安装后的路径是:/opt/homebrew/Cellar/jmeter......
  • Spring中Bean的实例化详细流程
    还是举个例子,我有一个朋友小汪他远赴南方某城市打工。然后安定下来后他的朋友很想来家里玩,但是呢我这个朋友家里搞的很乱,所以他不好意思请朋友来家里玩。这时我的另一个朋友说那请一个保姆把家里好好整理一下就可以了,然后给他介绍了一个保姆大S(PS:本文无意指向任何人,因为Spring的......
  • k8s-StatefulSet
    1、StatefulSet介绍RC、Deployment、DaemonSet都是面向无状态的服务,它们所管理的Pod的IP、名字,启停顺序等都是随机的,而StatefulSet是什么?顾名思义,有状态的集合,管理所有有状态的服务,比如MySQL、Bmongo复制集,rediscluster,rabbitmqcluster集群等。StatefulSet本质上是Deploym......