博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kubernetes 学习笔记(三)--- 资源清单定义入门
阅读量:5770 次
发布时间:2019-06-18

本文共 5335 字,大约阅读时间需要 17 分钟。

目录

一、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 yamlapiVersion: v1      # K8S API版本,应该由两部分组成:group/version,group省略表示默认为corekind: 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-000c29eced73spec:             # 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-rqmtbstatus:             # 用于显示这个资源对象当前的状态,这个字段是只读的。  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-versionskind: 资源类别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: v1kind: Podmetadata:  name: pod-demo  namespace: default  labels:    app: myapp    tier: frontendspec:  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.10Hello MyApp | Version: v1 | Pod Name[root@k8s-master manifests]# [root@k8s-master manifests]# [root@k8s-master manifests]# kubectl logs pod-demo myapp10.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》;
  • 声明式资源清单。使用声明式资源清单,可以确保资源尽可能的向我们声明的状态改变,这样我们就可以随时改变声明,并随时应用。

转载地址:http://cjsux.baihongyu.com/

你可能感兴趣的文章
一起谈.NET技术,你应该知道的15个Silverlight诀窍
查看>>
SQL注入漏洞全接触--进阶篇
查看>>
电商应用脚本开发遇到问题和处理
查看>>
商教助手!解析夏普液晶高清宽屏投影机系列
查看>>
中国平安增持华夏幸福5.69%股权 看好长期战略协同
查看>>
云南去年有望实现151万贫困人口净脱贫
查看>>
Java架构师面试题系列整理(大全)
查看>>
延伸产业链 中国产粮大省向“精深”问发展
查看>>
消费贷用户70%月收入低于5000元 80、90后是主要人群
查看>>
2018年内蒙古外贸首次突破1000亿元
查看>>
为什么主流APP的推荐总能符合你口味?推荐系统了解一下
查看>>
完整的大数据知识体系,大数据学习路线图
查看>>
CTOR有助于BCH石墨烯技术更上一层楼
查看>>
被遗忘的CSS
查看>>
Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
查看>>
做完小程序项目、老板给我加了6k薪资~
查看>>
面试必备:LinkedList源码解析(JDK8)
查看>>
java工程师linux命令,这篇文章就够了
查看>>
翻译 | 玩转 React 表单 —— Refs 的运用
查看>>
关于React生命周期的学习
查看>>