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 ...
随机推荐
- 2019年C题 视觉情报信息分析
2019 年第十六届中国研究生数学建模竞赛C 题 任务1中 图三:图3 中拍照者距离地面的高度 目录: 0.试题分析: 1.构建摄像机模型 2.摄像机参数假定 3.像平面坐标计算 4.图像标定及数值测 ...
- Linux下zookeeper安装及运行
zookeeper下载地址:http://archive.apache.org/dist/zookeeper/ 安装 第一步:安装 jdk(此步省略,我给大家提供的镜像已经安装好JDK) 第二步:把 ...
- 【HDU5952】Counting Cliques
题目大意:给定一个\(N\)个点,\(M\)条边的无向图,求图中有多少个大小为\(S\)的团.\(N \le 100,deg(i)\le 20,i\in [1,n]\). 题解: 考虑搜索. 需要确定 ...
- 2-删除IPC$的方式
一.使用命令临时删除IPC$的方式 1.查看IPC$是否启用 命令:net share 2.删除IPC$功能 命令:net share ipc$ /delete 注:使用命令删除后,重启服务器后,IP ...
- 01_Deepin15 下搭建python开发环境
https://blog.csdn.net/iimpact/article/details/90239193 https://github.com/josonle/Coding-Now#Linux系统 ...
- Mac OS 系统开发环境的一些坑
最近换 Mac OS 系统开发,运行项目时遇到各种报错,记录下: 1.拉取项目后,需要安装依赖 npm install ,提示需要安装 xcode,报错如下. 从官网下载 xcode 时提示要更新最新 ...
- BigDecimal的3个toString方法
本文介绍BigDecimal的3个toString方法的区别. BigDecimal类有3个toString方法,分别是toEngineeringString.toPlainString和toStri ...
- HGOI 20191101am 题解
Problem A awesome 给出一个序列$A_i$,任取序列中三个数组成三元组$(a_i , a_j , a_k)$. 输出本质不同的且$abc \equiv 1 (mod P)$且满足$a ...
- linux如何查看ip地址
使用命令: ifconfig -a 例如:
- MySQL内置方法
distinct(去重) select distinct 字段 from 表名 select distinct age from employee; 四则运算 对筛选的结果进行四则运算 select ...