k8s资源清单定义入门
k8s的核心资源
workload型资源
- Pod
- ReplicaSet
- Deployment
- StatefulSet
- DaemonSet
- Job
- Cronjob
服务发现及负载均衡型资源
- Service
- ingress
配置与存储相关的资源
-
存储卷Volume
- 云端存储
- 亚马逊弹性块存储
- SAN
- GlusterFS(分布式存储)
- NFS
-
容器存储接口CSI
-
ConfgMap(配置中心)
-
Secret(保存敏感信息)
-
DovwnwardAPI(将外部环境的信息输出给容器)
集群级资源
- Nampspace
- Node
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
元数据型资源
HPA PodTemplate(用于让控制器创建Pod时使用的模板) LlmitRange
创建资源的方式
使用命令进行创建
使用命令式资源清单创建
apiserver仅接收json格式的资源定义
使用yaml格式提供配置清单,apiserver可自动将其转为json格式并执行
使用声明式资源清单创建
可以确保资源尽可能向声明的状态靠近,并且可以随时改变声明、随时应用新的声明
kind
metadata
name(同一类别下惟一)
namespace
labels
annotations
每个资源的引用PATH(/api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME)
spec(期望的状态)
status
当前的状态,本字段由kubenetes集群维护,用户无法定义和更改
kubectl explain pods
执行kubectl explain pods可以查看pod资源的配置清单应有哪些参数、如何定义等等
kubectl explain pods.metadata
执行kubectl explain pods.metadata可以查看pods的metadata参数如何配置
定义一个基于YAML格式的配置
[root@master manifest]# cat deploy.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: jjyy
---
apiVersion: apps/v1 #api版本
kind: Deployment #资源类型
metadata: #元数据定义
name: web #名称
namespace: jjyy #名称空间
spec: #deployment定义
replicas: 3 #定义2个副本
selector: #标签选择器,匹配pod的标签
matchLabels:
app: httpd-web
template: #pod模板定义
metadata:
labels: #这里的标签必须和标签选择器的一致
app: httpd-web
spec: #pod内的容器定义
containers:
- name: web
image: aimmi/httpd:v0.2
---
apiVersion: v1
kind: Service
metadata:
name: web
namespace: jjyy
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 80 #容器端口
selector:
app: httpd-web
type: NodePort
[root@master ~]# kubectl apply -f manifest/deploy.yaml
namespace/jjyy created
deployment.apps/web created
service/web created
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 3d6h
jjyy Active 16s
kube-node-lease Active 3d6h
kube-public Active 3d6h
kube-system Active 3d6h
[root@master ~]# kubectl get pods -n jjyy
NAME READY STATUS RESTARTS AGE
web-5dbdf86b79-jr8nf 0/1 Running 0 44s
web-5dbdf86b79-wbs7v 0/1 Running 0 44s
web-5dbdf86b79-wf2bt 0/1 Running 0 44s
[root@master ~]# kubectl get svc -n jjyy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web NodePort 10.101.215.246 <none> 8080:30033/TCP 83s
[root@master ~]# kubectl get deploy -n jjyy
NAME READY UP-TO-DATE AVAILABLE AGE
web 3/3 3 0 117s
[root@master ~]# curl 10.101.215.246:8080
test page on 666
[root@master ~]# kubectl delete -f manifest/deploy.yaml
namespace "jjyy" deleted
deployment.apps "web" deleted
service "web" deleted
[root@master ~]# kubectl get pods -n jjyy
No resources found in jjyy namespace.
[root@master ~]# kubectl get svc -n jjyy
No resources found in jjyy namespace.
[root@master ~]# kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml
[root@master ~]# kubectl get deployment nginx -o yaml > my-deploy.yaml
[root@master ~]# kubectl explain pods.pec.containers
[root@master ~]# kubectl explain deployment