kubernetes controller 控制器,kubernetes ingress controller fake certificate

kubernetes controller 控制器在Kubernetes中,Controller 是一种特殊的对象,它们负责运行和监控集群中一组Pods的状态,确保这些Pods的实际运行状态与预期状

在Kubernetes 中,控制器是一个特殊的对象,负责监控集群中一组pod 的执行情况和状态,确保这些pod 的实际执行状态与预期状态相符。

1 controller分类

介绍:

当您部署无状态应用程序时,控制器会自动维护Pod 副本的生命周期和更新。

有状态集:

用于管理有状态应用程序并为每个Pod 提供持久存储和唯一的网络标识。

恶魔套装:

守护进程确保Pod 副本在集群中的每个节点上运行。通常用于运行系统服务,例如日志记录和监视。

副本集(RS):

确保Pod 副本始终运行。通常通过部署间接使用,但也可以独立使用。

复制控制器(已弃用):

原来的Replica Management Controller已被ReplicaSet和Deployment取代。

定时作业:

根据任务的预定执行时间表创建作业。

工作:

运行一次性任务,直到任务成功完成或达到指定的重试次数。

2 Deployment介绍及应用

2.1 相关概念及其功能

2.1.1 ReplicaSet控制器功能

支持新的基于集合的选择器(以前的rc 没有这样的功能)

通过改变Pod副本数量实现Pod扩容/缩容

2.1.2 Deployment控制器功能

部署集成在线部署、滚动升级、创建副本、回滚等功能

ReplicaSet 包含在部署中并在部署中使用

2.2 使用deployment控制器部署无状态应用

2.2.1 Deployment用于部署无状态应用

无状态应用的特点:

所有豆荚都没有什么不同。 Pod 中的所有容器都可以在集群中的任何节点上运行。例如,您可以自由扩展或减少pod 数量。只需运行一个静态网页程序。

2.2.2 创建deployment类型应用

写入yaml文件

vim 部署-nginx.yaml

apiVersion: apps/v1 # 指定要使用的Kubernetes API 版本

kind: Deployment # 定义资源类型为部署

元数据:

name: nginx-deployment # 定义部署的名称

label: # 定义标签来识别和选择部署

app: nginx

规格:

plicas: 3 # 定义预期运行的pod 副本数量

选择器: # 定义如何选择Pod,通常匹配标签

匹配标签:

app: nginx

template: # Pod 模板,定义Pod 和运行容器的规范

元数据:

label: # Pod 标签必须与选择器匹配

app: nginx

规格:

containers: #定义容器列表

– name: nginx # 容器名称

image: nginx # 使用的Docker 镜像名称和标签

ports: # 定义容器端口映射

-containerPort: 80 # 容器内监听端口

# 您可以添加进一步的配置,例如资源限制、环境变量、存储卷等。

确认

kubectl apply -f 部署-nginx.yaml

kubectl 获取部署

kubectl getpod

2.2.3 删除deployment中的pod

当您手动删除Pod 时,部署控制器会识别Pod 副本数量的减少,并根据spec.replicas 字段中指定的数量自动创建新的Pod 来替换已删除的Pod。

直接使用kubectl delete pod 命令删除pod。

可以通过Pod名称指定要删除的Pod。

kubectl 删除pod pod 名称

这将删除指定的Pod,但部署控制器将根据您的配置自动替换已删除的Pod。

2.2.4 删除deployment

kubectl deadeploy 部署名称

kubectl 获取部署

kubectl getpod

2.3 pod版本升级

[root@master ~]# kubectl set image -h # 显示帮助

[root@master ~]# 获取kubectl pod

[root@master ~]# kubectl 描述pod pod 名称|

Image: nginx:1.9.1

# 开始升级镜像版本

[root@master ~]# kubectl 设置镜像部署nginx-deployment nginx=nginx:1.9.1 –record

[root@master ~]# kubectl 描述pod pod 名称|

Image: nginx:1.9.1

2.4 pod版本回退

监控更新状态并检查更新历史记录。

[root@master ~]# kubectl rollout 状态部署nginx-deployment

[root@master ~]# kubectl 推出历史部署nginx-deployment

定义要回滚到的版本(尚未正式实现)

[root@master ~]# kubectl 部署历史部署nginx-deployment –revision=1

