6and7.Pod控制器应用进阶
Pod控制器应用进阶:
imagepullpolicy: 镜像获取策略
Always,Never,IfNoPresent
暴露端口: ports
labels 标签可以后期添加修改。
============================================
资源标签:
key=value
注意键值
key 只能是字母数字下划线 _ - .等,且只能是字母或者数字开头及结尾,中间可以有下划线等,长度不能超过64个字符
value 可以为空,只能是字母数字下划线 _ - .等,且只能是字母或者数字开头及结尾,中间可以有下划线等,长度不能超过64个字符
查看标签:
[root@k8s-master manifests]# kubectl get pods --show-labels
-L 显示指定标签的值
-l 标签过滤
[root@k8s-master manifests]# kubectl get pods -l app,release
[root@k8s-master manifests]# kubectl get pods -l app --show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod-demo 1/2 CrashLoopBackOff 29 128m app=myapp,tier=frontend
添加标签: release
[root@k8s-master manifests]# kubectl label pods pod-demo release=canary
pod/pod-demo labeled
[root@k8s-master manifests]# kubectl get pods pod-demo --show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod-demo 1/2 CrashLoopBackOff 29 130m app=myapp,release=canary,tier=frontend
标签修改:
[root@k8s-master manifests]# kubectl label pods pod-demo release=stable --overwrite
pod/pod-demo labeled
[root@k8s-master manifests]# kubectl get pods pod-demo --show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod-demo 1/2 CrashLoopBackOff 30 133m app=myapp,release=stable,tier=frontend
标签选择器:
等值关系: =,==,!=
集合关系:
KEY in (VALUE1,VALUE2)
KEY notin (VALUE1,VALUE2...)
KEY
!KEY
许多资源支持内嵌字段定义其使用的标签选择器
matchLabels: 直接给定键值
matchExpressions: 基于给定的表达式来定义使用标签选择器,{key:"KEY",operator:"OPERATOR",values:[VAL1,VAL2,...]}
操作符:
In,NotIn: values 字段的值必须为费控列表
Exists,NotExists: values字段的值必须为空列表;
nodeSelector <map>
节点标签选择器
nodeName <string>
指定在某个节点运行
annotations: 资源注解
与label不同的地方在于,他不能用于挑选资源对象,仅仅用于为对象提供“元数据”
KEY in 查询:
[root@k8s-master manifests]# kubectl get pods -l "release in (stable,beta)"
NAME READY STATUS RESTARTS AGE
pod-demo 1/2 CrashLoopBackOff 31 141m
[root@k8s-master manifests]# cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
annotations:
magedu.com/created-by: "cluster admin"
spec:
containers:
- name: myapp-nginx
image: nginx:1.14-alpine
ports:
- name: http
containerPort: 80 #这里填写并不完全决定真正的暴露
- name: https
containerPort: 443
==============================
pod生命周期:
init container (初始化容器,可以有多个,并行进行) --》main container及辅助容器启动 --> man container stop
主容器结束,pod也就结束
主容器在启动之前是可以有一些操作(post start) 钩子
主容器在结束之后是可以有一些操作(pre stop)
在主容器运行期间可以进行,liveness probe(存活状态)检测,以及readiness probe(就绪状态检测)
容器存活不一定能对外提供服务
常见的pod状态:
Pending 挂起,调度正在进行
Running 运行
Failed
Successded
Unknown
pod生命周期中的重要行为:
初始化容器
容器探测
liveness 主要用于探测容器的存活状态
readiness 探测程序是否正常,是否能够正常提供服务
创建pod:
apiserver --> etcd
--> scheduler
pod创建过程:
apiserver接收到用户提交的请求,然后apiserver将目标状态保存到etcd中,然后apiserver开始请求scheduler开始调度,如果调度成功则将调度的结果保存在etcd中间
目标节点kubelet当发现etcd中保存的目标信息发生改变后会获取到客户提交的资源清单,然后目标node会根据资源清单创建pod,然后将创建的转态发送给apiserver,apiserver再将该转态存储在etcd当中
================================================
restartPolicy: 容器的重启策略
Always,OnFailure,Never,Default to Always
Always, 一直重启,第一次是马上重启,之后会延时重启,最后是隔300s重启
OnFailure 遇到意外突然挂掉会重启
Never, 不重启
删除pod,会平滑重启
=================================================
容器状态检测
liveness 探针类型:
execaction,TCPSocketaction, httpaction
1.execaction,通过命令去检测
cat liveness.yaml
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
namespace: default
spec:
containers:
- name: liveness-exec-container
image: busybox:latest
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy; sleep 3600"]
livenessProbe:
exec:
command: ["test","-e","/tmp/healthy"] #判断该文件是否存在,如果存在则证明容器存活,如果不存在,则说明有问题
initialDelaySeconds: 1 #初始化后延时1秒开始检测
periodSeconds: 3 #每隔3秒检测一次
当检测有问题时候,pod就会开始重启
2. TCPSocketaction, httpaction 如果是web服务,则可以使用tcp,http探针检测
[root@k8s-master manifests]# cat liveness.http.yaml
apiVersion: v1
kind: Pod
metadata:
name: liveness-http-pod
namespace: default
spec:
containers:
- name: liveness-http-container
image: nginx:1.14-alpine
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
livenessProbe:
httpGet:
port: http
path: /index.html
initialDelaySeconds: 1
periodSeconds: 3
使用http检测
readiness 就绪状态检测(这个的检测很重要,可能容器是正常运行,但是已经不能够正常提供服务了,如果没有这个检测,那么service还是会将请求发送到该pod上,这样会造成大量的请求失败)
这个的检测方式和liveness的格式一样。 kubectl get pods这个命令执行结果中READY列即显示为readiness的检测状态。
[root@k8s-master manifests]# cat readiness.http.yaml
apiVersion: v1
kind: Pod
metadata:
name: readiness-http-pod
namespace: default
spec:
containers:
- name: readiness-http-container
image: nginx:1.14-alpine
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
readinessProbe:
httpGet:
port: http
path: /index.html
initialDelaySeconds: 1
periodSeconds: 3
==================================================================
6and7.Pod控制器应用进阶的更多相关文章
- 05-kubernetes Pod控制器应用进阶
目录 Pod 资源 标签 给资源打标签 标签选择器 Pod 生命周期 实际操作 livenessProbe 实战 livenessProbe exec 测试 livenessProbe httpGet ...
- Kubernetes 学习6 Pod控制器应用进阶
一.资源配置清单 1.自主式Pod资源 2.资源的清单格式,大多数清单格式都遵循如下条件: a.一级字段:apiVersion(group/version),kind,metadata(name,na ...
- 五,pod控制器应用进阶
目录 Pod 资源 标签 给资源打标签 标签选择器 Pod 生命周期 pod状态探测 livenessProbe 状态探测 livenessProbe exec 测试 livenessProbe ht ...
- Kubernetes 学习7 Pod控制器应用进阶2
一.容器探测器 1.所谓的容器探测无非就是我们在里面设置了一些探针,或者称之为传感器来获取相应的数据作为判定其存活与否或就绪与否的标准,目前k8s所支持的存活性和就绪性探测方式都是一样的. 2.k8s ...
- 6、Kubernetes Pod控制器应用进阶
定义pod时,在spec字段中常用的定义字段有哪些? master ~]# kubectl explain pods.spec.containers KIND: Pod VERSION: v1 RES ...
- 3.Pod控制器应用进阶
一.Pod的生命周期 init container -- Post start -- running -- pre stop -- main container 创建Pod经历的过程:->a ...
- kubernetes系列07—Pod控制器详解
本文收录在容器技术学习系列文章总目录 1.Pod控制器 1.1 介绍 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无 ...
- 9.Pod控制器概念和基本操作2
利用一个简单的例子来启动一个deployment的Pod控制器 [root@master song]# cat deploy.yml apiVersion: apps/v1 kind: Deploym ...
- k8s学习笔记之六:Pod控制器(kube-controller-manager)
第一章.什么是kube-controller-manager? Controller Manager 由 kube-controller-manager 和 cloud-controller-mana ...
随机推荐
- Delphi VCL类结构
- linux基础2-cd、mkdir、touch、umask、chattr、lsattr、SUID/SGID/Sticky Bit
一 cd : . 代表当前目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表[目前用户身份]所在的自家目录 与cd效果相同 ~account 代表 account 这个用户的自家家目录 二m ...
- C# 对象遍历 string类型 null转空字符串和去前后空格
using System; using System.Collections.Generic; namespace OA.Common.Extensions { /// <summary> ...
- 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)
牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...
- MyBatis-07-分页
7.分页 思考:为什么要分页? 减少数据的处理量 7.1.使用Limit分页 select * from user limit startIndex,pageSize 使用Mybatis实现分页,核心 ...
- ext系统的超级块
什么是超级块 如果说inode块是Linux操作系统中文件的核心,那么超级块就是文件系统的心脏.启动Lnux操作系统后,发现某个文件系统无法使用,很有 可能就是超级块出现了问题.为什么这个超级块有这么 ...
- Java实现文件的上传下载(含源代码和jar包)
1.需要使用的jar包 链接:https://pan.baidu.com/s/1IaxQRSwfzxDpe4w4JiaEKw 提取码:xwtz 2.如果想实现文件的下载,需要创建一张表,表的结构为 i ...
- ansible API 常用模块
常用模块 用于读取yaml,json格式的文件 from ansible.parsing.dataloader import DataLoader #用于管理变量的类,包括主机,组,扩展等变量 fro ...
- 1 Mybatis
1 使用Maven导入mybatis依赖 在pom.xml中写上一下代码:这些代码的查找可在https://mvnrepository.com/open-source网站上寻找,导入mybatis时要 ...
- 了解Springboot加载文件机制
https://blog.csdn.net/u014044812/article/details/84256764(