容器编排系统——kubernetes
分类:知识集锦 发布时间:2023/4/17 17:30:13

容器编排是指自动化容器应用的部署、管理、扩展和联网的一系列管控操作,能够控制和自动化许多任务,包括调度和部署容器、在容器之间分配资源、扩缩容器应用规模、在主机不可以或者资源不足时将容器从一台主机迁移到其他主机、负载均衡以及监视容器和主机的运行状况等。

 

1、组件介绍

● Master组件

Apiserver:集群网关,负责接收、校验并响应所有请求; Etcd:集群状态存储; Controller Manager:控制器管理器,负责生命周期功能、扩缩容; Scheduler:调度器,资源调度;

● Worker组件

Kubelet:工作在集群节点之上的代理组件,通过它使用命令可以跟API Server进行交互; Docker:容器运行时环境 Kube-proxy:按需为service对象生成iptables或ipvs规则,从而将流量转发至正确的pod对象

 

2、安装

● Kind

特点:简单、容易部署,不适用生产环境

● Minikube

特点:相比Kind更加强大,支持虚拟化的能力,使用简单、容易部署,不适用生产环境

● kubeadmin(v1.13版本之后可用于生产环境)

 

3、kubectl命令

1)常用命令:kubectl get pod

● kubectl:可查看对象。

● -o yaml:输出详细信息为yaml格式。

● -o wide:以详细列表的格式查看对象。

2)展示资源的详细信息和相关Event:kubectl describe

3)进入容器:kubectl exec

4)查看日志:kubectl logs

 

4、第一个容器化应用

Kubernetes 跟 Docker 等很多项目最大的不同,就在于它不推荐使用命令行的方式直接运行容器(虽然 Kubernetes 项目也支持这种方式,比如:kubectl run),而是希望用 YAML 文件的方式,即:把容器的定义、参数、配置,统统记录在一个 YAML 文件中,然后用这样一句指令把它运行起来:

kubectl create -f 配置文件

配置文件如下:

API" target="_blank">apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: #标签选择器 matchLabels: app: nginx replicas: 2 #副本数 template: #pod相关信息 metadata: labels: app: nginx spec: containers: - name: nginx #名称 image: nginx:1.7.9 #容器镜像 ports: - containerPort: 80 #端口

这样做的好处是能够知道我们容器运行的相关信息,配置好相关字段提交到kubernetes后,kubernetes会创建出这些对象所定义的容器或者其他类型的 API 资源。

 

5、控制器模型

● ReplicaSet控制器

能够保证⼀定数量的pod正常运⾏,它会持续监听这些Pod的运⾏状态,⼀旦Pod发⽣故障,就会重启或重建。同时它还⽀持对pod数量的扩缩容和镜像版本的升降级。

● Deployment控制器

控制器并不直接管理pod,⽽是通过管理ReplicaSet来间接管理Pod,支持RS的基础上还 ⽀持滚动升级和回滚版本。

● StatefulSet控制器

StatefulSet 是为了解决有状态服务的问题而设计的资源控制器,可以通过某种方式记录这些状态,然后在 Pod 被重新创建时,能够为新 Pod 恢复这些状态。

适用场景:

○ 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于 PVC 来实现。

○ 稳定的网络标识符,即 Pod 重新调度后其 PodName 和 HostName 不变。

○ 有序部署,有序扩展,基于 init containers 来实现。

○ 有序收缩。

● DaemonSet控制器

可以保证在集群中的每⼀台(或指定)节点上都运⾏⼀个副本。⼀般适⽤于⽇志收集、 节点监控等场景。

● Job控制器

主要⽤于负责批量处理(⼀次要处理指定数量任务)短暂的⼀次性(每个任务仅运⾏⼀次就结束)任务。

● CronJob控制器

Job控制器不同的是,CronJob可以在特定的时间点(反复的)去运⾏job任务。

 

6、存储卷与数据持久化

● emptyDir

生命周期与所属pod对象相同,适用于临时存储、数据缓存系统中;

● gitRepo

能通过挂载目录访问指定代码仓库中的数据,即pod资源创建时,首先创建一个空目录clone指定git仓库的数据到该目录,再创建容器挂载该存储卷;

● hostPath

本地存储卷,其生命周期具体所在工作节点一样的持久性;

● 网络文件系统

支持NFS、CephFS等存储;

● Secret

敏感的配置信息,密钥、证书等;

● ConfigMap

为容器中应用提供配置数据以定制程序的行为,做到应用与配置文件的解耦。

hostPaths存储卷挂载方式如下所示:

存储卷挂载由两部分组成,一是容器内的volumeMounts(表示容器内挂载的目录);二是spec.volunes (表示本机上的文件系统)。

 

7、Service

Service简介:

kubernetes中,pod是应⽤程序的载体,我们可以通过pod的ip来访问应⽤程序,但是pod的ip地址不是固定的,这也就意味着不⽅便直接采⽤pod的ip对服务进⾏访问。

为了解决这个问题,kubernetes提供了Service资源,Service会对提供同⼀个服务的多个pod进⾏聚合,并且提供 ⼀个统⼀的⼊⼝地址。通过访问Service的⼊⼝地址就能访问到后⾯的pod服务。

Service类型:

● ClusterIP:默认值,它是Kubernetes系统⾃动分配的虚拟IP,只能在集群内部访问。

● Nodeport: 建立在ClusterIP基础上,在集群每个节点的某静态端口暴露服务(30000-32767),集群外可通过nodeip:nodeport访问。

● LoadBalancer:建立在Nodeport基础上,直接调度云厂商的负载均衡将服务暴露到集群外。

● ExternalName:将service映射至由ExternalName字段的内容指定的主机名来暴露服务,通过 externalName 属性指定外部⼀个服务的地址,然后在集群内部访问此service就可以访问到外部的服务了。

体验创新云技术带来核心业务效率显著提升
立即预约,加速企业数字化转型进程
Copyright ⓒ 2022 苏州博纳讯动软件有限公司 国徽 苏ICP备13004761号 法律声明及隐私政策