3. 执行回滚

[root@master ~]# kubectl rollout undodeployment nginx-deployment –to-revision=1

Deployment.apps/nginx-deployment 已回滚

确认

[root@easzlab ~]# kubectl 推出历史部署nginx-deployment

2.5 副本扩缩容

查看帮助文档

[root@master ~]# kubectlscale -h

查看当前副本数量:查看当前副本数量,可以使用kubectl getdeployment 或kubectl get statefulset。

kubectl 获取部署部署名称

要执行缩放操作: 使用kubectlscale 命令增加pod 副本的数量。

kubectl 规模部署部署名称–replicas=新副本数量

其中new-replica-count 是要配置的新副本的数量。

执行缩放操作。如果需要减少Pod 副本数量,也可以使用kubectlscale 命令,但配置更少的副本。

kubectl 规模部署部署名称–replicas=新副本数量

验证副本计数是否已更新:使用kubectl getdeployment 再次检查部署,以验证副本计数是否已更新。

kubectl 获取部署部署名称

2.6 滚动更新

多副本滚动更新是Kubernetes 部署控制器的一项功能,允许您将Pod 增量更新到新版本,而无需一次替换所有Pod。这种更新方式降低了服务中断的风险,保证了服务的高可用性。其操作与前一类似,但详细说明将被省略。

[root@master ~]# kubectl 规模部署nginx-deployment –replicas=16

[root@master ~]# 获取kubectl pod

[root@master ~]# kubectl 设置镜像部署nginx-deployment nginx=nginx:1.9.1 –record

[root@master ~]# kubectl rollout 状态部署nginx-deployment

正在等待部署“nginx-deployment”部署完成: 16 个新副本中的8 个已更新.

3 Replicaset介绍及应用

ReplicaSet 确保Pod 副本始终运行,如果Pod 由于任何原因发生故障,ReplicaSet 会自动替换Pod。此外,Deployment 资源通常包含ReplicaSet,并且Deployments 可以提供声明性更新和更好的生命周期管理,使它们成为管理无状态应用程序的首选方法。作为底层资源,ReplicaSet 通常由Deployment 间接管理。

写入yaml文件

[root@master ~]# vim rs-nginx.yaml

apiVersion: apps/v1 # 使用的Kubernetes API 版本

kind: ReplicaSet #资源类型为ReplicaSet

元数据:

name: rs-nginx # 副本集名称

label: # 定义一个标签来标识ReplicaSet

app: nginx

规格:

plicas: 3 # 预计运行的pod 副本数量

选择器: # 定义如何选择pod,通常基于标签选择

匹配标签:

app: nginx

template: # Pod 模板,定义Pod 和运行容器的规范

元数据:

label: # Pod 标签必须与选择器匹配

app: nginx

规格:

containers: #定义容器列表

– name: nginx # 容器名称

image: nginx:1.19.0 # 使用的Docker 镜像名称和标签

ports: # 定义容器端口映射

-containerPort: 80 # 容器内监听的端口80

[root@master ~]# kubectl apply -f rs-nginx.yaml

ReplicaSet 只能扩容或收缩,不能更新。

4 StatefulSet介绍及应用

4.1 StatefulSet控制器作用

StatefulSet 是Kubernetes 中的控制器,用于管理有状态应用程序的生命周期。与部署控制器(用于管理无状态应用程序)不同,StatefulSet 提供一些特定的功能来满足有状态应用程序的需求。

稳定且持久的标识符。有序的部署、扩展、更新、删除。持久存储可确保即使在重新安排Pod 后您的数据仍然可用。

4.2 无状态应用和有状态应用

4.2.1 无状态应用

例如,nginx 请求本身包含响应者响应请求所需的所有信息。每个请求的执行就像第一次执行一样,并且不依赖于先前的响应数据。不需要持久数据。无状态应用程序的多个实例彼此独立,可以按顺序部署、删除或横向扩展。

4.2.2 有状态应用

例如,之前和之后的mysql请求是相关的,并且依赖于需要持久化的数据。有状态应用程序的多个实例具有依赖关系,并且不能相互替换。每个Pod 都有一个持久ID,无论它是如何调度的。

4.3 StatefulSet的特点

顺序部署、扩容、删除:

