声明式对象配置
云原生的代表技术:
- 容器
- 服务网格
- 微服务
- 不可变基础设施
- 声明式
API
K8s
管理方式:
- 命令式. 使用
kubectl
来发起命令. - 声明式. 使用
yaml
文件来进行配置.
命令行简单高效, 但对于可重复的复杂编排命令就不那么方便了. 使用 yaml
可以很容易的进行编排定义.
常用缩写命令:
Yaml
规范
逻辑上与 XML
, JSON
一样. 只是语法形式不同.
- 缩进代表上下级关系. 缩进不允许使用
tab
, 一般使用 2 个空格. :
表示键值对, 后面必须有空格.-
是列表, 后边必须有空格.[]
表示数组.#
是注释.|
是多行文本块.---
表示文档的开始, 用于分割多个资源对象.
基本要求:
- 会修改
- 能看懂
对于创建在 Kubernetes
文档中会有示例. 一般一个配置对象包含:
apiVersion
- 用于描述Kubernetes API
版本.kind
- 用于描述对象类别, 例如:Pod
,Deployment
,Service
, 和ReplicaSet
等.metadata
- 用于描述对象元数据, 包括name
,UID
, 以及namespace
等.spec
- 对象的具体配置. 每一个对象的配置可能不同.
例如: 使用 Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
所以还是要看官方文档.
使用 yaml
文件
使用 yaml
来创建服务使用 apply
子命令
kubectl apply -f <yaml配置文件>
删除可以使用 delete
子命令 加 -f
参数指定 yaml
文件.
kubectl delete -f <yaml配置文件>
标签 (Label
)
也是 K8s
中的重要对象.
label
用于补充对象的描述信息. 一般用于在搜索指定的对象. 例如创建服务时, 过滤一组 Pod
作为后端服务
标签语法
- 字符长度不允许超过 63
- 由
[a-zA-Z0-9]
的字符构成 - 特殊字符仅有:
-
,_
, 和.
可用
例如:
apiVersion: v1
kind: Pod
metadata:
name: label-demo
labels:
environment: production
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
这里为 Pod
定义了两个标签
environment
:production
app
:nginx
用法
可以为 Pod
打上标签, 在创建服务的时候, 通过指定标签选择器, 找到 Pod
作为服务背后的资源.
首先, 使用上述 yaml
创建服务.
可以使用 kubectl describe pod my-pod2
来查看详情:
然后创建 my-service.yaml
, 使用下面配置
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30007
然后应用:
从描述可以看到后端端点只有一个. 也可以使用下面命令查看:
kubectl get pod -l "app=nginx" -owide
这里 -l
是指标签过滤器.
标签选择语法
标签选择语法有两种
- 基于等值判断
- 基于集合判断
等值判断如前面示例, 直接写即可.
基于集合的示例为: