容器编排工具-Kubernetes

一、什么是容器编排

容器编排与容器的生命周期管理相关,特别是在大型动态环境中。软件团队用容器编排器来控制和自动化容器管理的各种任务。

容器编排器可以工作在使用容器的任何环境。它可以帮助你在多个环境中部署相同的程序,而不需要重新编写它。

二、常见的编排工具

1、Kubernetes

2、Docker Swarm

3、Apache Mesos

三、K8s简介

1、K8s基本功能

K8s是一个最初由Google开发的,用于自动化部署、扩展和管理容器化应用的开源容器编排器技术。

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

K8s主要处理以下任务:

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

2、K8s架构

3、K8s组件

1、控制平面

控制平面是管理员和用户管理不同节点的地方。它通过HTTP调用接收命令或者连接到系统并且运行命令行脚本。顾名思义,它控制了K8s与应用程序的交互方式。

2、API服务器

API 服务器为K8s集群提供了一个REST接口。 所有在pod上激活的服务和别的对象都是可以用可编程的方式与与终端进行交互。

3、调度器

调度器负责将任务分配给各个节点。它监控资源容量并保证工作节点的性能保持在可接受的范围内。

4、控制器管理器

K8s控制器管理器是管理K8s核心控制循环的服务。它负责确保集群的共享状态正常运行。

5、Etcd

K8s使用了Etcd,一个提供分布式键值存储的数据库,用来共享集群的整体状态的信息。

6、节点

节点是运行了pod的物理机或虚拟机。控制平面管理集群中的每个节点,该节点包含运行 pod所需的服务。

7、Pods

K8s pod 是K8s管理容器集的最小单位。 每个pod有一个分配给pod中的所有容器的单独的IP 地址。在pod中的容器内存和存储资源是共享的。当应用程序只有一个进程时,pod 也可以有一个容器。

8、Kubelet

Kubelet是一个工作节点组件。它的任务是跟踪pod及其容器的运行状态。它与pod的YAML 或JSON描述文件相关。Kubelet检查 pod 规格并确定 pod 是否健康。

9、Kube代理

Kube代理是一个网络代理和负载均衡器,充当每个节点和API服务器之间的连接。它在集群中的每个节点上运行,并允许你从内部和外部连接到pod。

10、Kubectl

Kubectl是K8s的命令行工具。它用于部署应用程序、监控和控制集群资源以及查看日志。

4、K8s控制节点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的一个实例中)

5、K8s工作节点Node

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

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

6、K8s其他节点

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

四、K8s使用

1、Pod创建流程

    • 客户端提交创建请求,可以通过API Server的Restful API,也可以使用kubectl命令行工具。支持的数据类型包括JSON和YAML。
    • API Server处理用户请求,存储Pod数据到etcd。
    • 调度器通过API Server查看未绑定的Pod。尝试为Pod分配主机。
    • 过滤主机 (调度预选):调度器用一组规则过滤掉不符合要求的主机。比如Pod指定了所需要的资源量,那么可用资源比Pod需要的资源量少的主机会被过滤掉。
    • 主机打分(调度优选):对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把容一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等。
    • 选择主机:选择打分最高的主机,进行binding操作,结果存储到etcd中。
    • kubelet根据调度结果执行Pod创建操作: 绑定成功后,scheduler会调用APIServer的API在etcd中创建一个boundpod对象,描述在一个工作节点上绑定运行的所有pod信息。运行在每个工作节点上的kubelet也会定期与etcd同步boundpod信息,一旦发现应该在该工作节点上运行的boundpod对象没有更新,则调用Docker API创建并启动pod内的容器。

2、Pod状态

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

状态

描述

ContainerCreating

容器创建中

PodInitializing pod

初始化中

CrashLoopBackOff

容器曾经启动了,但可能又异常退出了,kubelet正在将它重启

InvalidImageName

无法解析镜像名称

ImageInspectError

无法校验镜像

ErrImageNeverPull

策略禁止拉取镜像

ImagePullBackOff

正在重试拉取

RegistryUnavailable

