玩转k8s:yaml介绍

一.Yaml文件详解

1.Yaml文件格式

(1)Kubernetes 支持 YAML 和 JSON 格式管理资源对象

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

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

2.YAML 语法格式

(1)大小写敏感

(2)使用缩进表示层级关系

(3)不支持Tab键制表符缩进,只使用空格缩进

(4)缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格

(5)符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等

(6)"---"表示YAML格式,一个文件的开始,用于分隔文件间

(7)"#"表示注释

二.Yaml文件编写及相关概念

1.查看 api 资源版本标签

复制代码
kubectl api-versions

[root@k8s-master-136 ~]# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
crd.projectcalico.org/v1
discovery.k8s.io/v1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
extensions/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

2.yaml编写案例

复制代码
#查看deployment的版本定义
kubectl explain deployment

[root@k8s-master-136 ~]# kubectl explain deployment
KIND:     Deployment
VERSION:  apps/v1

DESCRIPTION:
     Deployment enables declarative updates for Pods and ReplicaSets.

FIELDS:
   apiVersion   <string>
     APIVersion defines the versioned schema of this representation of an
     object. Servers should convert recognized schemas to the latest internal
     value, and may reject unrecognized values. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

   kind <string>
     Kind is a string value representing the REST resource this object
     represents. Servers may infer this from the endpoint the client submits
     requests to. Cannot be updated. In CamelCase. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

   metadata     <Object>
     Standard object metadata.

   spec <Object>
     Specification of the desired behavior of the Deployment.

   status       <Object>
     Most recently observed status of the Deployment.

#查看api的版本
kubectl explain deployment.apiVersion

[root@k8s-master-136 ~]# kubectl explain deployment.apiVersion
KIND:     Deployment
VERSION:  apps/v1

FIELD:    apiVersion <string>

DESCRIPTION:
     APIVersion defines the versioned schema of this representation of an
     object. Servers should convert recognized schemas to the latest internal
     value, and may reject unrecognized values. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

#查看元数据信息
kubectl explain deployment.apiVersion

#定义标签介绍
kubectl explain deployment.spec.selector

[root@k8s-master-136 ~]# kubectl explain deployment.spec.selector
KIND:     Deployment
VERSION:  apps/v1

RESOURCE: selector <Object>

DESCRIPTION:
     Label selector for pods. Existing ReplicaSets whose pods are selected by
     this will be the ones affected by this deployment. It must match the pod
     template's labels.

     A label selector is a label query over a set of resources. The result of
     matchLabels and matchExpressions are ANDed. An empty label selector matches
     all objects. A null label selector matches no objects.

FIELDS:
   matchExpressions     <[]Object>
     matchExpressions is a list of label selector requirements. The requirements
     are ANDed.

   matchLabels  <map[string]string>
     matchLabels is a map of {key,value} pairs. A single {key,value} in the
     matchLabels map is equivalent to an element of matchExpressions, whose key
     field is "key", the operator is "In", and the values array contains only
     "value". The requirements are ANDed.

#对matchLabels标签介绍
kubectl explain deployment.spec.selector.matchLabels

[root@k8s-master-136 ~]# kubectl explain deployment.spec.selector.matchLabels
KIND:     Deployment
VERSION:  apps/v1

FIELD:    matchLabels <map[string]string>

DESCRIPTION:
     matchLabels is a map of {key,value} pairs. A single {key,value} in the
     matchLabels map is equivalent to an element of matchExpressions, whose key
     field is "key", the operator is "In", and the values array contains only
     "value". The requirements are ANDed.

Deployment类型编写nginx服务

创建pod

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

#创建资源对象
kubectl create -f nginx-deployment.yaml
或
kubectl apply -f nginx-deployment.yaml 
#查看创建的资源对象,创建需等待running
kubectl get pod

容器如果想对外提供访问,需创建service 发布

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

#创建资源对象
kubectl create -f nginx-service.yaml 
或
kubectl apply -f nginx-service.yaml
#查看创建的service
kubectl get svc

k8s集群中的port介绍

详解k8s中的port:

●port

port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service

●nodePort

nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。

●targetPort

targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。

●containerPort

containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

相关推荐
埃菲尔铁桶1 小时前
踩坑一周|OpenSandbox + AI Agent 冷启动从 2 分钟降到 1 秒,我们做了这些事
kubernetes
沧州刺史4 小时前
k8s 拉取镜像时,请求提前断开(EOF)导致拉取失败
云原生·容器·kubernetes
牛奶咖啡134 小时前
k8s容器编排技术实践——k8s的介绍及其整体运行架构
云原生·kubernetes·k8s是什么?有啥用?·k8s的应用场景·k8s的优缺点边界·k8s的重要概念·k8s的整体运行架构
小坏讲微服务5 小时前
小白搭建K8S集群0基础教程实战
docker·云原生·容器·kubernetes
xingfujie6 小时前
Ubuntu K8s 1.28 kubeadm 高可用集群部署实战
linux·运维·服务器·docker·kubernetes
9命怪猫6 小时前
[K8S小白问题集] - K8S为什么选择etcd而不是别的key-value DB?比如Redis
云原生·容器·kubernetes
小夏子_riotous7 小时前
Kubernetes学习路径——3. Kubernetes 1.25 高可用集群部署实战:从 Docker 到 Calico 全链路详解
linux·运维·学习·docker·容器·kubernetes·centos
东北甜妹7 小时前
k8s特殊容器 和 调度管理
云原生·容器·kubernetes
眷蓝天8 小时前
Kubernetes 特殊容器技术详解
云原生·容器·kubernetes
成为你的宁宁8 小时前
【K8s RBAC 基础详解及 Role、ClusterRole 实战案例】
kubernetes·rbac