【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)(二)

简介: 【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)(二)

二、k8s中的yaml


kubernetes支持YAML和JSON格式管理资源对象


JSON格式:主要用于api接口之间消息的传递


YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读


#查看资源配置清单
[root@master01 opt]# kubectl get deployment nginx -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2022-07-17T11:55:25Z"
  generation: 2
  labels:
    app: nginx
  managedFields:
  ......
 #解释资源配置清单
kubectl explain deployment.metadata
kubectl get service nginx -o yaml
kubectl explain service.metadata
#删除资源配置清单
#陈述式删除:
kubectl delete service nginx
#声明式删除:
kubectl delete -f nginx-svc.yaml


2.1 查看 api 资源版本标签

#查看每个资源的api版本号
三种方法
kubectl api-versions
kubectl api-resources 
kubectl explain deployment




2.2 yaml案例1

mkdir /opt/demo
cd demo/
vim nginx-deployment.yaml
apiVersion: apps/v1  #指定api版本标签
kind: Deployment  #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:     #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-deployment  #定义资源的名称,在同一个namespace空间中必须是唯一的
  labels:    #定义Deployment资源标签
    app: nginx
  namespace: test  #可以定义命令空间,但必须是存在的,不写就是默认命令空间
spec:     #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 3   #定义副本数量
  selector:    #定义标签选择器
    matchLabels:  #定义匹配标签
      app: nginx  #需与 .spec.template.metadata.labels 定义的标签保持一致
#以上是Deployment自己的配置及属性,以下是Deployment创建的pod的属性
  template:    #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:  #pod的元信息
      labels:           #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
        app: nginx
    spec:
      containers:    #定义容器属性
      - name: nginx    #定义一个容器名,一个 - name: 定义一个容器
        image: nginx:1.15.4  #定义容器使用的镜像以及版本
        ports:  #代表容器可以有两个端口
        - name: https
          containerPort: 443
        - name: http
          containerPort: 80  #定义容器的对外的端口


#创建service服务对外提供访问并测试
vim nginx-service.yaml
apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 80
    targetPort: 80  
  selector:
    app: nginx



此时在浏览器输入 nodeIP:nodePort 即可访问


http://192.168.109.133:32761/


http://192.168.109.132:32761/



2.3 yaml案例2

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-stevelu
  namespace: default
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: soscscs/myapp:v1
        ports:
        - name: http
          containerPort: 80



#定义service的yaml文件
vim demo1-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 31234
  selector:
    app: myapp


[root@master01 demo]# curl 10.96.222.48:8080
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>


2.4 yaml案例3

通过现有模板生成

#通过现有模板生成
kubectl get deployments.apps myapp-stevelu -o yaml > demo2.yaml
vim demo2.yaml 
#通过模板生成的yaml文件有很长一段我们将没有用的删掉,只留下有用信息
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp-stevelu
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: soscscs/myapp:v1
        name: myapp
        ports:
        - containerPort: 80
          name: http
          protocol: TCP


2.5 yaml案例4

根据陈述式命令导出一个yaml配置文件,俗称空跑,并不会正在生成deployment,再根据生成的yaml文件进行修改成自己想要的

[root@master01 demo]# kubectl create deploy myapp --image=soscscs/myapp:v1 --replicas=3 --dry-run=client -o yaml>demo3.yaml
[root@master01 demo]# ls
demo1-svc.yaml  demo1.yaml  demo2.yaml  demo3.yaml  nginx-deployment.yaml  nginx-service.yaml
[root@master01 demo]# vim demo3.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: soscscs/myapp:v1
        name: myapp


–dry-run=client的对象不是由apiserver验证的,只是由客户端验证


2.6 yaml案例5

资源类型:pod

资源名称:my-nginx

命名空间:test

容器镜像:nginx:1.14

容器端口:80

标签:app=nginx

创建Deployment资源,资源名称为nginx-deploy,命名空间为test,4个副本,nginx:1.14,镜像端口:80,标签:name=nginx-test1、service 关联上而创建的Pod,资源名称为nginx-deploy-sve

