k8s教程----零基础快速入门
Posted 江湖人称小青年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s教程----零基础快速入门相关的知识,希望对你有一定的参考价值。
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]
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/bash #先用kubectl get pod查看
删除pod
kubectl delete pod -n
查看集群健康状态
kubectl get cs
基于 pod.yaml 定义的名称删除指定资源
kubectl delete -f pod.yaml
查看容器的日志
kubectl logs -f <pod-name> # 实时查看日志
创建资源
kubectl apply -f ./my-manifest.yaml
六、总结
K8S概念很是复杂,这里先简单的介绍下k8s基础概念,后续接着更新k8s部署,已及更深层次的介绍k8s。以上涉及的概念以及知识点搞清楚后,如果在面试中被问到,相信也可以帮到大家。
零基础快速入门web学习路线(含视频教程)
下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总!
在当下来说web前端开发工程师可谓是高福利、高薪水的职业了。所以现在学习web前端开发的技术人员也是日益增多了,但是在学习web前端开发中盲目的去学习而没有一个完整的思路和学习路线也是不行的。
成为一个合格的web前端开发工程师的具备什么条件?
熟练的掌握HTML、CSS、JS、JQ等最基本的技术。
现在,只掌握这些已经远远不够了。无论是开发难度上,还是开发方式上,web前端开发不比从前,现在的功能非常强大。而前端开发为什么现在这么火,在于互联网高速发展,和HTML5技术的不断成熟,各大浏览器的不断兼容,让web前端开发成为最热的职业。
WEB前端初级开发工程师需要掌握的具体知识点包含:
HTML5基础、CSS基础、jquery框架、PHP基础
此阶段可达成学习效果:
可胜任Web前端开发工程师前端页面布局与重构工程师 。
薪资可以达到:4K-6K。
学习本阶段可以参考如下视频教程:
HTML5基础教程(持续更新)
https://pan.baidu.com/s/1IiL0feDPp_4bsUZr0foKjg
HTML5基础教程-PC及移动端页面布局
https://pan.baidu.com/s/1ZD7WYX_xmQJL-fzIGG9ExA
详细内容如下:
WEB前端中高级开发工程师所需要掌握的知识点包含:
面向对象、javascript、Nodejs、微信端开发
此阶段可达成效果:
可胜任Web前端工程师、高级Web前端工程师、网站开发工程师、移动前端开发工程师 等职位。
薪资可达到:6K-10K。
学习本阶段可以参考如下视频教程:
HTML5中级教程-Javascript程序设计及PC全栈项目开发 :
https://pan.baidu.com/s/1bKS5X67WJm6qnxO3BJVNMw
详细内容如下:
WEB前端大神级开发工程师需要掌握的知识点包含:
VueJS框架、ReactJS框架、AngularJS框架、Hybrid App开发、前端架构
此阶段可达成效果:
可胜任高级Web前端工程师、全栈工程师、移动前端App开发工程师、微信开发工程师、小程序开发工程师、数据可视化开发工程师等职位。
薪资可达到:10K-15K+。
学习本阶段可以参考如下视频教程:
HTML5高级教程-移动端WebApp及混合APP开发
https://pan.baidu.com/s/1ltJLMLHEOIlOg1UIGeLj0w
详细知识点如下:
以上是关于k8s教程----零基础快速入门的主要内容,如果未能解决你的问题,请参考以下文章