目錄
一砌们、K8S中常見(jiàn)的資源
二、創(chuàng)建資源清單
2.1 創(chuàng)建資源的方法:
2.2 常用資源的配置清單
2.3 利用資源清單創(chuàng)建Pod
2.4 kubectl命令管理資源有三種用法
一嘉熊、K8S中常見(jiàn)的資源
Kubernetes中把資源實(shí)例化以后稱之為對(duì)象非驮,這里先介紹K8S中常見(jiàn)的核心資源有哪些:
- 工作負(fù)載型資源(workload):Pod壕鹉、ReplicaSet垄开、Deployment琴许、StatefulSet、DaemonSet溉躲、Job榜田、CronJob。(ReplicationController在v1.11版本被廢棄)
- 服務(wù)發(fā)現(xiàn)及負(fù)載均衡型資源(ServiceDiscovery锻梳、LoadBalance) : Service 箭券、Ingress, ...
-
配置與存儲(chǔ)型資源: Volume(存儲(chǔ)卷)唱蒸、CSI(容器存儲(chǔ)接口邦鲫,可以擴(kuò)展各種各樣的第三方存儲(chǔ)卷)
- 特殊類型的存儲(chǔ)卷:ConfigMap(當(dāng)配置中心來(lái)使用的資源類型)、Secret(保存敏感數(shù)據(jù))神汹、DownwardAPI(把外部環(huán)境中的信息輸出給容器)
以上這些資源都是配置在名稱空間級(jí)別。
- 集群級(jí)資源(都是配置在名): Namespace古今、Node屁魏、Role、ClusterRole捉腥、RoleBinding(角色綁定)氓拼、ClusterRoleBinding(集群角色綁定)、
- 元數(shù)據(jù)型資源:HPA抵碟、PodTemplate(Pod模板桃漾,用于讓控制器創(chuàng)建Pod時(shí)使用的模板。)拟逮、LimitRange(用來(lái)定義硬件資源限制的)
下面是利用資源清單創(chuàng)建一個(gè)Pod的資源清單內(nèi)容:
[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版本撬统,應(yīng)該由兩部分組成:group/version,group省略表示默認(rèn)為core
kind: Pod # 資源類別: Pod敦迄、Deployment恋追、Service等等
metadata: # 資源元數(shù)據(jù)
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, 資源規(guī)格。(定義資源對(duì)象期望的狀態(tài))罚屋,這個(gè)是最重要的字段苦囱,用于規(guī)定接下來(lái)要?jiǎng)?chuàng)建的資源對(duì)象應(yīng)該擁有的特性。然后依靠控制器確保這些特性能夠被滿足脾猛。
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: # 容忍度撕彤,能夠容忍哪些污點(diǎn)
- 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: # 用于顯示這個(gè)資源對(duì)象當(dāng)前的狀態(tài),這個(gè)字段是只讀的猛拴。
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 群組/版本
二羹铅、創(chuàng)建資源清單
2.1 創(chuàng)建資源的方法:
apiserver僅接收J(rèn)SON格式的資源定義瞧柔,利用yaml格式提供配置清單,apiserver可自動(dòng)將其轉(zhuǎn)為json格式睦裳,而后再提交并執(zhí)行造锅。
2.2 常用資源的配置清單
apiVersion: group/version
$ kubectl api-versions
kind: 資源類別
metadata: 元數(shù)據(jù)
name: 資源名稱
namespace: 名稱空間
labels: 標(biāo)簽,鍵值數(shù)據(jù)廉邑。數(shù)據(jù)大小有限制哥蔚。
annotations: 注解,也是鍵值數(shù)據(jù)蛛蒙,但是它的數(shù)據(jù)沒(méi)有大小限制糙箍。
spec: 期望的狀態(tài),disired state牵祟,由用戶定義深夯,最重要。每種資源支持的字段不一樣诺苹。
status: 當(dāng)前狀態(tài)咕晋,current state, 本字段由K8S集群維護(hù)。
每個(gè)資源的引用PATH:
/api/GROUP/VERSION/namespace/NAMESPACE/TYPE/NAME
(大寫(xiě)單詞替換為具體名稱)收奔,可以通過(guò)這個(gè)PATH獲取資源的信息掌呜。
查看某個(gè)資源類型支持的字段:
命令: kubectl explain <resource_type>.<fieldName>[.<fieldName>]
每個(gè)字段的值都標(biāo)記有對(duì)應(yīng)的類型:
字段標(biāo)記有-required-
表示必選字段。
值類型 | 簡(jiǎn)述 |
---|---|
<string> |
字符串 |
<[]string> |
字符串列表坪哄,所有的列表數(shù)據(jù)都可以放在[]中质蕉。 |
<integer> |
整數(shù) |
<Object> |
對(duì)象,也就是可以嵌套二級(jí)或三級(jí)字段翩肌。模暗。。 |
<[]Object> |
對(duì)象列表念祭, |
<map[string]string> |
映射兑宇,多個(gè)k=v類型的json數(shù)組,也就是鍵值對(duì)棒卷,key=value顾孽,所有映射數(shù)據(jù)都可以直接放在{}中。 |
<boolean> |
布爾值比规,true或false |
2.3 利用資源清單創(chuàng)建Pod
先創(chuàng)建一個(gè)資源清單:
[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"
執(zhí)行命令以創(chuàng)建Pod:
[root@k8s-master manifests]# kubectl create -f pod-demo.yaml
pod/pod-demo created
如圖:
訪問(wèn)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
事實(shí)上使用kubectl
命令管理資源有三種用法:
- 命令式用法若厚,《Kubernetes 學(xué)習(xí)筆記(二)--- K8S應(yīng)用快速入門》中講的。
- 命令式資源清單用法蜒什,就是本篇 2.3節(jié)《 利用資源清單創(chuàng)建Pod》测秸;
- 聲明式資源清單。使用聲明式資源清單,可以確保資源盡可能的向我們聲明的狀態(tài)改變霎冯,這樣我們就可以隨時(shí)改變聲明铃拇,并隨時(shí)應(yīng)用。