(K8S實踐2)Pod常用操作

在這裏插入圖片描述

一、創建pod的兩種方式

1.命令方式
①創建命令:
#kubectl run kubia --image=luksa/kubia --replicas=3
②查看資源:
#kubectl get pod -o wide
在這裏插入圖片描述
2.文件方式
#vim nginx-master.yaml

apiVersion: extensions/v1beta1  #描述文件遵循extensions/v1beta1版本的Kubernetes API
kind: Deployment                #創建資源類型爲Deployment
metadata:                       #該資源元數據
  name: nginx-master            #Deployment名稱
spec:                           #Deployment的規格說明
  replicas: 3                   #指定副本數爲3
  template:                     #定義Pod的模板
    metadata:                   #定義Pod的元數據
      labels:                   #定義label(標籤)
        app: nginx              #label的key和value分別爲app和nginx
    spec:                       #Pod的規格說明
      containers:               
      - name: nginx             #容器的名稱
        image: nginx:latest     #創建容器所使用的鏡像

①執行創建命令
#kubectl create -f nginx-master.yaml
在這裏插入圖片描述
②查看創建的資源
#kubectl get deployments -o wide
在這裏插入圖片描述
#kubectl get pod
在這裏插入圖片描述

二、進入pod

進入pod kubia-66c8b6d4fc-qhsrd(master節點)
#kubectl exec -it kubia-66c8b6d4fc-qhsrd bash

在這裏插入圖片描述

三、標籤

標籤其實就是一對key/value,可以附加到資源的任意鍵值對,標籤可以用來劃分特定組的對象,用以選擇具有改確切標籤的資源。
1.pod使用標籤
①pod指定標籤
#kubectl run http-label --image=httpd --labels=“app=web,env=prod”
在這裏插入圖片描述
②查看pod的標籤
#kubectl get pod -l app --show-labels
使用標籤篩選pod,通過-l app參數可篩選所有標籤爲app的pod
在這裏插入圖片描述
③修改現有標籤
#kubectl label pod http-label-7cf498876f-59mws env=debug --overwrite
在這裏插入圖片描述
#kubectl get pod --show-labels
在這裏插入圖片描述
④刪除標籤
#kubectl label pod http-label-7cf498876f-59mws env-
在這裏插入圖片描述
2.通過標籤指定pod創建的節點
給node節點打標籤
#kubectl label nodes master node=master
#kubectl label nodes node1 node=node1
#kubectl label nodes node2 node=node2
指定node創建pod
#vim httpd-node.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpd-node
spec:
  template:
    metadata:
      labels:
        env: prod
    spec:
      containers:
      - name: httpd-node
        image: httpd:latest
      nodeSelector:
        node: master

執行創建命令
#kubectl apply -f httpd-node.yaml
在這裏插入圖片描述

四、命名空間

Namespace是對一組資源和對象的抽象集合,比如可以用來將系統內部的對象劃分爲不同的項目組或用戶組。常見的pods, services, replication controllers和deployments等都是屬於某一個namespace的(默認是default)
1.查看命名空間
#kubectl get ns
在這裏插入圖片描述
2.查看指定命名空間的pod
#kubectl get pod --namespace=default
#kubectl get pod -n kube-system
在這裏插入圖片描述
3.創建命名空間
文件方式創建test01-namespace.yaml
#vim /data/shell/test01-namespace.yaml

apiVersion: v1
kind: Namespace
metadata: 
  name: test01-namespace

執行創建命令
①#kubectl apply -f test01-namespace.yaml
在這裏插入圖片描述
命令方式:
②#kubectl create ns test02-namespace
在這裏插入圖片描述
4.pod指定命名空間
①指定創建pod的命名空間爲test01-namespace
#kubectl run httpd --image=httpd -n test01-namespace
在這裏插入圖片描述
②查詢pod
#kubectl get pods -n test01-namespace
在這裏插入圖片描述
③命名空間切換
#alias kcd=‘kubectl config set-context $(kubectl config current-context) --namespace’
#kcd test01-namespace
在這裏插入圖片描述

五、擴容/縮容

創建文件nginx-scale.yaml並新建資源

apiVersion: extensions/v1beta1  #描述文件遵循extensions/v1beta1版本的Kubernetes API
kind: Deployment                #創建資源類型爲Deployment
metadata:                       #該資源元數據
  name: nginx-scale             #Deployment名稱
spec:                           #Deployment的規格說明
  replicas: 3                   #指定副本數爲3
  template:                     #定義Pod的模板
    metadata:                   #定義Pod的元數據
      labels:                   #定義label(標籤)
        env: prod               #label的key和value分別爲app和nginx
    spec:                       #Pod的規格說明
      containers:
      - name: nginx-scale       #容器的名稱      
        image: nginx:latest     #創建容器所使用的鏡像

①執行創建
#kubectl -apply -f nginx-scale.yaml
在這裏插入圖片描述
②查看資源
在這裏插入圖片描述
③文件方式擴容:通過修改文件中參數replicas的值並重新執行kubectl apply命令即可實現pod的擴縮容
在這裏插入圖片描述
④命令方式
#kubectl scale deployment nginx-scale --replicas=1
在這裏插入圖片描述

六、failover

1.pod節點分佈查看
#kubectl get pod -o wide --all-namespaces
在這裏插入圖片描述
2.faillover測試
節點node2關機
在這裏插入圖片描述
查看node狀態和pod分佈
#kubectl get pod -o wide --all
在這裏插入圖片描述
node2狀態爲NotReady且之前在該節點的pod被遷移至master或者node1.當node2恢復後,運行在該節點的Pod會被刪除,且遷移至master和node1的Pod不會重新調度回到node2。

