4. kubernetes资源清单定义
[TOC]
本文基于马哥的docker和k8s视频总结, 在此致谢马哥.
RESTful风格的API:
- GET, PUT, DELETE, POST, ...
- kubectl run, get, edit, ...
资源: 都视为对象
- workload (工作负载性资源): Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob, ...
- 服务发现及均衡: Service, Ingress, ...
- 配置与存储相关的资源: Volume, CSI
- ConfigMap, Secret
- DownwardAPI
- 集群级资源
- Namespace, Node, Role, ClusterRole, RoleBinding, ClusterRoleBinding
- 元数据型资源:
- HPA, PodTemplate, LimitRange
# 获取yaml格式的资源详细信息
kubectl get pods nginx-deploy-7689897d8d-pj5bm -o yaml
创建资源的方法:
- apiserver只接受
JSON
格式的资源定义 - yaml格式提供配置清单, apiserver可自动将其转为json格式, 然后再提交
大部分资源的配置清单 (5个一级字段):
-
(1) apiVersion:
group/version
, 指明创建的资源属于哪个群组和版本kubectl api-versions
(2) kind: 资源类别, 如pod, deployment等
-
(3) matadata: 元数据
name
namespace
labels
-
annotations (资源注解)
每个资源的引用PATH:
/api/GROUP/VERSION/namespaces/NAMESPACES/TYPE/NAME
(4) spec: 最重要的字段, 定义用户期望的状态, disired state
(5) status: 当前资源的状态, current state, 本字段由kubernetes集群维护, 用户无法定义, (此状态会向spec指定的状态靠近)
类型 | 解释 | 举例 |
---|---|---|
string | 字符串 | 字符串 |
[]string | 字符串列表 | 需要填写字符串类型的数组 |
map[string]string | 视图字符串 | 需要有众多k: v类型的数据 |
Object | 对象 | 说明有需要嵌套的下一级字段 |
[]Object | 对象列表 | 说明可以有多个需要嵌套的下一级字段 |
- required - | 必填项 | 当出现这个的时候,此项参数必须要填写 |
使用资源配置清单创建资源
# 查看某个资源应该如何定义, 如pods
kubectl explain pods[.metadata]
# -required- 必选字段, 不可省略
# 示例, 特别注意大小写!
vi pods-demo.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp # 创建的第一个容器的容器名
image: nginx:1.14-alpine # 容器所使用的镜像
ports: # 暴露端口
- name: http
containerPort: 80
- name: https
containerPort: 443
- name: busybox # 创建的第二个容器的容器名
image: busybox:latest
imagePullPolicy: IfNotPresent
command: # 修改容器启动时使用的默认命令
- "/bin/sh"
- "-c"
- "sleep 3600"
kubectl create -f pod-demo.yml
kubectl get pods
kubectl describe pods pod-demo # 先指明资源类型, 再指明资源名称
# 查看日志, 用于排错
kubectl logs pod-demo myapp
kubectl logs pod-demo busybox
# 终端访问pod
kubectl exec -it pod-demo -c myapp -- /bin/sh
# 删除某文件定义的资源
kubectl delete -f pod-demo.yml