5 YAML 资源编排

目录

1 K8S中的基本资源概念

1.1 K8S基本资源概述

1.2 Lable

1.3 Namespace

2 YAML 文件管理 K8S 资源对象

2.1 YAML 基本语法与字段介绍

2.2 YAML 部署应用

​2.3 注意事项

3 YAML文件自动生成


1 K8S中的基本资源概念

1.1 K8S基本资源概述

上面的案例中涉及到了一些基本的K8S资源,这里对它们进行简要的介绍,,本节的目的就是让我们对K8S中的资源有一个初步的认识,循序渐进。后续再分别进行详细介绍,比如:Deployment如何管理Pod?Service如何找到要代理的Pod?Label 标签的作用还有什么?等等内容。

  • Pod:K8s最小部署单元,一组容器的集合
  • Deployment:最常见的工作负载控制器,用于更高级别部署和管理Pod
  • Service:为一组Pod提供负载均衡,对外提供统一访问入口
  • Label :标签,附加到某个资源上,用于关联对象、查询和筛选
  • Namespaces:命名空间,将对象逻辑上隔离,也利于权限控制

其中,Pod、Deployment、Service这三个资源主要适用于创建和访问容器的,第2节案例中也主要是通过这三个资源进行应用程序的部署访问。所以接下来对 Lable 和 Namespace 稍微进行展开介绍:

1.2 Lable

Lable用于标注不同的资源,对这些资源进行分类,因为单一的通过资源名称的方式来分类资源的维度是不够用的。相关指令如下:

#查看pod时也查看pods的标签
kubectl get pods --show-labels
#查询标签对应的资源(查看标签名为nginx的pod)
kubectl get pods -l app=nginx

1.3 Namespace

Namespace用于在Kubernetes中将资源对象进行逻辑上的隔离,从而形成多个虚拟集群。

(1)应用场景

  • 根据不同团队划分命名空间
  • 根据项目划分命名空间

(2)命名空间的分类

通过如下指令,获取当前K8S集群下的命名空间:

kubectl get namespace

  • default:默认命名空间(部署应用时,如果不指定命名空间,该应用就会被指定到默认命名空间下)
  • kube-system:K8s系统方面的命名空间(比如K8S集群的网络组件calico、监控组件等就可以部署在该命名空间下)
  • kube-public:公开的命名空间,谁都可以访问
  • kube-node-lease:K8s内部命名空间

(3)指定资源命名空间的2种方式

  • 命令行加 -n
  • yaml资源元数据里指定 namespace 字段

2 YAML 文件管理 K8S 资源对象

2.1 YAML 基本语法与字段介绍

(1)基本语法

YAML文用于在K8S中编排和部署应用,将配置信息和操作过程进行了集中化的封装,更加方便。YAML文件基本语法如下:

  • 缩进表示层级关系,使用空格缩进(一般2个空格,字符后缩进1个空格),不支持Tab缩进
  • “-” 表示数组元素
  • “---” 表示YAML格式,一个文件的开始
  • “#”注释

(2)字段介绍

 字段名称                                                                   解释
apiVersionK8S-apiserver中的API版本,一般都是apps/v1,可查看K8S官网示例
kind资源类型(kubectl api-resources 指令可查看所有K8S资源类型,资源类型有很多,但是常用的只有30%) 
metadata资源元数据(name:资源的具体名字,namespace:该资源放到哪个命名空间下)
spec资源规格(包含:副本数量、标签选择器等)
replicas副本数量
selector标签选择器
templatePod模板
metadataPod元数据
specPod规格
containers容器配置

2.2 YAML 部署应用

步骤如下:

#在Matser节点下进行如下操作

#1、在~目录下创建文件
vi deployment.yaml

#2、编辑deployment资源的yaml文件,文件内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx2
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web2
  template:
    metadata:
      labels:
        app: web2
    spec:
      containers:
      - name: web2
        image: nginx:1.17


#3、部署deployment资源(创建Pod)
kubectl apply -f deployment.yaml

#上述YAML文件等同于:kubectl create deployment nginx2 --image=nginx:1.17 -n default

#4、在~目录下创建文件
vi service.yaml

#5、编辑service资源的yaml文件,文件内容如下:
apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: default
spec:
  ports:
  -port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web
  type: NodePort

#6、部署service资源(设置端口映射,让容器能被外部访问)
kubectl apply -f service.yaml

#上述YAML文件等同于:kubectl expose deployment web2 --port=80 --target-port=8080 --type=NodePort -n default

#7、查看刚创建好资源与服务
kubectl get pods
kubectl get svc

#8、访问
#http://192.168.200.211:32522/

资源部署好之后,查看资源如下图: 

访问应用如下图:

2.3 注意事项

(1)注意 create 指令和 apply指令的区别

create 指令用于在命令行初次创建某个资源,如果使用yaml文件创建资源,最好不用create指令,如下指令虽然能创建资源,但是没法更新

kubectl create -f deployment.yaml

 apply 指令用于通过yaml文件创建资源,也可用于资源的更新,如下

kubectl apply -f deployment.yaml

(2)yaml文件可以合并

上面 5.2 小节过程中分别创建了deployment.yaml、service.yaml两个配置文件,而这两个配置文件其实可以写到一个配置文件里面,两个文件之间用“---”隔开一行即可。这样只要执行一次apply指令就能把这两个资源同时部署到K8S集群之中。

3 YAML 文件自动生成

上面的yaml文件是手写的,然而yaml文件是可以自动生成的,有两种途径:

  • 方式1:在命令行中用 kubectl create 命令生成yaml文件
  • 方式2:用get命令将已有资源导出为yaml文件

(1)在命令行中用 kubectl create 命令生成yaml文件

#单纯的检查指令是否正确,不执行操作(--dry-run=client),并生成对应的yaml文件(-o yaml > deployment-export.yaml)
kubectl create deployment web --image=lizhenliang/java-demo -n default  --dry-run=client -o yaml > deployment-export.yaml

#删除多余的字段(删除最开始的 creationTimestamp和文件结尾的status字段后保存)
vi deployment-export.yaml

#用这个自动生成的yaml文件创建pod
kubectl apply -f deployment-export.yaml

#同理根据指令生成service资源的yaml配置文件(删掉最开始的 creationTimestamp和文件结尾的status字段后保存)
kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort -n default --dry-run=client -o yaml > service-export.yaml

(2)用get命令将已有资源导出为yaml文件

对所有资源都通用,便于观察K8S集群中部署了哪些资源,做了哪些事,但是yaml中的字段太多了

#先将yaml导出
kubectl get deployment nginx -o yaml > deployment-export2.yaml

#编辑yaml文件,删除managedFields、annotations、creationTimestamp、generation、resourceVersion、selfLink、uid、progressDeadlineSeconds、creationTimestamp、status整个字段(字段后的缩进内容也要删除)
vi deployment-export2.yaml

(3)yaml文件字段查询

如果你忘记了Pod容器的字段含义是什么,可以通过如下命令查询:

#查询pod资源下spec字段下containers字段下所有字段的含义
kubectl explain pods.spec.containers 

#查询deployment资源下各字段的详细信息
kubectl explain deployment

 (4)分析

kubectl命令行和yaml都能创建资源,如何决策?

  • 命令行创建资源:快捷方便,适用于简单的、一次性的项目部署
  • yaml创建资源:灵活性强,yaml文件能复用,适用于复杂项目部署
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值