七、升級及回滾

1.創建deployment
#vim nginx-roll.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-roll
  namespace: test02-namespace
spec:
  selector:
    matchLabels:
      env: prod
  replicas: 3
  template:
    metadata:
      labels:
        env: prod
    spec:
      containers:
      - name: nginx-roll
        image: nginx:1.16

創建deployment nginx-roll,副本數爲3,namespace爲test02-namespace,nginx版本爲1.16,–record參數會記錄歷史版本號。
#kubectl apply -f nginx-roll.yaml --record
查看部署資源pod
在這裏插入圖片描述
2.升級
升級的方式有多種,比如[kubectl edit deployments -n test02-namespace nginx-roll]方式,直接修改nginx-roll.yaml文件、kubectl set image方式等。
①修改文件方式
#sed -i ‘s/image: nginx:1.16/image: nginx:1.17/g’ nginx-roll.yaml
#kubectl apply -f nginx-roll.yaml --record
在這裏插入圖片描述
#kubectl rollout status deployment -n test02-namespace nginx-roll
在這裏插入圖片描述
②kubectl set image方式

#kubectl set image deployment -n test02-namespace nginx-roll nginx-roll=nginx:1.17.5

3.回滾
①查看deployments版本
#kubectl rollout history deployments -n test02-namespace nginx-roll
在這裏插入圖片描述
②查看deployment具體版本信息
#kubectl rollout history deployments -n test02-namespace nginx-roll --revision=1
在這裏插入圖片描述
③回滾至上一個版本
#kubectl rollout undo deployment -n test02-namespace nginx-roll
在這裏插入圖片描述
④查看
#kubectl rollout status deployment -n test02-namespace nginx-roll
在這裏插入圖片描述
⑤回滾至指定版本
#kubectl rollout undo deployment -n test02-namespace nginx-roll --to-revision=1
在這裏插入圖片描述
⑥查看
在這裏插入圖片描述
在這裏插入圖片描述

⑦查看Replicasets
#kubectl get replicasets -n test02-namespace -o wide
在這裏插入圖片描述
可以看到升級過程中replicaset保留了修改的歷史版本信息。

八、內網訪問

1.創建pod
#vim web-svc.yaml

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: web-svc
  namespace: test02-namespace
spec: 
  selector: 
    matchLabels: 
        app: web-svc
  replicas: 3
  template: 
    metadata: 
      labels: 
        app: web-svc
    spec: 
      containers: 
      - name: web-svc
        image: httpd:latest

#kubectl apply -f web-svc.yaml
在這裏插入圖片描述
2.內網訪問
創建service

#vim web-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: web-svc
  namespace: test02-namespace
spec:
  selector:
    app: web-svc
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80

①創建內網service
#kubectl apply -f web-svc.yaml
②查看創建的service
#kubectl get service -n test02-namespace
在這裏插入圖片描述
③修改index.html
在這裏插入圖片描述

master節點:echo '<html><body><h1>It works!web-svc-58956c55fc-z6msf</h1></body></html>'>index.html 
node1節點:echo '<html><body><h1>It works!web-svc-58956c55fc-dw5kk</h1></body></html>'>index.html
node2節點:echo '<html><body><h1>It works!web-svc-58956c55fc-bcpbx</h1></body></html>'>index.html

④內網訪問pod
#for i in {1…10};do sleep 1;curl 10.102.203.64:8080;done
在這裏插入圖片描述
3.外網訪問
修改service
新增’type: NodePort’和’nodePort: 30002’,通過NodePort方式外網訪問pod,映射端口爲30002,重新kubectl apply。(參考內網訪問)

apiVersion: v1
kind: Service
metadata:
  name: web-svc
  namespace: test02-namespace
spec:
  type: NodePort
  selector:
    app: web-svc
  ports:
  - protocol: TCP
    nodePort: 30002
    port: 8080
    targetPort: 80

外網訪問pod
#for i in {1…10};do sleep 1;curl 192.168.3.183:30002;done
在這裏插入圖片描述

九、日誌查看

使用kubectl logs命令可獲取pod日誌
1.查看最近的日誌
#kubectl logs web-svc-58956c55fc-bcpbx -n test02-namespace --tail=20
在這裏插入圖片描述
‘–tail=20’:查看命名空間test02-namespace下web-svc-58956c55fc-bcpbx最近20行的日誌,
2.查看前一個容器的日誌
#kubectl logs web-svc-58956c55fc-bcpbx -n test02-namespace --previous
3.通過標籤查看日誌
#kubectl logs -lapp=web
查看標籤爲‘app=web’的日誌;’-lapp=web’該日誌是標籤爲’app=web’的合集
在這裏插入圖片描述

十、刪除pod

1.通過刪除deployment刪除pod
通過deployment創建pod可以直接刪除deployment
#kubectl delete deployments kubia
在這裏插入圖片描述
2.通過刪除namespace刪除pod
①刪除namespace中所有資源
#kubectl delete all --all -n test01-namespace
在這裏插入圖片描述
②直接刪除namespace
#kubectl delete ns test01-namespace
在這裏插入圖片描述
總結:
直接刪除pod會重建一個新的不同名的pod;
直接刪除replicasets會重建同名replicasets,其下所有pod則會刪除重建且名字不同;
直接刪除deployments則其下的replicasets和pod將一起被刪除;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章