StatefulSet 有一个唯一的序列号,从0 开始并递增,以便Pod 的副本按顺序初始化、部署和删除。

稳定网络ID:

每个Pod 副本都有一个与Pod 生命周期相匹配的持久DNS 名称,允许其他服务通过稳定名称访问Pod。

持久存储:

StatefulSets 支持每个Pod 副本的持久存储。即使Pod被重新调度到另一个节点,其存储卷也会跟随Pod,保证数据的持久性。

有序滚动更新:

当StatefulSet 更新时,Pod 副本一次更新一个,而不是同时更新所有Pod,从而减少更新过程中的服务中断。

扩展和扩展有状态服务:

StatefulSet 允许您指定Pod 副本的数量并根据需要扩大或缩小它们,同时保持每个Pod 副本的顺序和唯一性。

自动恢复:

如果Pod 的副本发生故障,StatefulSet 控制器会替换发生故障的Pod 并尝试恢复所需数量的副本。

滚动重启:

StatefulSet 中的所有Pod 都可以被触发执行滚动重启。当您想要更新应用程序配置或需要更新Pod 的状态时,这非常有用。

有序终止:

当StatefulSet收缩时,Pod会以相反的顺序(从最高序列号到最低序列号)复制,从而减少对有状态服务的影响。

4.4 StatefulSet案例

4.4.1 应用配置

[root@master ~]# vim ss-nginx.yaml

api版本: v1

kind:服务

元数据:

name: nginx-服务

规格:

clusterIP: None # 无头服务,不分配集群IP

选择器:

app: nginx

端口:

– name: http

端口: 80

目标端口: 80

apiVersion: 应用程序/v1

kind: 状态集

元数据:

name: nginx-statefulset

规格:

serviceName: \’nginx-service\’ # 指定服务名称

复制品: 3

选择器:

匹配标签:

app: nginx

模板:

元数据:

标签:

app: nginx

规格:

集装箱:

-名称: nginx

图片: nginx

端口:

-集装箱港口: 80

卷安装:

– name: www

mountPath: /usr/share/nginx/html

卷索赔模板:

– 元数据:

姓名:www

规格:

accessModes: [\’读写一次\’]

storageClassName: \’nfs 客户端\’

资源:

请求:

存储: 1Gi

[root@master ~]# kubectl apply -f ds-nginx.yaml

4.4.2 访问Service

该服务被定义为无头(无clusterIP:),因此不会为Pod 分配集群IP。相反,它返回与StatefulSet 关联的Pod 的DNS 记录列表。这意味着可以使用以下格式的DNS 名称来访问每个pod:

podname.servicename.namespace.svc.cluster.local

例如,访问第一个Nginx Pod 的URL 为:

卷曲http://nginx-statefulset-0.nginx-service.default.svc.cluster.local。

4.4.3 验证

使用以下命令检查StatefulSet 和Service 的状态:

kubectl 获取状态集

获取kubectl 服务

kubectl 解释状态集nginx-statefulset

kubectl 描述服务nginx-service

4.4.4 扩展和缩容

StatefulSet 可以根据需要增长或缩小。

kubectl 缩放statefulset nginx-statefulset –replicas=5

4.4.5 有序滚动更新

触发滚动更新

kubectl 设置镜像statefulset/nginx nginx=nginx:1.19.1 –record

该命令将Nginx镜像更新到指定版本并记录更新,以便您回滚到该版本。

观察滚动更新

kubectl 推出状态statefulset/nginx

查看更新历史记录

kubectl 推出历史statefulset/nginx

回滚更新(如果需要)

如果您在更新过程中发现任何问题,可以使用kubectl rollout undo 命令回滚到之前的版本。

撤消kubectl rollout statefulset/nginx

检查更新

更新完成后,使用kubectl get 命令检查所有pod 是否已更新到新版本。

kubectl 获取状态设置nginx

kubectl get pod -l app=nginx

5 DaemonSet介绍及应用

5.1 DaemonSet 介绍

DemonSet 允许所有(或特定)节点运行相同的Pod。当节点添加到K8S 集群时,Pod(DaemonSet)将被安排在该节点上运行。当从K8S 集群中删除节点时,DaemonSet 调度的pod 也会被删除。与此DaemonSet 关联的所有pod 都将被删除。如果DaemonSet 的Pod 被终止、停止或崩溃,DaemonSet 会在计算节点上重新创建一个新副本。 DaemonSet 通常用于日志收集、监控收集和分布式存储守护进程等。

