Kubernetes集群的学习笔记(3)
k8s笔记YAML格式定义资源。
通过YAML定义Pods
apiVersion
kubectl api-versions
查看所有可用的组名
apiVersion:[Group/Version]
Kind 资源类别
Metadata 元数据
- name: uniq Key
- namespace
- labels Key-Value
- annotations
- SelfLink: 资源引用的链接API格式:/api/group/verison/namespaces/namespace/type/name
Spec
kubectl explain pods.spec
可使用命令查看:定义用户期望的目标状态。
Status
自动维护即可 ,不需要更改。
简单的YAML实例
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
version: v1
spec:
containers:
- name: app
image: nginx
- name: php-fpm
image: php-fpm
对Pods进行标签操作
查看标签
kubectl get pods –show-labels
kubectl get pods -l LABEL_NAME –show-labels增加标签
kubectl label pods pod-demo KEY VALUE修改标签
kubectl label pods pod-demo KEY VALUE –overwirte指定selector选择标签 - 等值关系, 集合关系的标签选择器。
kubectl get pods -l release=stable
kubectl get pods -l release!=stable
kubectl get pods -l “release in (v1, v2, v3)”
kubectl get pods -l “release notin (v1, v2, v3)”许多资源支持内嵌字段,matchLabels(直接给定键值) , matchExporession(基于给出的表达式进行选择)。常用的操作符号,In ; Notin ; Exists;NotExists;
Pod的生命周期
- 初始化容器init c(初始化主容器的执行环境),可以有多个,串行执行,直到最后一个init c执行结束。
- main c在所有的初始化完成之后开始启动,在容器的运行时间与main c的执行时间基本一致;main c刚刚启动之后,可以手动执行Poststart;结束之前可以进行Prestop;
- 在Pod运行的过程中,提供Pod的Liveness probe; 提供Pod的Readiness probe。
常见的Pod状态:
- Pending: 挂起,调度尚未完成;
- Running: 运行状态;
- Failed: 失败;
- Succeeded: 成功;
- Unknown: kubelet失去联络或者无法获取Pod信息时;
创建Pod的阶段:
- 创建提交请求给API server,目标状态保存到etcd;
- API Server 请求 Schduler 进行Pod的调度;
- API取得Pod的调度结果后,将信息记录到etcd;
- Node节点获取到API server上的Pod状态更新后,开始按照调度的信息进行Pod的建立。
Pod生命周期中的重要行为:
- 初始化容器: init container ;
- 容器探测: liveness ,readiness;
容器的重启策略: restartPolicy
Always, OnFailure, Never; 三种策略中默认的设置时Always.
Pod的终止过程:
- 发送term信号, 默认等待30s,如果30s还未终止就强制终止。
存活检测
可通过三种类型进行探测: ExecAction, TCPSocketAction, HTTPGetAction;