Kubernetes 学习笔记(三)--- 资源清单定义入门

简介: 目录一、K8S中常见的资源二、创建资源清单 2.1 创建资源的方法: 2.2 常用资源的配置清单 2.3 利用资源清单创建Pod 2.4 kubectl命令管理资源有三种用法一、K8S中常见的资源Kubernetes中把资源实例化以后称之为对象,这里先介绍K8S中常见的核心资源有哪些:工作负载型资源(workload):Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob。

目录

一、K8S中常见的资源
二、创建资源清单
    2.1 创建资源的方法:
    2.2 常用资源的配置清单
    2.3 利用资源清单创建Pod
    2.4 kubectl命令管理资源有三种用法

一、K8S中常见的资源

Kubernetes中把资源实例化以后称之为对象,这里先介绍K8S中常见的核心资源有哪些:

  • 工作负载型资源(workload):Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob。(ReplicationController在v1.11版本被废弃)
  • 服务发现及负载均衡型资源(ServiceDiscovery、LoadBalance) : Service 、Ingress, ...
  • 配置与存储型资源: Volume(存储卷)、CSI(容器存储接口,可以扩展各种各样的第三方存储卷)
    • 特殊类型的存储卷:ConfigMap(当配置中心来使用的资源类型)、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)

以上这些资源都是配置在名称空间级别。

  • 集群级资源(都是配置在名): Namespace、Node、Role、ClusterRole、RoleBinding(角色绑定)、ClusterRoleBinding(集群角色绑定)、
  • 元数据型资源:HPA、PodTemplate(Pod模板,用于让控制器创建Pod时使用的模板。)、LimitRange(用来定义硬件资源限制的)

下面是利用资源清单创建一个Pod的资源清单内容:

[root@k8s-master ~]# kubectl get pod myapp-848b5b879b-6mq5c -o yaml
[root@k8s-master ~]# kubectl get pod myapp-848b5b879b-6mq5c -o yaml
apiVersion: v1      # K8S API版本,应该由两部分组成:group/version,group省略表示默认为core
kind: Pod           # 资源类别: Pod、Deployment、Service等等 
metadata:           # 资源元数据
  creationTimestamp: 2018-09-26T11:49:23Z
  generateName: myapp-848b5b879b-
  labels:
    pod-template-hash: "4046164356"
    run: myapp
  name: myapp-848b5b879b-6mq5c
  namespace: default
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: myapp-848b5b879b
    uid: e1f7b7be-c17d-11e8-8968-000c29eced73
  resourceVersion: "117793"
  selfLink: /api/v1/namespaces/default/pods/myapp-848b5b879b-6mq5c
  uid: 367b77fc-c182-11e8-8968-000c29eced73
spec:             # specifications, 资源规格。(定义资源对象期望的状态),这个是最重要的字段,用于规定接下来要创建的资源对象应该拥有的特性。然后依靠控制器确保这些特性能够被满足。
  containers:
  - image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    name: myapp
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-rqmtb
      readOnly: true
  dnsPolicy: ClusterFirst
  nodeName: k8s-node1.fhw.com
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:        # 容忍度,能够容忍哪些污点
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: default-token-rqmtb
    secret:
      defaultMode: 420
      secretName: default-token-rqmtb
status:             # 用于显示这个资源对象当前的状态,这个字段是只读的。
  conditions:
  - lastProbeTime: null
    lastTransitionTime: 2018-09-26T11:49:23Z
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: 2018-09-26T11:49:25Z
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: null
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: 2018-09-26T11:49:23Z
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: docker://cf1a7d53dfe93b679ed3213a94ccc94974ee87514e6e1cf049904934e9795f4d
    image: ikubernetes/myapp:v1
    imageID: docker-pullable://ikubernetes/myapp@sha256:9c3dc30b5219788b2b8a4b065f548b922a34479577befb54b03330999d30d513
    lastState: {}
    name: myapp
    ready: true
    restartCount: 0
    state:
      running:
        startedAt: 2018-09-26T11:49:24Z
  hostIP: 192.168.100.136
  phase: Running
  podIP: 10.244.1.11
  qosClass: BestEffort
  startTime: 2018-09-26T11:49:23Z

命令:kubectl api-versions可以查看所有API 群组/版本

img_f905f77243ee8817bacf3b2776d45eaa.png
image.png

二、创建资源清单

2.1 创建资源的方法:

apiserver仅接收JSON格式的资源定义,利用yaml格式提供配置清单,apiserver可自动将其转为json格式,而后再提交并执行。

2.2 常用资源的配置清单

apiVersion: group/version
    $ kubectl api-versions

kind: 资源类别

metadata: 元数据
    name: 资源名称
    namespace: 名称空间
    labels: 标签,键值数据。数据大小有限制。
    annotations: 注解,也是键值数据,但是它的数据没有大小限制。

spec: 期望的状态,disired state,由用户定义,最重要。每种资源支持的字段不一样。

status: 当前状态,current state, 本字段由K8S集群维护。

每个资源的引用PATH:
/api/GROUP/VERSION/namespace/NAMESPACE/TYPE/NAME (大写单词替换为具体名称),可以通过这个PATH获取资源的信息。

查看某个资源类型支持的字段:
命令: kubectl explain <resource_type>.<fieldName>[.<fieldName>]

img_8047ef5fbef21faa45718657073bc801.png
image.png

每个字段的值都标记有对应的类型:
字段标记有-required-表示必选字段

值类型 简述
<string> 字符串
<[]string> 字符串列表,所有的列表数据都可以放在[]中。
<integer> 整数
<Object> 对象,也就是可以嵌套二级或三级字段。。。
<[]Object> 对象列表,
<map[string]string> 映射,多个k=v类型的json数组,也就是键值对,key=value,所有映射数据都可以直接放在{}中。
<boolean> 布尔值,true或false

2.3 利用资源清单创建Pod

先创建一个资源清单:

[root@k8s-master manifests]# cat pod-demo.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
  - name: busybox
    image: busybox:latest
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"

执行命令以创建Pod:

[root@k8s-master manifests]# kubectl create -f pod-demo.yaml 
pod/pod-demo created

如图:


img_a4ecfd5a41c8eeb1e69acab3ba654835.png
image.png

访问pod-demo pod中的myapp容器并查看其日志:

[root@k8s-master manifests]# curl 10.244.2.10
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@k8s-master manifests]# 
[root@k8s-master manifests]# 
[root@k8s-master manifests]# kubectl logs pod-demo myapp
10.244.0.0 - - [27/Sep/2018:09:14:59 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"

删除资源清单里面的资源:

[root@k8s-master manifests]# kubectl delete -f pod-demo.yaml 
pod "pod-demo" deleted

事实上使用kubectl命令管理资源有三种用法:

  • 命令式用法,《Kubernetes 学习笔记(二)--- K8S应用快速入门》中讲的。
  • 命令式资源清单用法,就是本篇 2.3节《 利用资源清单创建Pod》;
  • 声明式资源清单。使用声明式资源清单,可以确保资源尽可能的向我们声明的状态改变,这样我们就可以随时改变声明,并随时应用。
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
126 2
|
3月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
98 5
|
1天前
|
弹性计算 运维 Kubernetes
使用ACK Edge统一管理多地域的ECS资源
本文介绍如何使用ACK Edge来管理分布在多个地域的ECS资源。
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
3月前
|
JSON 运维 Kubernetes
|
2月前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
157 3
|
2月前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
62 3
|
2月前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!