连接不到镜像中心

ErrImagePull

通用的拉取镜像出错

CreateContainerConfigError

不能创建kubelet使用的容器配置

CreateContainerError

创建容器失败

m.internalLifecycle.PreStartContainer

执行hook报错

RunContainerError

启动容器失败

PostStartHookError

执行hook报错

ContainersNotInitialized

容器没有初始化完毕

ContainersNotRead

容器没有准备完毕

DockerDaemonNotReady

docker还没有完全启动

NetworkPluginNotReady

网络插件还没有完全启动

3、kubectl常用命令

参考资料:命令行工具 (kubectl) | Kubernetes

1、创建yaml 资源

kubectl create demo.yaml

2、开放yaml资源端口

kubectl expose demo.yaml

3、创建并启动容器对象

kubectl run demo.yaml

4、显示资源详情

kubectl describe

5、查看容器的日志

kubectl logs

6、获取资源信息

kubectl get

7、编辑资源对象

kubectl edit

8、删除资源

kubectl delete

4、yaml配置

1、apiVersion

Kubernetes API的稳定版本,包含很多核心对象:pod、service等。

2、kind

指定这个资源对象的类型,如pod、deployment、statefulset、job、cronjob、Endpoints service

    • Endpoints :可以把外部的链接到k8s系统中
    • service:部署一个内部的IP,其他deployment可以链接
    • deployment:部署一个pod,内部只能链接service,无法互相连接。

3、metadata

常用的配置项有name:显示的名字,namespace:归属的命名空间。

4、spec

一个嵌套字典与列表的配置项,也是主要的配置项,支持的子项非常多,根据资源对象的不同,子项会有不同的配置。


apiVersion: v1  				#必选 版本号
kind: Pod       				#必选
metadata:								#必选 元数据
  name: nginx						#必选 Pod名称
  labels:								#自定义标签
    app: nginx					#自定义标签名称
spec:										#必选 Pod中容器的详细定义
  containers:						#必选 Pod中容器列表,一个pod里会有多个容器
    - name:nginx 				#必选 容器名称
      image:nginx 			#必选 容器的镜像名称
      imagePullPolicy:IfNotPresent # [Always | Never | IfNotPresent] 获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像 
  	  ports: 						#需要暴露的端口库号列表
  	  - containerPort:80 # 容器需要监听的端口号
 restartPolicy: Always 	# [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod 


service的spec配置:

apiVersion: v1  		#必选 版本号
kind: Service       #必选
metadata:						#必选 元数据
  name: service-hello		#必选 Pod名称
  labels:						#自定义标签
    name: service-hello #自定义标签名称
spec:								#必选 Pod中容器的详细定义
  type:	NodePort		#这里代表是NodePort类型的,另外还有ingress,LoadBalancer 
  ports: 
  - port:80 				#这里的端口和clusterIP(kubectl describe service service-hello中的IP的port)对应,即在集群中所有机器上curl clusterIP:80可访问发布的应用服务
  	targetPort:8080 #端口一定要和contrainer暴露出来的端口对应,nodejs暴露出来的端口是8080
  	protocol: TCP
  	nodePort: 31111 #所有的节点都会开发此端口30000~32767,此端口供外部调用
  selector:
  	run:hello  			#这里选择器一定要选择容器的标签

6、nodeName

nodeName用于将Pod调度到指定的Node名称上。

# SchedulePolicy-nodeName.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: busybox
  name: busyboxnn
  namespace: default
spec:
  nodeName: k8s-node1
  containers:
  - image: busybox
    name: bs
    command:
    - "ping"
    - "baidu.com"

5、关于port

  • port:是k8s集群内部访问service的端口,即通过clusterIP:port可以访问到某个service
  • nodePort:是外部访问k8s集群中service的端口,通过nodeIP:nodePort可以从外部访问到某个service。
  • targetPort:是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器
  • containerPort:是pod的内部端口,targetPort映射到containerPort。

五、阿里云K8s实践

1、工作台

2、K8s集群列表

3、K8s工作空间

