本文共 5335 字,大约阅读时间需要 17 分钟。
一、K8S中常见的资源二、创建资源清单 2.1 创建资源的方法: 2.2 常用资源的配置清单 2.3 利用资源清单创建Pod 2.4 kubectl命令管理资源有三种用法
Kubernetes中把资源实例化以后称之为对象,这里先介绍K8S中常见的核心资源有哪些:
以上这些资源都是配置在名称空间级别。
下面是利用资源清单创建一个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 群组/版本
apiserver仅接收JSON格式的资源定义,利用yaml格式提供配置清单,apiserver可自动将其转为json格式,而后再提交并执行。
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>]
每个字段的值都标记有对应的类型:
字段标记有-required-
表示必选字段。 值类型 | 简述 |
---|---|
<string> | 字符串 |
<[]string> | 字符串列表,所有的列表数据都可以放在[]中。 |
<integer> | 整数 |
<Object> | 对象,也就是可以嵌套二级或三级字段。。。 |
<[]Object> | 对象列表, |
<map[string]string> | 映射,多个k=v类型的json数组,也就是键值对,key=value,所有映射数据都可以直接放在{}中。 |
<boolean> | 布尔值,true或false |
先创建一个资源清单:
[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
如图:
访问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
命令管理资源有三种用法:
转载地址:http://cjsux.baihongyu.com/