第一章、k8s中的资源

1.什么叫资源?

k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象

2.在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(Pod水平扩展) PodTemplate(Pod模板,用于让控制器创建Pod时使用的模板) LimitRange(用来定义硬件资源限制的)

第二章、资源清单

1.什么是资源清单

在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件我们一般称为资源清单

2.资源清单的格式

apiVersion: group/apiversion  # 如果没有给定group名称,那么默认为croe,可以使用kubectl api-versions 获取当前k8s版本上所有的apiVersion版本信息(每个版本可能不同)
kind: #资源类别
metadata: #资源元数据
name
namespace #k8s自身的namespace
lables
annotations #主要目的是方便用户阅读查找
spec:期望的状态(disired state)
status:当前状态,本字段有kubernetes自身维护,用户不能去定义

#配置清单主要有五个一级字段,其中status用户不能定义,有k8s自身维护

3.获取资源的apiVersion版本及资源配置的帮助

1)获取apiVersion版本信息

[root@k8s-master01 ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
batch/v1
......(以下省略)

2)获取资源的apiVersion版本信息

[root@k8s-master01 ~]# kubectl explain pod
KIND: Pod
VERSION: v1
.....(以下省略)
[root@k8s-master01 ~]# kubectl explain Ingress
KIND: Ingress
VERSION: extensions/v1beta1

#可以看到出来,不同的资源可能属于不同的apiVersion版本

3)获取资源配置清单中字段设置帮助文档(以pod为例)

获取pod资源的配置清单一级字段

[root@k8s-master01 ~]# kubectl explain pod
KIND: Pod
VERSION: v1 DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts. 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/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/api-conventions.md#types-kinds
........
........

获取pod资源的配置清单二级级其他级别的字段

[root@k8s-master01 ~]# kubectl explain pod.metadata #查看一级字段中有哪些二级字段,字段的上下级以 "." 定义
KIND: Pod
VERSION: v1 RESOURCE: metadata <Object> DESCRIPTION:
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata ObjectMeta is metadata that all persisted resources must have, which
includes all objects users must create.
........ ------------- [root@k8s-master01 ~]# kubectl explain pod.metadata.labels #查看二级字段中有哪些三级字段
KIND: Pod
VERSION: v1 FIELD: labels <map[string]string> DESCRIPTION:
Map of string keys and values that can be used to organize and categorize
(scope and select) objects. May match selectors of replication controllers
and services. More info: http://kubernetes.io/docs/user-guide/labels

字段配置的格式

帮助信息中常见格式如下:
apiVersion <string> #表示字符串类型
metadata <Object> #表示需要嵌套多层字段
labels <map[string]string> #表示由k:v组成的映射
finalizers <[]string> #表示字串列表
ownerReferences <[]Object> #表示对象列表
hostPID <boolean> #布尔类型
priority <integer> #整型
name <string> -required- #如果类型后面接 -required-,表示为必填字段

第四章、创建一个配置清单实例

1.以pod为例,创建一个简单的yaml文件

[root@k8s-master01 ~]# mkdir manifests
[root@k8s-master01 ~]# cd manifests/
[root@k8s-master01 manifests]# cat pod-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
labels:
app: myapp #给自己打上标签
tier: frontend
spec:
containers: #创建了两个容器
- name: nginx
image: ikubernetes/myapp:v1
- name: tomcat
image: tomcat:-alpine
[root@k8s-master01 manifests]# kubectl create -f pod-demo.yaml #使用create 子命令以yaml文件的方式启动pod
[root@k8s-master01 manifests]# kubectl get pod #主要查看pod的状态是否支持,因为有一个以上的pod,READY段需要注意pod中的容器是否全部就绪
NAME READY STATUS RESTARTS AGE
......
pod-demo / Running 2h

为了便于访问,我们再创建一个service便于外部访问测试

[root@k8s-master01 manifests]# cat svc-demo.yaml
apiVersion: v1
kind: Service #主要类型
metadata:
name: test-service
labels:
app1: nginx
app2: tomcat
spec:
ports: #暴露的端口设置
- name: nginx
port: 80 #service的端口
targetPort: 80 #pod上暴露的端口
nodePort: 32080 #Node上暴露的端口,需要注意的是,Node只能暴露30000-32767之间的端口
- name: tomcat
port:
targetPort:
nodePort:
selector:
app: myapp
type: NodePort #service 端口暴露的类型,默认是ClusterIP
[root@k8s-master01 manifests]# kubectl create -f svc-demo.yaml

[root@k8s-master01 manifests]# kubectl get svc -o wide #查看svc的状态
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
.......
test-service  NodePort  10.108.230.27  <none>  80:32080/TCP,8080:32088/TCP  22m  app=myapp   #根据暴露的端口,加上任意集群的IP地址进行访问

2.pod资源清单示例

