docker筆記22-k8s資源清單定義入門

czxin788發表於2018-09-11

資源分類:    

    1)workload型資源:service,pod,Redeployment(控制器,我們很少直接操作pod,而是透過控制器來操作Pod)、ReplicaSet、StatefilSet、Job、Cronjob

    2)服務發現及服務均衡資源型資源:Service、Ingress

    3)配置與儲存型資源:Volume、CSI(容器儲存介面,可以擴充套件各種第三方的儲存卷)、ConfigMap、Secret、DownwardAPI

    4)叢集級資源:Namespace、Node、Role、rolebinding、clusterrolebinding

    5)後設資料型資源:HPA、podtemplate、limitrange(限制資源的如cpu、記憶體等)

檢視pod的yaml格式清單

[root@master ~]# kubectl get pods
NAME                          READY     STATUS             RESTARTS   AGE
client                        1/1       Running            0          17h
myapp-fcc5f7f7c-4x2p7         0/1       ImagePullBackOff   0          12h
myapp-fcc5f7f7c-dnkdq         0/1       ImagePullBackOff   0          12h
mytomcat-5f8c6fdcb-7t5s2      1/1       Running            0          11h
mytomcat-5f8c6fdcb-lhcsc      1/1       Running            0          12h
mytomcat-5f8c6fdcb-rntrg      1/1       Running            0          12h
nginx-deploy-5b595999-fpm8x   1/1       Running            0          12h


[root@master ~]# kubectl get pods mytomcat-5f8c6fdcb-lhcsc
NAME                       READY     STATUS    RESTARTS   AGE
mytomcat-5f8c6fdcb-lhcsc   1/1       Running   0          12h


[root@master ~]# kubectl get pods mytomcat-5f8c6fdcb-lhcsc -o yaml
spec: #規格、特性,使用者期望的狀態
  containers:
  tolerations: #容忍度
status:#顯示當前資源的當前狀態
  conditions:

建立資源的方法

    apiserver僅接收JSON格式的資源定義。我們可以使用yaml格式提供配置清單,因為ymal格式是以縮排的方式來寫的,更利用人們的理解。我們寫完ymal格式的配置清單後,apiserver可以自動將其轉為json,然後再提交。

    另外,我們使用命令kubectl run,其最終也是自動轉為json格式的資源定義了。

    大部分的的資源的配置清單包含:

    1)apiVersion:表示屬於哪個api群組和版本,可以透過命令 kubectl api-versions來看,顯示方式為group/version

    2)Kind:資源類別,有pod、deloyment類別等

    3)metadata:後設資料,包括:

        a) name:在同一資源下name是必須唯一的;

        b) namespace

        c) labels

        d) annotations:資源註解

        e)uid

        f) resourceversion:

        g) OwnerReferences

        h) selfLink:每個資源引用的PATH,格式為/api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME

    4) spec,定義使用者期望的目標狀態(disired state)

    5)status:表示當前狀態,讓當前狀態向期望的目標狀態靠近,本欄位有k8s叢集維護。

檢視資源清單的幫助

    由於spec的欄位很多,我們背不下來了,所以可以如下檢視幫助。

[root@master ~]#  kubectl explain pods

    看medadata下有哪些欄位可以用:

[root@master ~]#  kubectl explain pods.metadata

    看spec下有哪些欄位可以用:

[root@master ~]#  kubectl explain pods.spec

    看spec.containers下有哪些欄位可以用:

[root@master ~]#  kubectl explain pods.spec.containers

例子-用ymal建立pod

    用yaml格式建立一個pod

[root@master ~]# mkdir manifests
[root@master ~]# cd manifests/
[root@master manifests]# cat pod-demo.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp  #kv格式的,也可以用花括號表示
    tier: frontend #定義所屬的層次
spec:
  containers: 
  - name: myapp  #前面的-號表示這是一個列表格式的,也可以用中括號表示
    image: tomcat 
  - name: busybox
    image: busybox:latest
    command:
    - "/bin/sh"
    - "-c"
    - "echo $(date) >> /usr/share/nginx/html/index.html; sleep 5"
   #以上命令也可以寫作:command: ["/bin/sh","-c","sleep 3600"]
[root@master manifests]# kubectl create -f pod-demo.yaml 
pod/pod-demo created
[root@master manifests]# kubectl get pods
NAME                          READY     STATUS             RESTARTS   AGE
pod-demo                      2/2       Running            1          33s
[root@master manifests]#kubectl describe pods pod-demo 可以看到一個pod裡面跑了兩個容器,一個是busybox,一個是tomcat

檢視pod裡面容器的日誌

[root@master manifests]# kubectl logs pod-demo myapp

說明:pod-demo是上面我們建立的pod名字,myapp是pod裡面容器的名字。

進入執行中的容器

[root@master manifests]# kubectl exec -it pod-demo -c myapp -- /bin/bash
root@pod-demo:/usr/local/tomcat#

-c:自動容器名字;pod-demo是我們自己建立的容器名字。

刪除配置清單定義的資源

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

用命令run pod和用資源清單建立的pod區別

    我們用命令run一個pod是需要建立一個控制器deployment的,所以刪除這樣的pod後,控制器deployment會自動新建一個,怎麼也刪不掉。

    而我們用配置清單建立的pod,沒有控制器deployment,是一個裸pod,所以一刪除就沒了,這個挺好。

    命令建立的:

[root@master ~]# kubectl  expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP

    資源清單建立的:

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



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2213934/,如需轉載,請註明出處,否則將追究法律責任。

相關文章