5.2 DaemonSet 案例

[root@master ~]# vim ds-nginx.yaml

apiVersion: apps/v1 # 使用的Kubernetes API 版本

kind: DaemonSet #资源类型为DaemonSet

元数据:

name: nginx-daemonset #DaemonSet名称

规格:

选择器: # 定义如何选择pod,通常基于标签选择

匹配标签:

app: nginx 守护进程

template: # Pod 模板,定义Pod 和运行容器的规范

元数据:

label: # Pod 标签必须与选择器匹配

app: nginx 守护进程

规格:

containers: #定义容器列表

– name: nginx # 容器名称

image: nginx # 使用的Docker 镜像名称和标签

ports: # 定义容器端口映射

-containerPort: 80 # 容器内监听的端口80

resources: # 资源限制

请求:

Memory: \’64Mi\’ # Pod发起了内存请求

cpu: \’250m\’ #pod发起的CPU请求

限额:

Memory: \’128Mi\’ # Pod 可以使用的最大内存

cpu: \’500m\’ # Pod 可以使用的最大CPU

tolerations: #Tolerance,允许pod在有相应污点的节点上运行

– key: \’node-role.kubernetes.io/master\’

effect: \’NoSchedule\’ # 例如禁止在主节点上运行

[root@master ~]# kubectl apply -f ds-nginx.yaml

Demonset在每个节点上创建一个pod

6 Job介绍及应用

6.1 Job介绍

对于ReplicaSets,期望这些对象将持续运行以执行持久性任务,例如Web 服务,只要Pod 保持预期数量并且用户没有显式删除它们。

对于非持久性任务,例如压缩文件,Pod 必须在任务完成后完成运行,并且Pod 不需要保留在系统上。至此,作业就可以使用了。

POB 负责批处理短期任务或仅运行一次的任务,并确保批处理任务中的一个或多个Pod 正常完成。

6.2 Job案例

创建作业YAML 配置

首先,创建一个名为job.yaml 的YAML 配置文件来定义作业资源并使用busybox 映像运行简单的echo 命令。

[root@master ~]# vim job.yaml

apiVersion: 批次/v1

kind: 工作

元数据:

name: 示例作业

规格:

模板:

元数据:

name: 示例作业

规格:

集装箱:

– name: busybox

图像: 忙碌盒:1.28

command: [\’echo\’, \’你好,Kubernetes 工作!\’]

restartPolicy: 从不

退避限制: 3

[反应堆

ot@master ~]# kubectl apply -f job.yaml
查看Pod日志
如果需要查看执行任务的Pod的日志,可以使用以下命令:

kubectl logs -f <pod-name>
并行处理任务
如果你需要并行处理多个任务,可以设置spec.completions和spec.parallelism:

spec:
completions: 5 # Job需要完成的工作总数
parallelism: 2 # 同时运行的Pod数量
这将创建一个Job,它将并行执行任务,直到完成指定数量的任务。

7 CronJob介绍及应用

CronJob是Kubernetes中用于定时执行任务的控制器,类似于操作系统中的cron工具。

7.1 CronJob案例

创建CronJob YAML配置
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello-world-cronjob
spec:
schedule: \”0/5 * * * *\” # 每5分钟执行一次
jobTemplate:
spec:
template:
spec:
containers:
– name: busybox
image: busybox:1.28
command: [\”/bin/sh\”, \”-c\”, \”echo Hello, Kubernetes CronJob at $(date)\”]
restartPolicy: OnFailure
[root@master ~]# kubectl apply -f cronjob.yaml
查看CronJob的日志
由于CronJob每次执行都会创建一个新的Job,可以查看最近创建的Job的日志:

复制
# 列出CronJob创建的所有Jobs
kubectl get jobs -l job-name=hello-world-cronjob
# 获取最新的Job名称,然后查看日志
kubectl logs -f <latest-job-pod-name>
#以上关于kubernetes controller 控制器的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92388.html

Like (0)
CSDN的头像CSDN
Previous 2024年6月26日
Next 2024年6月26日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注