apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # 告知运行2个与该模板匹配的Pod
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
images: nginx:1.14.2
ports:
- containerPort: 80
必须字段
- apiVersion 版本
- kind 类别
- metadata 标识
- spec 期望的对象状态
开始或者在集群中运行一次性任务的推荐方法。因为这个技术直接在活跃对象上操作,所以它不提供以前配置的历史记录
kubectl create deployment nginx --image nginx
创建配置文件中定义的对象
kubectl create -f nginx.yaml
删除两个配置文件中定义的对象
kubectl delete -f nginx.yaml -f redis.yaml
通过覆盖活动配置来更新配置文件中定义的对象
kubectl replace -f nginx.yaml
处理configs目录中的所有对象配置文件,创建并更新活跃对象。可以首先使用diff子命令查看将要进行的更改,然后再进行应用
kubectl diff -f configs/
kubectl apply -f configs/
递归处理目录
kubectl diff -R -f congigs/
kubectl apply -R -f configs/
集群中的每个对象都有一个名称来标识在同类资源中的唯一性,UID是系统生成的
标签(Lables)是附加到kubernetes对象(比如Pod)上的键值对。每个对象都可以定义一组键值标签
"metadata":{
"lables":{
"key1":"value1",
"key2":"value2"
}
}
标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的。应该使用注解记录非识别信息
与名称和UID不同,标签不支持唯一性
通过标签选择算符,客户端/用户可以识别一组对象。
kubectl get pods -l environment=production,tier=frontend
你可以使用 Kubernetes 注解为对象附加任意的非标识的元数据。客户端程序(例如工具和库)能够获取这些元数据信息。
"metadata": {
"annotations": {
"key1" : "value1",
"key2" : "value2"
}
}
Map 中的键和值必须是字符串。 换句话说,你不能使用数字、布尔值、列表或其他类型的键或值。
apiVersion: v1
kind: Pod
metadata:
name: annotations-demo
annotations:
imageregistry: "https://hub.docker.com/" # 注解
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
- metadata.name=my-service
- metadata.namespace!=default
- status.phase=Pending
Finalizer 是带有命名空间的键,告诉 Kubernetes 等到特定的条件被满足后, 再完全删除被标记为删除的资源。 Finalizer 提醒控制器清理被删除的对象拥有的资源。
标签
# 这是一段节选
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
# 应用程序的名称
app.kubernetes.io/name: mysql
# 用于唯一确定应用实例的名称
app.kubernetes.io/instance: mysql-abcxzy
# 应用程序的当前版本
app.kubernetes.io/version: "5.7.21"
# 架构中的组件
app.kubernetes.io/component: database
# 此级别的更高级别应用程序的名称
app.kubernetes.io/part-of: wordpress
# 用于管理应用程序的工具
app.kubernetes.io/managed-by: helm