K8S(02)管理核心資源的三種基本方法


系列文章說明

本系列文章,可以基本算是 老男孩2019年王碩的K8S周末班課程 筆記,根據視頻來看本筆記最好,否則有些地方會看不明白
需要視頻可以聯系我

管理k8s核心資源的三種基本方法:

1 方法分類

  1. 陳述式--主要依賴命令行工具kubectl進行管理
    • 優點
      可以滿足90%以上的使用場景
      對資源的增、刪、查操作比較容易
    • 缺點
      命令冗長,復雜,難以記憶
      特定場景下,無法實現管理需求
      對資源的修改麻煩,需要patch來使用json串更改。
  2. 聲明式-主要依賴統一資源配置清單進行管理
  3. GUI式-主要依賴圖形化操作界面進行管理

2 kubectl命令行工具

kubectl中文命令說明

2.0 增加kubectl自動補全

二進制安裝的k8s,kubectl工具沒有自動補全功能(其他方式安裝的未驗證),可以使用以下方式開啟命令自動補全

source <(kubectl completion bash)

2.1 get 查

2.1.1 查看名稱空間namespace

~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   4d11h
kube-node-lease   Active   4d11h
kube-public       Active   4d11h
kube-system       Active   4d11h

# namespaces可以簡寫為ns
kubectl get ns
# 但不是所有資源都可以簡寫,所以我還是習慣tab補全名

2.1.2 查看namespace中的資源

get all查詢所有資源

kubectl get all
# 默認是查詢default名稱空間的資源,查詢其他名稱空間,需要加 -n namespaces
kubectl get all -n kube-public

mark

一般要養成習慣,get任何資源的時候,都要加上-n參數指定名稱空間

get pods查詢所有pod

podsecuritypolicies.extensions  
~]# kubectl get pods -n default 
NAME             READY   STATUS    RESTARTS   AGE
nginx-ds-p66qh   1/1     Running   0          2d10h

get nodes查詢所有node節點

~]# kubectl get nodes -n default 
NAME                STATUS     ROLES         AGE     VERSION
hdss7-21.host.com   Ready      master,node   2d12h   v1.15.5
hdss7-22.host.com   NotReady   <none>        2d12h   v1.15.5

2.1.3 -o yaml查看資源配置清單詳細信息

-o yaml 可以查看yaml格式的資源配置清單詳情

# 查看POD的清單
~]# kubectl -n kube-public get pod nginx-dp-568f8dc55-jk6nb  -o yaml
# 查看deploy的清單
~]# kubectl -n kube-public get deploy nginx-dp -o yaml
# 查看service的清單
~]# kubectl -n kube-public get service -o yaml -n kube-public

2.2 創建刪除名稱空間

create namespace創建名稱空間

~]# kubectl create namespace app
namespace/app created
~]# kubectl get namespaces 
NAME              STATUS   AGE
app               Active   16s
default           Active   4d11h
kube-node-lease   Active   4d11h
kube-public       Active   4d11h
kube-system       Active   4d11h

delete namespaces刪除名稱空間

~]# kubectl delete namespaces app
namespace "app" deleted
~]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   4d11h
kube-node-lease   Active   4d11h
kube-public       Active   4d11h
kube-system       Active   4d11h

2.3 管理POD控制器和POD

deployment類型的POD控制為例,關於POD控制器類型,請參考官網

創建POD控制器

kubectl create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9 -n kube-public
~]# kubectl get deployments -n kube-public 
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-dp   1/1     1            1           18s
~]# kubectl get pod  -n kube-public 
NAME                       READY   STATUS    RESTARTS   AGE
nginx-dp-568f8dc55-9qt4j   1/1     Running   0          7m50s

-o wide查看擴展信息

# 查看POD控制器信息,比基礎信息多出了鏡像來源,選擇器等
kubectl get deployments -o wide -n kube-public
# 查看POD信息,比基礎信息多出了POD的IP地址,節點位置等,
kubectl get pod -o wide -n kube-public

mark

describe查看資源詳細信息

# 查看POD控制器詳細信息
kubectl describe deployments nginx-dp -n kube-public
# 查看POD詳細信息
kubectl describe pod nginx-dp-568f8dc55-9qt4j -n kube-public

exec進入某個POD

kubectl -n kube-public exec -it  nginx-dp-568f8dc55-9qt4j bash

用法與docker exec類似

scale 擴容POD

kubectl -n kube-public scale deployments nginx-dp --replicas=2 

delete刪除POD和POD控制器

~]# kubectl -n kube-public delete pods nginx-dp-568f8dc55-9qt4j 
pod "nginx-dp-568f8dc55-9qt4j" deleted
~]# kubectl -n kube-public get pods
NAME                       READY   STATUS    RESTARTS   AGE
nginx-dp-568f8dc55-hnrxr   1/1     Running   0          13s
~]# kubectl -n kube-public delete deployments nginx-dp 
deployment.extensions "nginx-dp" deleted
~]# kubectl -n kube-public get pods
No resources found.

