【K8S in Action】副本机制与控制器:部署托管的Pod

news/2024/7/4 7:38:58 标签: kubernetes, 容器, 云原生

通过控制器来运行托管的 pod,Pod失败的时候自动重新启动它们。

1. 保持pod健康

从外部检查应用程序的运行状况:

  1. HTTPGET探针对容器的 IP 地址
  2. TCP套接字探针尝试与容器指定端口建立TCP连接
  3. Exec探针在容器内执行任意命令,并检查命令的退出状态码。如果状态码是 0, 则探测成功。

务必记得设置一个初始延迟未说明应用程序的启动时间。

livenessProbe:     
	httpGet: 		 		 HTTPGET探针
		path: /      		 请求路径
		port: 8080  		 请求端口
	initialDelaySeconds: 15  初始延迟,应用启动后15s开始探测请求

在这里插入图片描述

# 获取崩溃容器的应用日志, 即上一个容器的日志
kubectl logs mypod --previous 

# describe的内容来了解为什么必须重启容器
kubectl describe po kubia-liveness

1.1 describe 结果解释

退出代码为137, 这有特殊的含义 —-表示该进程由外部信号终止。数字137是两个数字的总和:128+x, 其中x是终止进程的信号编号。
在这个例子中,x等于9, 这是SIGKILL 的信号编号,意味着这个进程被强行终止。

  • delay(延迟)delay=0s部分显示在容器启动后立即开始探测
  • timeout(超时)设置为1秒,因此容器必须在1秒内进行响应, 不然这次
    探测记作失败
  • period(周期)等。在探测连续三次失败(#failure= 3)后重启容器
    在这里插入图片描述

2 了解ReplicationController

ReplicationController旨在创建和管理一个pod的多个副本。确保pod的数量始终与其标签选择器匹配。
ReplicationController有三个主要部分:

  1. label selector ( 标签选择器), 用于确定ReplicationController作用域中有哪些Pod
  2. replica count (副本个数), 指定应运行的pod 数量
  3. pod template (pod模板), 用于创建新的pod 副本

一些命令缺少命名空间,补上即可使用

kubectl create -f kubia-rc.yaml		 创建了ReplicationController

kubectl get pods -A			RC 根据Pod 模板启动3个kubia 的Pod,查看Pod
#NAME 		READY STATUS	 RESTARTS AGE 
#kubia-53thy	 0/1 ContainerCreating 0  2s

kubectl delete pod kubia-53thy    删除一个Pod,观察将会创建出一个

kubectl get re   # 获取RC的信息 re作为rep让ca巨oncontroller的简写
# NAME DESIRED CURRENT READY AGE 
# kubia 3		3		3		3m

kubectl describe rc kubia

在这里插入图片描述
通过更改pod的标签, 可以将它 从ReplicationController的作用域中添加或删除。
pod 在metadata.ownerReferences 中引用RC 控制器,可以找到属于哪个RC控制器。

将 pod 移入或移出RC的作用域

kubectl label pod kubia - dmdck type=special   给一个Pod增加type=sp ecial的标签,对原控制器无影响

kubectl label pod kubia-dmdck app=foo --overwrite   对Pod修改现有标签app=kubi,脱落RC 的管理

kubectl get pods -L app      使用-L app 选项在列中显示app的标签列

修改RC 中的 pod模板

更改 pod 模板后,会影响你之后创建的Pod,并且不会影响你已经创建的Pod。

kubectl edit rc kubia   # 编辑RC kubia 的Yaml
修改模板中的容器图像, 删除现有的容器, 并让它们替换为新模板中的新容器, 可用来升级pod(后续有更好方法)

kubectl scale re kubia --replicas=3    也可修改副本数量实现水平缩放

kubectl delete rc kubia --cascade=false  删除 RC 时,使用--cascade=false保持 pod 的运行

3 使用ReplicaSet而不是ReplicationController

ReplicaSet 的选择器比RC强,RC已经被弃用。
在这里插入图片描述

kubectl create -f kubia-replicaset.yaml
kubectl get rs                    rs 是ReplicaSet的简写
kubectl describe rs    

selector: 
	matchExpressions: 
		- key: app 
			operator: In
			values:
			- kubia 

每个表达式都必须 包含一个key、一个operator (运算符),并且可能还有一个values的列表(取决于运算符),四个有效的运算符。如果同时指定matchLabels和matchExpressions, 则所有标签都必须匹配,并且所有表达式必须计算为true以使该pod与选择器匹配

• In : Label的值 必须与其中 一个指定的values 匹配。
• Notln : Label的值与任何指定的values 不匹配。
• Exists : pod 必须包含一个指定名称的标签(值不重要)。使用此运算符时,
不应指定 values字段。
• DoesNotExist : pod不得包含有指定名称的标签。values属性不得指定

使用 DaemonSet在每个节点上运行一个pod

在这里插入图片描述

Job 执行单个任务或定时运行

在这里插入图片描述


http://www.niftyadmin.cn/n/5251329.html

相关文章

开启 winrm 功能

抽空写成批处理程序 因为进行远程powershell管理必须需要启用winrm的服务,所以需要在windows平台上启用winrm服务 winrm service 默认都是未启用的状态,先查看状态;如无返回信息,则是没有启动; winrm enumerate winr…

求导公式,求导的四则运算,复合函数求导

求导公式 求导的四则运算 复合函数求导

redhat8—网络知识

网络基础 /etc/servicesIPv4路由IPv4地址和路由配置 IPv6路由主机名和IP地址hosts、resolv.conf 网络配置查看网络配置显示ip地址例子 路由故障排除追踪命令win命令linux命令 端口和服务故障排除 配置网络命令行配置网络添加网络连接ethernet描述连接配置文件 /etc/services /…

代码随想录刷题题Day8

刷题的第八天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C / Python Day8 任务 ● 理论基础 ● 232.用栈实现队列 ● 225. 用队列实现栈 1 栈与队列理论基础 队列是先进先出,栈是先…

Leetcode659. 分割数组为连续子序列

Every day a Leetcode 题目来源:659. 分割数组为连续子序列 解法1:哈希 贪心 定义两个哈希表: numsCount:统计数组 nums 中各元素出现次数。tailCount:存储以数字 i 结尾的且符合题意的连续子序列个数。 算法&a…

ZooKeeper分布式应用协调服务

1、分布式应用协调服务ZooKeeper 2、数据系统和通知机制的整合 3、在ZooKeeper中数据是以节点【znode】的形式存在,并且在节点中保存了数据,该节点的标识是通过路径标识实现 4、数据节点的存储类型: (1)persistent&…

深入解析Node.js:V8引擎、事件驱动和非阻塞式I/O

文章目录 1. 引言2. 什么是Node.js?3. V8引擎3.1 V8引擎简介3.2 V8引擎的特点 4. 事件驱动4.1 事件循环4.2 事件触发与监听4.2.1 代码示例 4.3 异步回调4.3.1 代码示例 5. 非阻塞式I/O5.1 非阻塞式I/O的优势5.2 异步与同步的对比5.2.1 同步I/O的代码示例5.2.2 异步I…

git标签的管理与思考

git 标签管理 git 如何打标签呢? 标签是什么? 标签 相当于一个 版本管理的一个贴纸,随时 可以通过标签 切换到 这个版本的状态 , 有人可能有疑问 git commit 就可以知道 代码的改动了, 为啥还需要标签来管理呢? …