4. kubernetes資源清單定義
[TOC]
本文基于馬哥的docker和k8s視頻總結, 在此致謝馬哥.
RESTful風格的API:
- GET, PUT, DELETE, POST, ...
- kubectl run, get, edit, ...
資源: 都視為對象
- workload (工作負載性資源): Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob, ...
- 服務發(fā)現(xiàn)及均衡: 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
創(chuàng)建資源的方法:
- apiserver只接受
JSON
格式的資源定義 - yaml格式提供配置清單, apiserver可自動將其轉為json格式, 然后再提交
大部分資源的配置清單 (5個一級字段):
-
(1) apiVersion:
group/version
, 指明創(chuàng)建的資源屬于哪個群組和版本kubectl api-versions
(2) kind: 資源類別, 如pod, deployment等
-
(3) matadata: 元數據
name
namespace
labels
-
annotations (資源注解)
每個資源的引用PATH:
/api/GROUP/VERSION/namespaces/NAMESPACES/TYPE/NAME
(4) spec: 最重要的字段, 定義用戶期望的狀態(tài), disired state
(5) status: 當前資源的狀態(tài), current state, 本字段由kubernetes集群維護, 用戶無法定義, (此狀態(tài)會向spec指定的狀態(tài)靠近)
類型 | 解釋 | 舉例 |
---|---|---|
string | 字符串 | 字符串 |
[]string | 字符串列表 | 需要填寫字符串類型的數組 |
map[string]string | 視圖字符串 | 需要有眾多k: v類型的數據 |
Object | 對象 | 說明有需要嵌套的下一級字段 |
[]Object | 對象列表 | 說明可以有多個需要嵌套的下一級字段 |
- required - | 必填項 | 當出現(xiàn)這個的時候挣跋,此項參數必須要填寫 |
使用資源配置清單創(chuàng)建資源
# 查看某個資源應該如何定義, 如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 # 創(chuàng)建的第一個容器的容器名
image: nginx:1.14-alpine # 容器所使用的鏡像
ports: # 暴露端口
- name: http
containerPort: 80
- name: https
containerPort: 443
- name: busybox # 創(chuàng)建的第二個容器的容器名
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