关于如何使用好yaml文件,了解组成部分以后,恐怕最好的熟练方式就是多写多用了。
一,yaml组成
一般分三个部分:
1,第一部分是apiversion版本
2,资源种类kind。说明要创建的资源是一个什么类型的资源。
3,对象元数据的声明。对上述资源的meta对象元数据,包含对象名称name,标签labels,命名空间namespace等。
4,具体对象的规格spec。
规格比较重要,也是内容比较繁多的,比如rs版本数量,labels,选择器,image,端口信息,资源limit,重启策略,dns指定等等
二,配置文件技巧说明
1,定义配置时,指定最新稳定版API;API版本可以通过命令kubectl api-versions查看到
2,配置文件应该存储在集群之外的版本控制仓库中。如果需要,可以快速回滚配置、重新创建和恢复;例如git。
3,该使用YAML格式编写配置文件,而不是JSON。尽管这些格式都可以使用,但YAML对用户更加友好;
命令kubectl get pod [pod name] -o yaml可以看到yaml化的pod编排内容;手工搞一个resource,我们可以加参数–export
kubectl get deploy nginx --export -o yaml > nginx-pod.yaml
对nginx-pod.yaml进行文件编辑,可以实现一个旧resource的更新或新resource的创建。
4,可以将相关对象组合成单个文件,通常会更容易管理; 不同对应通过三个短横线进行间隔。
5,不要没必要的指定默认值,简单和最小配置减少错误。 尤其是默认值,不建议写上,弄的文件很大,可读性很繁琐。
6,在注释中说明一个对象描述更好维护,增强可读性。 和shell一样,# 表示注释。
案例:
1,创建nginx-deployment.yaml来编排nginx服务:
文件内容
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace:default labels: app:nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.10 ports: - containerPort: 80
解释
apiVersion: apps/v1:指定了api的版本,是通过kubectl api-versions命令列出的。
kind: Deployment:指定资源类型
metadata:
name: nginx-deployment
namespace:default
labels:
app:nginx
源数据部分,name指定了资源的名称,namespace指定了命令空间(默认为default可以不指定),labels指定标签
规格部分如下:
spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.10 ports: - containerPort: 80
控制器和容器的选项:
replicas指定了副本数;
selector表示选择器,matchLabels表示控制器匹配pod的标签。
template:指定了创建pod的参数,其中metadata是元数据。spec是容器的选项,containers定义容器参数,name指定容器名称,image指定使用的镜像,containerPort指定容器端口。
2,服务发布文件
还需要创建一个nginx-service.yaml文件来发布服务(当然这两个文件也可以合并为一个文件)
[root@master01 test]# cat test_svc.yaml apiVersion: v1 kind: Service metadata: name: test-service spec: ports: - port: 90 targetPort: 80 selector: app: nginx1.10
3,通过kubectl create -fYAML文件创建资源
通过命令kubectl create -f nginx-deployment.yaml 来创建资源deploy以及kubectl create -f test-service.yaml 来创建service。
[root@master01 test]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.254.0.1 443/TCP 20d nginx-service NodePort 10.254.218.227 80:30680/TCP 4d5h test-service ClusterIP 10.254.84.227 90/TCP 8m56s
这样,可以从集群内部就可以使用 curl 10.254.84.227:90 来访问发布的资源了。
文章转载于https://blog.csdn.net/sinat_35930259/article/details/80069291 并针对愿文章做了一部分修改。
转载请注明:21运维 » kubenetes 通过YAML配置文件管理资源使用技巧