[root@k8s-master01 ~]# kubectl get pod     #查看集群中pod的状态,选取一个之前使用命令行状态下创建的pod
NAME READY STATUS RESTARTS AGE
client / Completed 19h
myapp-6d6f569fd5-rtgt9 / Running 19h
myapp-6d6f569fd5-tjpfn / Running 19h
myapp-6d6f569fd5-tqq5z / Running 19h
nginx / Running 16h
nginx-deploy-7db697dfbd-2qh7v / Running 20h
nginx-deploy-7db697dfbd-gskcv / Running 20h
nginx-deploy-7db697dfbd-ssws8 / Running 20h
[root@k8s-master01 ~]# kubectl get pod nginx-deploy-7db697dfbd-2qh7v -o yaml #使用 -o 参数 加yaml,可以将资源的配置以 yaml的格式输出出来,也可以使用json,输出为json格式
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: --30T05::55Z
generateName: nginx-deploy-7db697dfbd-
labels:
pod-template-hash: ""
run: nginx-deploy
name: nginx-deploy-7db697dfbd-2qh7v
namespace: default
ownerReferences:
- apiVersion: extensions/v1beta1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: nginx-deploy-7db697dfbd
uid: 0eef9e1c-dbf0-11e8--5254001b07db
resourceVersion: ""
selfLink: /api/v1/namespaces/default/pods/nginx-deploy-7db697dfbd-2qh7v
uid: 5ee94f2a-dc06-11e8--5254001b07db
spec:
containers:
- image: nginx:1.14-alpine
imagePullPolicy: IfNotPresent
name: nginx-deploy
ports:
- containerPort:
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-tcwjz
readOnly: true
dnsPolicy: ClusterFirst
nodeName: k8s-node02
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds:
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds:
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds:
volumes:
- name: default-token-tcwjz
secret:
defaultMode:
secretName: default-token-tcwjz
status:
conditions:
- lastProbeTime: null
lastTransitionTime: --30T05::55Z
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: --30T05::06Z
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: --30T05::55Z
status: "True"
type: PodScheduled
containerStatuses:
- containerID: docker://b75740e5919bd975755b256c83e03b63ea95cf2307ffc606abd03b59fea6634a
image: docker.io/nginx:1.14-alpine
imageID: docker-pullable://docker.io/nginx@sha256:8976218be775f4244df2a60a169d44606b6978bac4375192074cefc0c7824ddf
lastState: {}
name: nginx-deploy
ready: true
restartCount:
state:
running:
startedAt: --30T05::06Z
hostIP: 172.16.150.214
phase: Running
podIP: 10.244.2.7
qosClass: BestEffort
startTime: --30T05::55Z

k8s学习笔记之四:资源清单定义入门的更多相关文章

  1. Kubernetes 学习5 kubernetes资源清单定义入门

    一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...

  2. k8s资源清单定义入门

    1.资源分类 a.workload型资源:service.pod.deployment.ReplicaSet.StatefulSet.Job.Cronjob; b.服务发现及服务均衡资源型资源:Ser ...

  3. 四,k8s集群资源清单定义入门

    目录 资源对象 创建资源的方法 清单帮助命令 创建测试清单 资源的三种创建方式 资源对象 workload:Pod, ReplicaSet, Deployment, StatefulSet, Daem ...

  4. Kubenetes 资源清单定义入门

    Kubernetes 常用资源 资源  对象 工作负载型资源对象(workload): Pod  Replicaset  ReplicationController  Deployments Stat ...

  5. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  6. 04-kubernetes 资源清单定义入门

    目录 资源对象 创建资源的方法 清单帮助命令 创建测试清单 资源的三种创建方式 资源对象 workload:Pod, ReplicaSet, Deployment, StatefulSet, Daem ...

  7. kubernetes 资源清单定义入门

    k8s中的资源 什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet Deploymen ...

  8. 5、kubernetes资源清单定义入门

    使用配置清单创建资源 定义pod时使用yaml格式 master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE client / Error 1 ...

  9. kubernetes系列06—kubernetes资源清单定义入门

    本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...

随机推荐

  1. java中的\b是什么意思?

    java中有2个地方有\b,一个是特殊字符\b,另一个是在正则表达式中表示边界的意思. 我们这里只讨论特殊字符\b 我这里一共接受到几种解释: 1.退格符相当于键盘上的Backspace符号 back ...

  2. Markup解析XML——文档,说明

    链接:http://pan.baidu.com/s/1slMwEc9 密码:slz7 上面是网盘的地址,因为来源已经找不到了,在这里给这个作者说声谢谢. 轻量级的XML解析器使用比较简单,下载Mark ...

  3. JAVA8之Lambda表达式与方法引用表达式

    一.Lambda表达式 基本语法: lambdaParameters->lambdaBody lambdaParameters传递参数,lambdaBody用于编写逻辑,lambda表达式会生成 ...

  4. vs2015和Oracle在一起时的Shit问题

    VS2015在连接Oracle时,必须要安装到一个不含有空格的目录中去,否则连接不上Oracle,至于为什么,不知道,鬼知道,日的. 如果你不幸以前安装过VS2015,安装到它的默认的什么“progr ...

  5. VS2013/VS2015/VS2017通过oschina托管代码

    1.到http://git.oschina.net注册账号,创建项目,这一步不做详细描述,创建后效果如图 2.打开VS创建项目,为了测试,创建一个空白解决方案 3.把解决方案添加到源代码管理(这一步仅 ...

  6. Vue+WebSocket 实现页面实时刷新长连接

    最近vue项目要做数据实时刷新,折线图每秒重画一次,数据每0.5秒刷新一次,说白了就是实时刷新,因为数据量较大,用定时器估计页面停留一会就会卡死... 与后台人员讨论过后决定使用h5新增的WebSoc ...

  7. 新建一个self hosted Owin+ SignalR Project(2)

    ASPNET SignalR是为ASP.NET开发人员提供的一个库,可以简化开发人员将实时Web功能添加到应用程序的过程.实时Web功能是指这样一种功能:当所连接的客户端变得可用时服务器代码可以立即向 ...

  8. 框架tensorflow1

    TensorFlow   1 分类: 1,protocol Buffer  处理结构化数据工具: (xml,json) 2,Bazel        自动化构建工具, 编译: tensor 张量:   ...

  9. linu下未编译的mysql安装包

    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21.tar.gz

  10. Python全栈之路----函数----匿名函数

    用lambda声明匿名函数,对lambda定义名字,才能被调用.下面的calc和func功能一致. def calc(x,y): return x*y func = lambda x,y: x*y # ...