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 ...
随机推荐
- 多线程--volatile
在解释volatile关键字之前,先说说java的指令重排以及代码的执行顺序. 指令重排: public void sum(){ int x = 1; int y = 2; int x = x + 1 ...
- Sql 语法练习
select * from Student select * from Class select * from Score select * from Subject --1.查询出和张三住在同一个地 ...
- Git修改已经提交的用户名信息
由于工作或者其他原因,有时候我们会修改git的用户名和邮箱账号,没有改过来就提交,就会导致提交人信息不一致的问题.现在记录修正回来的方法 # 第一步,(n)代表提交次数 git rebase -i H ...
- Educational Codeforces Round 40 C. Matrix Walk( 思维)
Educational Codeforces Round 40 (Rated for Div. 2) C. Matrix Walk time limit per test 1 second memor ...
- C#信号量(Semaphore,SemaphoreSlim)
Object->MarshalByRefObject->WaitHandle->Semaphore 1.作用: 多线程环境下,可以控制线程的并发数量来限制对资源的访问 2.举例: S ...
- Ubuntu安装截图软件shutter
参考链接: Ubuntu 安装和配置shutter截图软件 解决shutter不能编辑的问题:https://itsfoss.com/shutter-edit-button-disabled/ 安装前 ...
- string::cbegin string::cend
const_iterator cbegin() const noexcept; const_iterator cend() const noexcept;注:返回常量迭代器,不能修改 #include ...
- new一个对象的过程
不用死记硬背,理解才是硬道理.只需要写个例子,然后输出看一下就清楚了 首先我们看下new Person输出什么? var Person = function(name, age) { this.nam ...
- vue-重要方法使用
标签属性router-link-exact-active: 当页面正在方位是触发router-link-exact-active 标签router-link to= 使用a标签页面就会跳转,就不是单页 ...
- 一个列表实现__iter__和__next__方法的例子
x = ['厉智','陈培昌','程劲','徐晓冬'].__iter__() #这非得这么写不可,否则无法调用下面的__next__()方法,切记! print(x.__next__()) print ...