4、具体容器K8s

1、查看Pod状态

2、无状态多个节点

3、查看启动部署

容器版本可以回滚到某次部署发布

4、查看实时日志

5、查看服务路由

外网走域名地址访问,内网走服务名称自动注册查找

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网盘文件永久链接 目录: 1ocker三剑客名词介绍mp4 2 ckermachine与 dockercompose个绍mp4 3 ockercompose使用的三步mp4 4 ockercompose语法讲解 5 ockercompose语法讲解2av,mP 6 ockercompose案例1.mp4 7 ockercompose案例2.mp4 8 ockercompose案例3,mp4 9 dockerswarm简介与集群环境佳备mp4 10 dockerswarm集群搭建,mp4 11harbor准备两个版本的ngn镜像,mp4 12发布服务路由网格mp4 13负载均衡扩展与裁减mp4 14版本更新版本回退滚动间隔更新mp4 15本地存储着与网络存储卷mp4 16服务互联与服务发现mp4 17小结mp4 18容器认识1mp4 19容器认识2.mp4 20ocker个绍版本,mp4 21ocker容器使用的内核技术介绍mp4 22 ocker安装,mp4 23ocker客户端与服务端分离mp4 24程 docker操作演示还原环境mp4 25像容器仓库概念mp4 26找镜像下载镜像删除镜食m 27配置镜像加速器mp4 28镜像导出与导入方法mp4 29镜像仓库分美公网仓库创建与量作演示,mp4 30habo个绍hbo安装过程1.mp4 31 harbor安装过程2.mp4 32hbor上传下载mp4 33镜像小结imP4 34容器常见操作1mp4 35容器常见操作2mp4 36 ocker命令回顾 commit提交镜像_mp4 37 ockerexed操作,mp4 38 ocker常见操作总结重点mp4 39时复制和用时分配技术讲解mp4 40合文件系统介绍auts介绍mp4 41ufs过渡到 overlay . mp4 42过操作来理解 overlay, mp4 43 ocker存储驱动小结mp4 44器跑httpd案例1mp4 45自定义httpd容器并提交为镜像dockerrun启动应用详解mp4 46 docker数据卷mp4 47docker数据卷小结官方htpd镜像运行容器mp4 48docker跑mariadb或mysql应用mp4 49 docker跑应用补充与小结,mp4 50 ockerfile个绍参数讲解1mp4 51 ockerfile参数讲解2mp4 52ockerfile构建httpd镜像,mp4 53ockerfile构建httpd镜像2mp4 54 ockerfile构建 tomcat镜像mp4 55 ockerfile构建 tomcat多种方法之间的比较mp4 56 ockerfilel构建 mariadb镜像,mp4 57 ockert构建 mariadb镜像2小结mp4 58 ocker单宿主机容器互联mp 59 docker本地网络 bridge模式mp4 60 docker本地网络 hostnonecontainer模式,mp4 61跨 dockery网络方案ame价绍mp4 62 lanned网络搭建过程mp4 63 anned网络测试与网络小结mp4 64 docker的web管理平台小结mp4 ...............................................
Kubernetes是一个容器编排及其自动化管理的工具,它可以帮助我们管理大量的Docker容器。随着业务增长,如果需要手动管理每一个Docker容器,将会增加我们的工作量。因此,Kubernetes成为我们在学习Docker中需要进阶的知识。在Kubernetes中,集群中的每个非master节点都运行两个进程:kubelet和kube-proxy。kubelet与master节点进行通信,而kube-proxy是一种网络代理,将Kubernetes的网络服务代理到每个节点上。Kubernetes提供了健康检查、自修复、自动扩容缩容、服务发现和负载均衡等功能,使我们对于大量的Docker容器管理更加方便。 #### 引用[.reference_title] - *1* *3* [Docker(二):理解容器编排工具Kubernetes内部工作原理](https://blog.csdn.net/dengyu810/article/details/104224713)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [kubernetes(k8s)容器编排工具基础概念](https://blog.csdn.net/weixin_41358004/article/details/103676487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值