#根据陈述式命令导出一个配置文件
[root@master01 demo]# kubectl create -n test deployment nginx-deploy --image=nginx:1.14 --port=80 --replicas=4 --dry-run=client -oyaml >deploy.yaml
#创建test命名空间
[root@master01 demo]# kubectl create ns test
#根据需求修改
[root@master01 demo]# vim  deploy.yaml
apiVersion: apps/v1  #deployment版本号
kind: Deployment     #类型
metadata:            #资源的元信息
  labels:            #标签
    name: nginx-test1
  name: nginx-deploy  #资源名称
  namespace: test     #命名空间(一个命名空间下,同种类型下的资源名称是唯一的)
spec:                #下面设置资源属性
  replicas: 4        #副本数
  selector:          #标签选择器
    matchLabels:
      name: nginx-test1
  template:          #该控制器创建的pod副本的模板
    metadata:        #pod的元信息
      labels:        #pod的标签
        name: nginx-test1
    spec:            #pod的属性
      containers:    #容器的信息
      - image: nginx:1.14   #容器的信息
        name: nginx         #容器的名称
        ports:              #容器的端口
        - containerPort: 80
[root@master01 demo]# kubectl apply -f deploy.yaml 
deployment.apps/nginx-deploy created
#查看创建的资源
[root@master01 demo]# kubectl get all -n test
NAME                                READY   STATUS    RESTARTS   AGE
pod/nginx-deploy-5bbd7cdf77-69f7x   1/1     Running   0          4m39s
pod/nginx-deploy-5bbd7cdf77-8t6r8   1/1     Running   0          4m39s
pod/nginx-deploy-5bbd7cdf77-lx9vt   1/1     Running   0          4m39s
pod/nginx-deploy-5bbd7cdf77-znz5h   1/1     Running   0          4m39s
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deploy   4/4     4            4           4m39s
NAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deploy-5bbd7cdf77   4         4         4       4m39s


#生成service资源的yaml文件,并修改
[root@master01 demo]# kubectl expose -n test deployment nginx-deploy --port=80 --target-port=80 --type=NodePort --dry-run=client -oyaml
apiVersion: v1         #service的版本号
kind: Service
metadata:
  labels:
    name: nginx-test1
  name: nginx-deploy
  namespace: test
spec:
  ports:          #service端口号
  - port: 80      #clusterIP
    protocol: TCP #端口协议
    targetPort: 80  #跟容器端口的对应关系
    nodePort: 31111  #nodeip的端口号
  selector:    #标签选择器
    name: nginx-test1
  type: NodePort   #service的类型
#将上面修改后的service资源写入文件
[root@master01 demo]# vim deploy-svc.yaml
[root@master01 demo]# kubectl apply -f deploy-svc.yaml 
service/nginx-deploy created
#查看service详细信息
[root@master01 demo]# kubectl describe svc -n test
Name:                     nginx-deploy
Namespace:                test
Labels:                   name=nginx-test1
Annotations:              <none>
Selector:                 name=nginx-test1
Type:                     NodePort
IP Families:              <none>
IP:                       10.96.77.82
IPs:                      10.96.77.82
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31111/TCP
Endpoints:                10.244.1.26:80,10.244.1.
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>



总结


编写service配置清单方法

1.根据现有的文件输出一个yaml格式的配置文件,再修改


2.根据陈述式命令导出一个配置文件(空跑)

kubectl create deploy myapp --image=soscscs/myapp:v1 --replicas=3 --dry-run=client -o json>demo4.yaml
kukectl run my=nginx --image=nginx:1.14 --port=80 --dry-run=client -oyaml > pod -my-nginx.yaml

3.从头到尾自己编写


查看某个资源对应的版本号

#法一
kubectl api-versions
#法二
kubectl api-resources
#法三
kubectl explain [资源名称]


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
Kubernetes 安全 网络协议
Kubernetes实用指令:通过dry-run生成部署与服务的YAML配置
总结起来, 使用 ` -- dry—run = client `- o yam l' 参数能够帮助用户预览 Kubernetes 资源定义并且确保它们符合预期效果且没有立即影响现有集群断层结构. 这种做法对于新手学习 K8s 资源规范、测试新策略或者审核现有策略都非常有效率与安全.
314 4
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
517 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
386 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
5月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
512 16
|
5月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
|
9月前
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
3月前
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
833 0