kubernetes学习文档

本文详述了Kubernetes的背景、原理和实践。Kubernetes(K8s)是应对多容器管理和编排需求的解决方案,具备自动化管理、跨主机编排、自我修复等优势。文中介绍了K8s的架构,包括Master节点和Node节点,以及关键组件如scheduler、replication controller、api server等。还探讨了Pod、Service、Label等核心概念。在实践部分,详细讲解了如何在本地和阿里云上搭建k8s集群,部署和管理应用,以及解决常见问题。通过实例展示了K8s的部署、扩展和自我修复能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kubernetes

一、背景

Docker足以管理单个容器,但现实生产环境中存在以下要求:
1、对于大量容器和容器化应用的需求
2、多个容器需要跨多个服务器主机部署
3、容器安全性需要多层部署
导致了仅利用Docker来进行管理编排的困难性,因此我们需要一个“管家”来处理这方面的需求。K8s因此产生。

定义:用于管理云平台中多个主机上的容器化的应用,提供了应用部署,规划,更新,维护的一种机制。

通过总结出的核心特质可以更清晰地理解:
k8s本质上期望实现对容器执行操作地自动化管理

部分优势:
1、跨主机容器编排
2、自动化操作、管控容器应用部署、运作、更新
3、对应用进行自我修复和运行状况记录、检查
4、更充分地利用硬件
5、快速扩展容器化应用和资源等

二、原理

首先我将Kubernetes集群笼统地分为两个部分:

1、Master
管理节点,提供访问、控制入口
2、Node
运行Pod的服务节点,即具体的操作、运行单元

从集群到Master节点的所有通信路径都在apiserver中终止
apiserver - kubelet:
从apiserver到kubelet的连接用于获取pod的日志,通过kubectl来运行pod,使用kubelet的端口转发功能
apiserver -> nodes、pods、services:
从apiserver到Node、Pod或Service的连接默认为HTTP连接

*Pod
一个或若干个容器的组合,不同容器使用相同的网络命名空间和IP地址,使用不同的端口。
共享资源包括:
1)存储
2)网络,唯一地集群ip地址
3)运行信息

在节点出现故障的情况下,群集中的其他可用节点上将会调度之前相同的Pod

Kubernetes架构:
在这里插入图片描述
相比于Docker,k8s非常复杂,我们来详细说明每个组件的功能

Master中:
1、scheduler
资源调度:实现分配机器的功能,即为建立的Pod进行node选择

2、replication controller
维护集群的状态:创建和复制Pod,进行检测、更新等

3、api server
整个系统的入口:提供用来和集群交互的REST端点

Node:
1、Docker
容器服务

2、Kube proxy
创建代理服务:实现层级内部,Service到Pod的请求路由(网络代理)和转发(负载均衡)

3、Kubelet
维护容器生命周期:即接受来自API Server的请求,启动、停止、监控、汇报容器

其他:
1、kubectl
即用户命令

2、etcd
存储功能:保存整个集群的状态

总结:
结合架构与功能描述,因此我们可以整理得到一个完整的运行流程
1)用户通过Kubectl提交所希望运行的pod(即容器)
进入Master节点:
2)api server接受,并把请求存储与etcd
3)利用scheduler分配机器
进入Node节点
4)kubelet启动、运行相应的Pod

此外,
在Master中,replication controller维护集群的状态,保持容器数量
在Noder中,Kube proxy根据service,实现网络代理和负载均衡

至此,我们对学习的知识做了一个完整的串联

在学习过程中对于Kube proxy有一些疑惑,需要补充一些知识才更加清晰
*Service
定义Pod以及访问Pod的策略的抽象
*Label
标识、标签,实质是Key/Value键值对
就像真实的标签,通过它实现查询和筛选

串联二者,Service也正是通过Label才能找到Pod组,而之前疑惑的kube-proxy正是通过这二者的配合,来建立转发,实现所谓的负载均衡。
同样的Controller也正是通过Label来进行筛选Pod副本数量,最终实现自动控制。

补充说明,核心技术理念:
这一部分的总结,有利于本人加深了对上述部分的理解

1、API
声明而非命令:保证了稳定性
每个API对象都有3大类属性:元数据metadata、规范spec和状态status。
元数据是用来标识API对象的,每个对象都至少有3个元数据:namespace,name和uid;除此以外还有各种各样的标签labels用来标识和匹配不同的对象

2、Service
每个service 对应 集群内部虚拟IP
通过虚拟IP访问而不是简单的固定IP和端口号

四种type
1)ClusterIP:在集群中内部IP上暴露服务,service只能从集群内部访问
2)NodePort:通过每个Node地ip和静态端口暴露服务,会路由到上述地clusterIP,可以从外部访问
3)LoadBalancer:负载均衡(云提供商),向外暴露,可以路由到上述二者
4)ExternalName :通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段的内容

3、Namespace
类似的虚拟隔离作用

4、job
Job是K8s用来控制批处理型任务的API对象,Job管理的Pod根据用户的设置把任务成功完成就自动退出

5、DaemonSet
关注在K8s集群中的节点,保证每个节点上都有一个此类Pod运行。
典型的后台支撑型服务包括,存储,日志和监控等在每个节点上支持K8s集群运行的服务

6、PetSet
在前面概念中所提及的RC下的pod是典型的无状态pod,但在k8s的新版本中出现了有状态的设置,即Petset
每个Pod独立存储,pod出现故障在其他节点“自愈”时,挂载上原来的存储,即保持了原有的状态

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值