在POD控制器存在的情況下,刪除了POD,會由POD控制器再創建出新的POD
刪除POD控制器后,對應的POD也會一並刪除

2.4 service資源管理

從上面的POD刪除重建的過程可知,雖然POD會被POD控制器拉起,但是存放的NODE或POD的IP都是不確定的,那怎么對外穩定的提供服務呢

這就需要引入service的功能了,它相當於一個反向代理,不管后端POD怎么變化,server提供的服務都不會變化,可以為pod資源提供穩定的接入點

2.4.1 創建service資源

~]# kubectl -n kube-public create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9
deployment.apps/nginx-dp created
~]# kubectl -n kube-public expose deployment nginx-dp --port=80 
service/nginx-dp exposed
~]# kubectl -n kube-public get service 
NAME       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
nginx-dp   ClusterIP   192.168.94.73   <none>        80/TCP    45s

可以看到創建了一個VIP192.168.94.73,查看LVS信息,可以看到轉發條目

[root@hdss7-21 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
......    
TCP  192.168.94.73:80 nq
  -> 172.7.21.3:80                Masq    1      0          0 

2.4.2 擴容POD看service怎么調度

~]# kubectl -n kube-public scale deployment nginx-dp --replicas=2
deployment.extensions/nginx-dp scaled
~]# ipvsadm -Ln
......
TCP  192.168.94.73:80 nq
  -> 172.7.21.3:80                Masq    1      0          0         
  -> 172.7.22.4:80                Masq    1      0          0       

2.5 explain查看屬性的定義和用法

查看service資源下metadata的定義及用法

kubectl explain service.metadata

mark

3 統一資源配置清單

統一資源配置清單,就是一個yaml格式的文件,文件中按指定格式定義了所需內容,然后通過命令行工具kubectl應用即可

3.1 語法格式

kubectl create/apply/delete -f /path_to/xxx.yaml

3.1.1 學習方法

  1. 忌一來就無中生有自己寫,容易把自己憋死
  2. 先看官方或別人寫的,能讀懂即可
  3. 別人的讀懂了能改改內容即可
  4. 遇到不懂的用kubectl explain查幫助

3.2 初略用法

3.2.1 查看已有資源的資源配置清單

kubuctl get svc nginx-dp -o yaml -n kube-pubic

mark

必須存在的四個部分為:
apiVersion
kind
metadata
spec

資源配置清單中有許多項目,如果想查看資源配置清單中某一項的意義或該項下面可以配置的內容,可以使用explain來獲取

kubectl explain service.kind

3.2.2 創建並應用資源配置清單

創建yaml配置文件

cat >nginx-ds-svc.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-ds
  name: nginx-ds
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-ds
  type: ClusterIP
EOF

應用配置創建資源

kubectl create -f nginx-ds-svc.yaml
# 或
kubectl apply -f nginx-ds-svc.yaml

# 查看結果
[root@hdss7-21 ~]# kubectl  get -f nginx-ds-svc.yaml 
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-ds   ClusterIP   192.168.48.225   <none>        80/TCP    24s

create和apply的區別

create命令和apply命令都會根據配置文件創建資源,但是:

  1. create命令只會新建,如果資源文件已使用過,則會提示錯誤

  2. 如果資源不存在,apply命令會新建,如果已存在,則會根據配置修改

  3. 如果是create命令新建的資源,使用apply修改時會提示

    [root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml 
    Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
    

    意思是如果要用apply修改,就應該用apply命令創建,或者create創建時加--save-config參數

  4. 所以養成使用apply命令的習慣即可

3.2.3 修改資源配置清單

在線修改
使用edit命令,會打開一個在線的yaml格式文檔,直接修改該文檔后,修改立即生效

kubectl edit svc nginx-ds -n default

# 查看結果
[root@hdss7-21 ~]# kubectl get service nginx-ds 
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
nginx-ds   ClusterIP   192.168.48.225   <none>        8080/TCP   2m37s

離線修改
離線修改就是修改原來的yaml文件,然后使用apply命令重新應用配置即可

#將對外暴露的端口改為881
sed -i 's#port: 80#port: 881#g' nginx-ds-svc.yaml

# edit修改過資源,再用apply修改,會報錯
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml 
The Service "nginx-ds" is invalid: 
* spec.ports[0].name: Required value
* spec.ports[1].name: Required value

# 加上--force強制修改選項
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml --force 
service/nginx-ds configured

# 查看結果
[root@hdss7-21 ~]# kubectl get service nginx-ds 
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-ds   ClusterIP   192.168.142.98   <none>        881/TCP   8s

3.2.4 刪除資源配置清單

陳述式刪除
即:直接刪除創建好的資源

kubectl delete svc nginx-ds -n default

聲明式刪除
即:通過制定配置文件的方式,刪除用該配置文件創建出的資源

kubectl delete -f nginx-ds-svc.yaml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM