【云原生 | 从零开始学Kubernetes】四、Kubernetes之YAML文件详解

简介: k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML 格式文件中,我们把这种文件叫做资源清单文件,通过kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。一般在我们开发的时候,都是通过配置YAML文件来部署集群的。

概述


k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML 格式文件中,我们把这种文件叫做资源清单文件,通过kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。一般在我们开发的时候,都是通过配置YAML文件来部署集群的。


YAML文件:就是资源清单文件,用于资源编排


YAML文件介绍


YAML概述


YAML :仍是一种标记语言。为了强调这种语言以数据做为中心,而不是以标记语言为重点。


YAML 是一个可读性高,用来表达数据序列的格式。


YAML 基本语法


·使用空格做为缩进


·缩进的空格数目不重要,只要相同层级的元素左侧对齐即可


·低版本缩进时不允许使用Tab 键,只允许使用空格


·使用#标识注释,从这个字符一直到行尾,都会被解释器忽略


·使用 — 表示新的yaml文件开始


YAML 支持的数据结构


纯量


单个的、不可再分的值,也就是指的一个简单的值,字符串、布尔值、整数、浮点数、Null、时间、日期。


# 1 布尔类型
c1: true (或者True)
# 2 整型
c2: 234
# 3 浮点型
c3: 3.14
# 4 null类型 
c4: ~  # 使用~表示null
# 5 日期类型
c5: 2018-02-17    # 日期必须使用ISO 8601格式,即yyyy-MM-dd
# 6 时间类型
c6: 2018-02-17T15:02:31+08:00  # 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
# 7 字符串类型
c7: heima     # 简单写法,直接写值 , 如果字符串中间有特殊字符,必须使用双引号或者单引号包裹 
c8: line1
    line2     # 字符串过多的情况可以拆成多行,每一行会被转化成一个空格


对象


键值对的集合,又称为映射(mapping) / 哈希(hashes) / 字典(dictionary)


# 对象
# 形式一(推荐)一组键值对,使用冒号结构表示:
paopao:
  name: csdn
  address: Beijing
# 形式二(了解)将所有键值对写成一个行内对象:
paopao: {name: csdn,address: Beijing}


数组


# 数组
# 形式一(推荐):
address:
  - 河北
  - 保定  
# 形式二(了解):
address: [河北,保定]


YAML文件组成部分


主要分为了两部分,一个是控制器的定义和被控制的对象


属性说明


在一个YAML文件的控制器定义中,有很多属性名称


属性名称

介绍

apiVersion

API版本

kind

资源类型

metadata

资源元数据

spec

资源规格

replicas

副本数量

selector

标签选择器

template

Pod模板

metadata

Pod元数据

spec

Pod规格

containers

容器配置


如何快速编写YAML文件


一般来说,我们很少自己手写YAML文件,因为这里面涉及到了很多内容,我们一般都会借助工具来创建


使用kubectl create命令


这种方式一般用于资源没有部署的时候,我们可以直接创建一个YAML配置文件


# 尝试运行,并不会真正的创建镜像
kubectl create deployment web --image=nginx -o yaml --dry-run(这个是尝试运行,yaml文件展示出来,并不是真运行)


或者我们可以输出到一个文件中kubectl create deployment web --image=nginx -o yaml --dry-run > hello.yaml


然后我们就在文件中直接修改即可


使用kubectl get命令导出yaml文件


可以首先查看一个目前已经部署的镜像kubectl get deploy


111.png


然后我们导出 nginx的配置kubectl get deploy nginx -o=yaml --export > nginx.yaml然后会生成一个 nginx.yaml 的配置文件


30.png


命令式对象配置


命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。


创建一个nginx.yml,内容如下:


apiVersion: v1
kind: Namespace
metadata:
  name: paopao
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: paopao
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest


执行create命令,创建资源:


[root@k8smaster ~]# kubectl create -f nginx.yml
namespace/paopao created
pod/nginx created


此时发现创建了两个资源对象,分别是namespace和pod


执行get命令,查看资源:


[root@k8smaster ~]# kubectl get -f nginx.yml
NAME               STATUS   AGE
namespace/paopao   Active   18s
NAME         READY   STATUS    RESTARTS   AGE
pod/nginx    1/1     Running   0          17s


执行delete命令,删除资源:


[root@master ~]# kubectl delete -f nginx.yml
namespace "paopao" deleted
pod "nginx" deleted


此时发现两个资源对象被删除了。


命令式对象配置的方式操作资源,可以简单的认为:命令 + yaml配置文件(里面是命令需要的各种参数)


声明式对象配置


声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。


# 首先执行一次kubectl apply -f yaml文件,发现创建了资源
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
# 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged


其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)


使用apply操作资源:如果资源不存在,就创建,相当于 kubectl create


如果资源已存在,就更新,相当于 kubectl patch


node节点如何使用kubectl


kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube,如果想要在node节点运行此命令,需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作


# 方式一
scp -r ~/.kube node1:~/
# 方式二
scp  -r  HOME/.kube   node1: HOME/


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
23天前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
79 38
|
6天前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
21 10
|
3月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
203 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
4月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
4月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
4月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
4月前
|
Kubernetes 负载均衡 Cloud Native
探索Kubernetes:云原生应用的基石
探索Kubernetes:云原生应用的基石
|
4月前
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。
|
3月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
3月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。

热门文章

最新文章