K8S中的资源(主要讲解POD资源)

k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象。

一、对象类型介绍:
工作负载型资源对象(workload):POD,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob ...
服务发现及均衡资源对象:Service,Ingress ...
配置与存储资源对象:Volume(存储卷),CSI(容器存储接口,可以扩展各种各样的第三方存储卷),ConfigMap,Secret,DownwardAPI
集群级资源:Namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding
元数据型资源:HPA,PodTemplate,LimitRange

二、资源清单

1、查看资源清单:

kubectl get pod name -o yaml
Pod资源清单查看.png

2、资源清单简介:
Apiserver仅接收JSON格式的资源定义(一般使用yaml格式提供配置清单apiserver可自动将其转为json格式,而后再提交),大部分资源的配置清单都由五个一级字段组成:

  1. apiVersion: group/apiversion
    如果没有给定group名称,那么默认为croe,可以使用kubectl api-versions 获取当前k8s版本上所有的apiVersion版本信息(每个版本可能不同)
    查看:
kubectl api-versions
查看apiVersion.png
  1. kind:资源类别

  2. metadata:资源元数据
    name:(metadata中的name字段在同一类型中必须是唯一的)
    namespace:命名空间
    labels:标签(键值数据)
    annotations:资源注解

  3. spec:资源期望的状态

  4. status:当前状态,该字段由k8s集群维护,用户不能对其进行修改。

其中spec重点介绍一下:
spec.containers.name : pod的名称,必须字段,名称唯一且对象创建后不可以被修改
spec.containers.image :镜像仓库的路径/镜像的名称( 镜像的标签 )
spec.containers.image.imagePullPolicy :镜像下载策略( Always:总是去仓库下载;Never:从不去仓库下载;IfNotPresent:如果本地没有就
去仓库下载。默认是"IfNotPresent" 但是,如果镜像的标签是latest,则总会是"Always,并且对象一旦被创建,这个字段不允许被改变)
spec.containers.ports:容器公开的端口列表。在这里公开端口可以为系统提供关于容器使用的网络连接的额外信息,但主要是提供信息。在这
里不指定端口不会阻止该端口被公开。任何监听容器内默认的“0.0.0.0”地址的端口都可以从网络访问
spec.containers.ports.containerPort:暴露的端口,此端口仅是额外的信息,对端口是否被暴露没有影响
spec.containers.ports.hostPort:主机上公开的端口
spec.containers.ports.protocol:端口的协议
spec.containers.ports.hostIP:指定要绑定的主机
spec.containers.command:运行的程序,类似于docker中的entrypiont,并且这里的命令不会运行在shell中,如果没有这个字段docker镜像会
运行自己entrypiont中的指令
spec.containers.args:向docker镜像中传递参数 如果定义了这个字段,docker镜像中cmd命令不会被执行,如果引用变量使
用$(VAR_NAME)格式引用,如果想使用命令引用的的方式,需要使用$$(VAR_NAME)方式来引用
spec.containers.volumeMounts.mountPath:可以被容器挂载的存储卷的路径,路径不能包含':' 符号
spec.containers.volumeMounts.subPath:可以被容器挂载的存储卷的路径,并且不会覆盖挂载点中的文件
spec.containers.volumeMounts.readOnly:是否只读,默认为false
spec.containers.resources.limits:资源限制
spec.containers.resources.limits.cpu :CPU 上限, 可以短暂超过, 容器也不会被停止
spec.containers.resources.limits.memory:内存上限, 不可以超过; 如果超过, 容器可能会被终止或调度到其他资源充足的机器上
spec.containers.resources.requests:资源需求
spec.containers.resources.requests.cpu:CPU 请求, 也是调度 CPU 资源的依据, 可以超过
spec.containers.resources.requests.memory:内存请求, 也是调度内存资源的依据, 可以超过; 但如果超过, 容器可能会在 Node
内存不足时清理。
spec.nodeSelector:指定对象的调度节点,节点必须存在。
spec.restartPolicy:容器的重启策略。有三种Always(只要退出就重启),OnFailure(状态为错误时重启),Never(从不重启),kubelet重新启动的已退出容器将以指数退避延迟(10秒,20秒,40秒......)重新启动,上限为五分钟,并在成功执行十分钟后重置

3、创建资源配置清单:


创建配置文件.png

配置清单内容.png

通过资源配置清单创建POD

kubectl create -f /test-list/lyq-pod-test.yaml
创建pod.png

获取pod信息:

pod信息.png

对与配置清单创建的POD我们可以这样进行删除

kubectl delete -f /test-list/lyq-pod-test.yaml
删除pod.png

4、错误处理
有时创建的Pod可能会出现问题:


Pod问题.png

这时,我们可以使用 kubectl logs name,来查询问题原因


错误日志.png

如果我们需要进入pod进行排错,我们可以使用(比如进入nginx)

kubectl exec -it lyq-pod-test -c nginx -- bin/sh

三、POD标签
我们可以使用命令给Pod资源打上标签,方便使用:Kubectl label pods pod名字 标签
如:

kubectl  label  pods  lyq-pod  release=canary

通过标签我们可以是实现对POD资源的查询:
1、kubectl get pods -l release=canary 查询release标签等于canary的Pod
2、kubectl get pods -l release,app 查询有release标签和app标签的Pod
3、kubectl get pods -l “release in (canary,beta,alpha)” 查询release标签等于"canary"或"beta"或"alpha"的Pod
4、kubectl get pods -l “release notin (canary,beta,alpha)” 查询release标签不为"canary"或"beta"或"alpha"的Pod

四、POD的生命周期中的重要行为及常见状态
Pod的生命周期中主要有以下两个比较重要的行为:
1、使用初始化容器完成初始化
2、容器探测(liveness:探测容器是否处于存活状态;readiness:探测容器中程序是否能正常提供服务)

探针的类型主要分为以下两种:
1、存活性探针:针对liveness
2、就绪性探针:针对readiness

存活性探针:

apiVersion: v1
kind: Pod
metadata:
  name: liveness-httpget-pod
spec:
  containers:
  - name: liveness-httpget-pod
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    livenessProbe:
      httpGet:
        port: 80
        path: /index.html
      initialDelaySeconds: 2
      periodSeconds: 5

就绪性探针:

apiVersion: v1
kind: Pod
metadata:
  name: readiness-httpget-pod
spec:
  containers:
  - name: readiness-httpget-pod
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    readinessProbe:  
      httpGet:
        port: 80
        path: /index.html
      initialDelaySeconds: 2
      periodSeconds: 5

常见的POD状态:
Pending: 挂起(POD已创建但是没有适合运行的节点)
Running:运行中
Failed:失败

参考资料:

《每天5分钟玩转Kubernetes》

《黑马k8s集群技术》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容