k8s查看pod的yaml文件_K8S系列学习,Pod实战那些事儿,有必要知道知道
Kubernetes學習路上的那些事兒,很有必要分享出來
什么是Pod
要弄清楚這個概念,我們還是先上官網瞧瞧,https://kubernetes.io/zh/docs/concepts/workloads/pods/
個人的理解,Pod就是k8s中的一個個籃子,至于里面是裝韭菜,還是裝雞蛋,得根據具體的業務環境要求來定。在k8s世界中,重點是把這些籃子調度和管理好,所以得首先學Pod,只有理解和掌握了Pod,后面的一些k8s組件學習起來才有意思。
實操過程
實驗準備:
Kubernetes集群環境一套,可以選擇在本地虛擬機(VirtualBox)上搭建,也可以選擇在公有云上利用云主機來搭建,比如移動云、阿里云、騰訊云、華為云等。
當然,在生產環境中,肯定建議直接使用服務器進行搭建。以下是我的實驗環境,1臺master節點,2臺node節點。
步驟一:編寫Pod的yaml文件。因為在k8s中是“聲明式”命令,通過編寫的yaml文件來實現組件的操作。
在Master節點的當前環境下,先編寫一個名字叫“pod1.yaml”的文件,具體代碼如下:
apiVersion: v1kind: Podmetadata:? name: pod1? namespace: default? labels:??? evn: dev??? res: stablespec:? containers:? - name: testpod-dev??? image: nginx??? ports:??? - containerPort: 80還是那句老話,先別慌,會奉上詳細的解釋的,如下圖:
步驟二:提交yaml文件并創建Pod。在這個小實驗里,只創建了一個Pod,且該Pod中只有一個容器,該容器安裝的是nginx最新版本的鏡像,也就是部署了一個nginx容器。
kubectl apply -f pod1.yamlkubectl get pod由于我做實驗的環境設置的帶寬低,所以拉取鏡像的過程比較長一些,如果運行正常,獲取的Pod狀態是Running。如果是非Running的狀態,可使用kubectl describe pod pod1命令來查看pod1的運行信息,以便找到問題,然后解決問題。
步驟三:驗證結果。可以使用kubectl命令行直接進入Pod內,然后查看nginx安裝文件。如果想使用curl命令看nginx歡迎頁面信息,單獨操作Pod是不行的,需要配合Service組件來使用,后續會單獨分享Service。畢竟k8s是集群調度,無論是從物理層面的“垂直維度”,還是從編排層面的“水平維度”,都是做了隔離的,這跟單獨操作虛擬機還是有較大區別的。
kubectl exec -it pod1 -c testpod-dev -- /bin/bash??? //pod1是本實驗的Pod名稱,testpod-dev是本實驗pod1中的容器名稱,該docker容器部署了nginx以上紅色方框中的配置文件,就是咱們熟悉的nginx配置文件了,/conf.d/default.conf中可以修改監控端口(默認是80),nginx.conf中可以修改worker_processes的數量。
步驟四:一個Pod中部署多個docker容器。這里就開始體現k8s的好處了,只需要在原來的pod1.yaml文件上里的spec語句塊中,繼續增加容器規格參數即可。為了方便對比,增加了代碼的文件叫pod-1.yaml,同時名稱定義為pod-1。
然后使用同樣的命令,創建pod-1。
kubectl apply -f pod-1.yaml???? //增加了my-tomcat容器的yaml文件kubectl get pod??????? //查看pod狀態,直到狀態變成Running做個對比,pod1中只有一個docker容器,而pod-1中有兩個docker容器。
步驟五:在Pod中限制docker容器的資源使用。操作也很簡單,仍然是通過修改yaml文件的相應配置區來實現。
為了好做對比,在pod1.yaml基礎上復制一個pod11.yaml文件,然后增加資源設置語句塊。
然后讓pod1(沒有設置資源限制)和pod-11(設置了資源限制)都Running起來,然后使用命令查看當前Node上的運行情況。
kubectl get pod -o wide??? //查看pod在哪些Node上kubectl describe node k8s-node2? //查看k8s-node2這個Node上的運行信息擴展內容
1)實驗環境的對比,公有云VS本地虛擬機
如果使用公有云上的云主機搭建環境,好處是“一次部署,永久運行”,想做實驗的時候,馬上登陸云主機即可,不好的地方是要注意安全組的配置,注意端口的放通,如果為了省事兒也可以將所有端口放通,但因為是公有云又容易被攻擊。
如果使用本地虛擬機環境搭建,好處是不用配置安全組,也不用擔心80,8080這些常用的web端口進行備案,不好的地方就是PC要關機,虛擬機環境自然要關機,由于無線網絡ip地址變化,每次啟動虛擬機環境后需要搗鼓網絡,因為既要能夠上公網(為了能夠從公共鏡像倉庫拉取鏡像),也要保證節點注冊不受影響。
2)Pod中其它配置項
Pod中可配置項很多,本實驗只是列舉了一部分,主要目的是簡單介紹如何使用Pod。在k8s中直接操作Pod的機會不多,更多的是通過deployment,ReplicationController,ReplicaSet,Service,Job等組件來自動調度和操作Pod。
更多配置項及解釋可參照如下:(轉自網絡:https://www.jianshu.com/p/35dde2b1951b )
apiVersion: v1 #指定api版本,此值必須在kubectl apiversion中 kind: Pod #指定創建資源的角色/類型 metadata: #資源的元數據/屬性 name: web04-pod #資源的名字,在同一個namespace中必須唯一 labels: #設定資源的標簽,詳情請見http://blog.csdn.net/liyingke112/article/details/77482384 k8s-app: apache version: v1 kubernetes.io/cluster-service: "true" annotations: #自定義注解列表 - name: String #自定義注解名字 spec:#specification of the resource content 指定該資源的內容 restartPolicy: Always #表明該容器一直運行,默認k8s的策略,在此容器退出后,會立即創建一個相同的容器 nodeSelector: #節點選擇,先給主機打標簽kubectl label nodes kube-node1 zone=node1 zone: node1 containers: - name: web04-pod #容器的名字 image: web:apache #容器使用的鏡像地址 imagePullPolicy: Never #三個選擇Always、Never、IfNotPresent,每次啟動時檢查和更新(從registery)images的策略, # Always,每次都檢查 # Never,每次都不檢查(不管本地是否有) # IfNotPresent,如果本地有就不檢查,如果沒有就拉取 command: ['sh'] #啟動容器的運行命令,將覆蓋容器中的Entrypoint,對應Dockefile中的ENTRYPOINT args: ["$(str)"] #啟動容器的命令參數,對應Dockerfile中CMD參數 env: #指定容器中的環境變量 - name: str #變量的名字 value: "/etc/run.sh" #變量的值 resources: #資源管理,請求請見http://blog.csdn.net/liyingke112/article/details/77452630 requests: #容器運行時,最低資源需求,也就是說最少需要多少資源容器才能正常運行 cpu: 0.1 #CPU資源(核數),兩種方式,浮點數或者是整數+m,0.1=100m,最少值為0.001核(1m) memory: 32Mi #內存使用量 limits: #資源限制 cpu: 0.5 memory: 32Mi ports: - containerPort: 80 #容器開發對外的端口 name: httpd #名稱 protocol: TCP livenessProbe: #pod內容器健康檢查的設置,詳情請見http://blog.csdn.net/liyingke112/article/details/77531584 httpGet: #通過httpget檢查健康,返回200-399之間,則認為容器正常 path: / #URI地址 port: 80 #host: 127.0.0.1 #主機地址 scheme: HTTP initialDelaySeconds: 180 #表明第一次檢測在容器啟動后多長時間后開始 timeoutSeconds: 5 #檢測的超時時間 periodSeconds: 15 #檢查間隔時間 #也可以用這種方法 #exec: 執行命令的方法進行監測,如果其退出碼不為0,則認為容器正常 # command: # - cat # - /tmp/health #也可以用這種方法 #tcpSocket: //通過tcpSocket檢查健康 # port: number lifecycle: #生命周期管理 postStart: #容器運行之前運行的任務 exec: command: - 'sh' - 'yum upgrade -y' preStop:#容器關閉之前運行的任務 exec: command: ['service httpd stop'] volumeMounts: #詳情請見http://blog.csdn.net/liyingke112/article/details/76577520 - name: volume #掛載設備的名字,與volumes[*].name 需要對應 mountPath: /data #掛載到容器的某個路徑下 readOnly: True volumes: #定義一組掛載設備 - name: volume #定義一個掛載設備的名字 #meptyDir: {} hostPath: path: /opt #掛載設備類型為hostPath,路徑為宿主機下的/opt,這里設備類型支持很多種總結
以上是生活随笔為你收集整理的k8s查看pod的yaml文件_K8S系列学习,Pod实战那些事儿,有必要知道知道的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pc不识别sd卡怎么解决 电脑无法读取S
- 下一篇: 天津zgl 权健(天津权健自然医学骗局)