黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 k8s常用命令匯總

k8s常用命令匯總

更新時間:2022-05-30 10:43:21 來源:動力節點 瀏覽3642次

kubectl相關

命令

1.基本命令

命令 作用
create 創建資源
edit 編輯資源
get 獲取資源
patch 更新(修改)資源
delete 刪除資源
explain 展示資源文檔

2.運行/調試命令

命令 作用
run 在集群中運行指定鏡像
expose 暴露資源為service
describe 展示資源內部信息
logs 輸出容器在pod中的日志
attach 進入運行中的容器
cp 在pod內外復制文件
rollout 管理資源的發布
scale 擴/縮容Pod數量
autoscale 自動調整pod數量

資源分類

1.集群級別資源

資源名稱 縮寫 說明 資源作用
nodes no node節點 集群組成部分
namespace ns 命名空間 隔離Pod

2.pod資源

 

資源名稱 縮寫 說明 資源作用
pods po pod 裝載容器的最小單元

3.pod資源控制器

資源名稱 縮寫 說明 資源作用
replicationcontroller rc   控制pod資源
replicasets rs   控制pod資源
daemonsets ds   控制pod資源
jobs     控制pod資源
cronjobs cj   控制pod資源
horizontalpodautoscalers hpa   控制pod資源
statefulsets sts   控制pod資源

4.服務發現資源

資源名稱 縮寫 說明 資源作用
services svc 服務 統一pod對外接口
ingress ing   統一pod對外接口

參數

參數 說明
-A 展示所有
-f 指定文件
-k 處理kustomization目錄。此標志不能與-f或-R一起使用。
-L 指定標簽lebel
-o 指定輸出格式,常用的有json、yaml、wide(詳細列表)
-R 遞歸處理-f,–filename中使用的目錄。在需要管理時非常有用
-l 要進行篩選的選擇器(只支持標簽查詢),支持“=”、“=”和“!=”。(例如-l鍵1=value1,鍵2=value2)
用法示例:kubectl get pod -l "key=value"
-w 持續跟蹤命令的狀態或者事件變化,類似tail -f功能
-n 指定命名空間,--namepace的縮寫
-i 即使未連接任何組件,也要保持pod中容器上的stdin打開。
-t 為pod中的每個容器分配了一個tty。

資源管理方式

命令行敲出的指令分為2種,

其中kubectl、run、create、apply 等等都是命令,

前面帶-或者--的都是參數,比如--port、-image、-n

資源管理方式分類

類型 操作對象 適用環境 優點 缺點 使用頻率
命令式對象管理 對象 測試 簡單 只操作活動對象,無法審計、跟蹤 較少
命令式對象配置 文件 開發 可以審計跟蹤 項目大時,配置文件多,操作麻煩 常用
聲明式對象配置 目錄 開發 支持目錄操作 意外情況下難以調試 較少

1.命令式對象管理

直接使用命令去操作k8s資源,命令和參數一起出現

kubectl run nginx-pod --image=nginx:1.17.1 --port=80

2.命令式對象配置

通過命令和配置文件去操作作k8s資源,命令還是那個命令,只不過參數都放在配置文件里面

kubectl create/patch -f nginx-pod.yaml

3.聲明式對象配置

kubectl apply -f nginx-pod.yaml

使用apply創建資源,

如果資源不存在,就創建,相當于執行kubectl create -f nginx-pod.yaml

如果資源存在,就修改,相當于執行kubectl patch -f nginx-pod.yaml

node

1.獲取所有節點

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   15h   v1.20.9
node1    Ready    <none>                 13h   v1.20.9
node2    Ready    <none>                 11h   v1.20.9

說明

NAME : 節點名稱

STATUS :節點狀態

Ready : 已就緒

NotReady:未就緒

ROLES :角色

AGE:運行時長,從啟動到現在運行了多長時間

VERSION : 版本

2.刪除節點

在master節點執行以下命令即可刪除

# 先卸載節點,但是還未刪除
 kubectl drain node1 --delete-local-data --force --ignore-daemonsets
# 刪除節點
kubectl delete node node2

還需要在work節點上執行以下命令來清空ini配置

kubeadm reset

3.加入節點

先在主節點創建令牌

# 執行后會返回一個 kubeadm 開頭的命令
kubeadm token create --print-join-command

然后在需要加入集群的節點中執行令牌,注意這里的命令是通過kubeadm token create --print-join-command命令返回的結果

# 在工作節點上執行以下命令即可加入集群
kubeadm join cluster-endpoint:6443 --token xxx.xxx     --discovery-token-ca-cert-hash sha256:xxx

namespace

1.獲取所有namespace

# 第一種用法
[root@master ~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   16h   # 所有未指定namespace的對象都會被分配在default空間
kube-node-lease   Active   16h   # 集群節點之間的心跳維護,v1.13開始引入
kube-public       Active   16h   # 此命名空間可以被所有人訪問(包括未認證用戶)
kube-system       Active   16h   # k8s系統空間,所有由k8s創建的資源都分配到這個空間
# 第二種用法
kubectl get namespace
# 第三種用法
kubectl get ns

2.獲取某個命名空間

# 獲取名為default的namespace
kubectl get ns default

3.獲取namespace為default的的描述信息

[root@master ~]# kubectl describe ns default
Name:         default
Labels:       <none>
Annotations:  <none>
Status:       Active
No resource quota.   # 針對namespace做的資源限制
No LimitRange resource. # LimitRange 針對 namespace中每個組件做的資源限制

說明

Status

Active :正在使用,

Terminating :正在刪除namespace

4.創建namespace

記住,名稱中不能用下劃線_,可以用橫行-

第一種創建方式–命令行創建

kubectl create ns xxx

第二種創建方式–命令行 + 配置文件

創建一個名為namespace-dev.yaml的文件,內容如下(注意大小寫,kind的頭字母必須大寫)

apiVersion: v1
kind: Namespace
metadata: 
  name: dev

然后偶執行命令進行創建

kubectl create -f namespace-dev.yaml

5.刪除namespace

需要注意的是,刪除后,當前命名空間下的pod、deployment、container也會一起刪掉

第一種–使用命令刪除

kubectl delete ns xxx

第二種–使用配置文件刪除

kubectl delete -f namespace-dev.yaml

6.查看命名空間詳情

kubectl describe ns xxx

pod

1.獲取所有pod

[root@master ~]# kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS                            RESTARTS   AGE
kube-system   calico-kube-controllers-7498f6cbdd-k6m4q   0/1     Running                           20         10h
kube-system   calico-node-5bj92                          0/1     Init:0/2                          1          10h
kube-system   calico-node-fqn48                          0/1     Init:0/2                          0          10h
kube-system   calico-node-r2ln8                          0/1     Init:0/2                          1          10h
kube-system   coredns-5897cd56c4-vnw4c                   0/1     ContainerCreating                 0          15h
kube-system   coredns-5897cd56c4-zvwdn                   0/1     ContainerCreating                 0          15h
第二種用法
kubectl get pods -A 
第三種用法
kubectl get po -A

說明

NAMESPACE :名稱空間

NAME:Pod名稱

READY:已準備好的實例數/總實例數

STATUS:狀態

Running:運行中

Init:0/2 : 正在初始化 已初始化完成數量/總數

ContainerCreating : 容器正在創建中,需要注意的是,如果長時間還是這個狀態的話,就是有錯誤了,需通過命令kubectl describe pod podName查看原因

RESTARTS : 重啟次數

AGE:運行時長

獲取所有namespace的pod并監視資源變動

加上-w 表示監視資源變動信息,此時命令行進入阻塞狀態,如果pod有變化將會馬上呈現出來;

kubectl get pod -A -w

其他參數

# -n 表示獲取指定namespace的pod
kubectl get pod  -n kube-system
# 如果不加 -n 參數,默認獲取的是default下的pod,所以以下2個命令的執行結果是一樣的
kubectl get pod 
kubectl get pod -n default

2.創建pod

因為pod里面至少要有一個容器,所以pod是和容器一起創建的,新建一個文件pod.ymal,內容如下

apiVersion: v1
kind: Pod
metadata: 
  name: pod-name
  namespace: dev
spec: 
  containers: 
    - image: nginx:1.17.1
      name: nginx-container
      ports: 
        - name: nginx-port
          containerPort: 80
          protocol: TCP

然后執行命令并指定配置文件進行創建

kubectl create -f pod.ymal

3.修改pod

4.刪除pod

如果只是單純的刪除pod,你會發現,刪除了之后,k8s會自動啟動了另一個pod,這是因為當前pod是由pod控制器創建的,控制器會監控pod狀態,一旦pod死亡,會立即重建,所以想要刪除pod就得先刪除deployment。刪除后,與此deployment關聯的pod也會一起刪除;

如果不刪除delployment的話,這里的刪除pod只是充當一個重啟的作用;

如果是創建時未指定pod控制器,那就可以使用以下命令直接刪除pod

# 刪除deployment,刪除后,與此deployment關聯的pod也會一起刪除
kubectl delete deployment xxx
# 刪除pod
kubectl delete pod xxx

label

1.為資源打標簽(第一種方式:使用命令打標簽)

# 為pod資源打標簽,需要注意的是,打標簽之前,pod必須提前創建好
kubectl label pod pod-name labelKey=labelValue -n deplot-name 
# 為node資源打標簽
kubectl label nodes node1 nodetag=node1

2.為資源打標簽(第二種方式:使用配置文件打標簽)

以下示例是為pod資源打標簽,這種方式是和pod一起創建的,新建一個配置文件 label.yaml

apiVersion: v1
kind: Pod
metadata: 
  name: pod-name
  namespace: dev
  labels: 
    lebelKey1: "labelValue1"
    lebelKey2: "labelValue2"
    lebelKey3: "labelValue3"
spec: 
  containers: 
    - image: nginx:1.17.1
      name: nginx-container
      ports: 
        - name: nginx-port
          containerPort: 80
          protocol: TCP

執行命令創建pod

kubectl apply -f label.ymal

3.更新標簽

適合更新label值,前提是label的key必須已存在;

kubectl label pod pod-name labelKey=labelValue -n deplot-name  --overwrite

4.查看標簽

kubectl get pod pod-name  -n dev --show-labels

5.篩選標簽

# 查詢lebelKey1=labelValue1的pod
kubectl get pod  -n dev -l lebelKey1=labelValue1 --show-labels
# 查詢A不等于B的pod
kubectl get pod  -n dev -l A!=B --show-labels

6..刪除標簽

刪除key為lebelKey的標簽

# 刪除pod資源的表標簽
kubectl label pod ymal-create-pod-name lebelKey- -n dev
# 刪除node資源的標簽

pod控制器(deployment)

pod控制器有很多種,我們這里就用deployment

1.創建deployment(第一種方式:命令行創建)

使用以下run命令運行一個nginx,deployment名稱為app=run-cmd-nginx-deploy-3

kubectl create deployment app=run-cmd-nginx-deploy-3 --image=nginx:1.17.1 --port=80 --replicas=3 -n dev
# 說明
 nginx-deploy # pod控制器的名稱,也就是deployment,
 --image=nginx:1.17.1 # 指定鏡像版本
 --port=80 # 指定nginx的端口
 --replicas=3 # 創建三個副本,也就是會創建三個pod(注意:在k8s版本v1.8以后,r--eplicas已失效,建議使用deployment,不過僅僅是run命令失效,create 和yaml配置文件還是有效的)
 -n dev # 指定namespace

通過以下命令可以看到,會自動生成一個app=run-cmd-nginx-deploy-3的標簽

[root@master ~]# kubectl get deployment -o wide -n dev --show-labels
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR                     LABELS
run-cmd-nginx-deploy-3   3/3     3            3           18m   nginx        nginx:1.17.1   app=run-cmd-nginx-deploy-3   app=run-cmd-nginx-deploy-3

2.創建deployment(第二種方式:yaml配置文件創建)

新建一個deployment.yaml文件,內容如下

apiVersion: apps/v1  # 前面的apps/必須這樣寫,斜杠后面隨便寫,暫不知為何
kind: Deployment  # 創建deployment
metadata: 
  name: ymal-deployment-name  # deployment名稱
  namespace: dev  # 所屬命名空間
spec: 
  replicas: 3  # 副本數量
  selector: 
    matchLabels:  # 匹配標簽
      deploy-label-1: ymal-label    # 此選擇器和下面的template.metadata..labels進行關聯,可以發現這倆值是一樣的,一樣的值就會進行關聯
  template:  # pod模板
    metadata:  # 以下是pod配置
      labels: 
        deploy-label-1: ymal-label
    spec: 
      containers:  # 以下是容器配置
      - image: nginx:1.17.1
        name: nginx-container
        ports: 
        - name: nginx-port
          containerPort: 80
          protocol: TCP

3.查詢deployment的詳細信息

# 查看deployment詳細信息
kubectl describe deployment xxx -n dev
# 查看所有的deplyment
kubectl get deployment -A
# 查詢某個deployment
kubectl get deployment xxx -n dev
# 模糊查詢 
kubectl get deployment -A | grep xxx
# 查詢deployment下的所有pod
kubectl get pod -A | grep deployment-name

4.刪除deployment

需要注意的是,一旦刪除pod控制器,此pod控制器下的所有pod和容器也會一并刪除;

# 第一種刪除方式,直接命令刪除
kubectl delete deployment xxx -n dev
# 第二種刪除方式,使用配置文件進行刪除
kubectl delete -f deployment.yaml

service

1.創建service–命令行方式創建

默認創建的pod是只能對內訪問的,所以需要創建一個對外的訪問端口,創建一個service其實就是暴露對外的訪問端口

kubectl expose deployment xxx --name=service-name --port=80 --target-port=80 --type=NodePort

說明

expose deployment xxx : 需要暴露的deployment名稱

--name :service名稱

--port : service 暴露的端口

--target-port : 目標端口,也就是pod容器中的端口

--type:service類型,分為以下幾個

ClusterIP:默認值,它是Kubernetes系統自動分配的虛擬IP,只能在集群內部訪問

NodePort:將Service通過指定的Node上的端口暴露給外部,通過此方法,就可以在集群外部訪問服務

LoadBalancer:使用外接負載均衡器完成到服務的負載分發,注意此模式需要外部云環境支持

ExternalName: 把集群外部的服務引入集群內部,直接使用

創建好service之后,查看service信息,可以看到,暴露的端口為:30474,

外部訪問:因為博主這邊是虛擬機,所以使用主機的ip:端口,也就是192.168.253.131:30474就可以訪問到頁面了;

內部訪問:直接在虛擬機內訪問10.96.216.128:80即可

[root@master ~]# kubectl get svc -n dev
NAME                TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
ymal-service-name   NodePort   10.96.216.128   <none>        80:30474/TCP   10m
# 說明
  CLUSTER-IP  # 此ip只能內部訪問
  PORT(S)     # 我們看到上面有2個端口80:30474,80是內部訪問端口,30474是外部訪問的端口;

2.創建service(ymal方式創建)

新建一個service.ymal文件,內容如下

apiVersion: v1
kind: Service
metadata: 
  name: service-name
  namespace: dev
spec: 
  clusterIP: 10.96.98.123
  ports: 
  - port: 80
    protocol: TCP
    targetPort: 80
  selector: # 標簽選擇器,需要和deployment的label一致
    deploy-label-1: ymal-label
  type: NodePort

3.查看service

以下三種用法都可以

# 第一種
kubectl get services
# 第二種
kubectl get services
# 第三種
kubectl get svc

4.刪除service

kubectl delete service xxx

組合查詢

查詢pod控制器和pod

kubectl get deployment,pod -n dev

endpoint

Endpoint是kubernetes中的一個資源對象,存儲在etcd中,用來記錄一個service對應的所有pod的訪問地址,它是根據service配置文件中selector描述產生的。

一個Service由一組Pod組成,這些Pod通過Endpoints暴露出來,Endpoints是實現實際服務的端點集合。換句話說,service和pod之間的聯系是通過endpoints實現的。

每創建一個service,k8s會自動創建一個同名的 Endpoint出來

1.查看 endpoint

# 一定要加s
kubectl get endpoints -n dev
# 查看endpoint的詳細信息
kubectl describe endpoints -n dev

2.刪除endpoint

如果是由service創建出來的endpoints,刪除后會馬上創建出一個同名的endpoint出來,如果要刪除必須先刪除service

kubectl delete endpoints xxxx -n dev

3.創建endpoint

因為每次創建一個service,k8s會自動創建一個同名的 Endpoint出來,所我們直接創建service就可以了

kind: Service
apiVersion: v1
metadata:
  name: nginx
  namespace: dev
spec:
  type: ClusterIP
  ports:
  - name: app-port
    protocol: TCP
    port: 80
    targetPort: 80
  selector:
    app: nginx-pod

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 精品一区二区三区影院在线午夜 | 黄色在线免费网站 | 天干天干啦夜天天天视频 | 日韩在线观看一区二区不卡视频 | 亚洲欧美在线观看播放 | 欧美一级在线视频 | 手机看片1024国产 | 不卡午夜视频 | 快播视频在线观看 | 激情性爽三级成人 | 午夜视频一区二区三区 | 制服丝袜在线播放 | 欧美成人一区二区三区不卡视频 | xxxx性中国| 欧美视频福利 | 天天上天天操 | 国产精品免费久久 | 日韩精品特黄毛片免费看 | 插射视频 | 日韩在线天堂 | 亚洲国产欧美在线 | 女厕所vedioxxxx | 高清一级毛片免免费看 | 日日噜噜夜夜狠狠久久丁香婷婷 | 无遮挡男女激烈免费动态图 | 午夜在线影院 | 成人网在线视频 | 欧美日韩欧美 | 热久久国产欧美一区二区精品 | 成人免费视频大全 | 人人干人人干人人干 | 国产伦理精品 | 香蕉视频免费在线观看 | 成人看免费一级毛片 | free极度另类性欧美 | 黄色网址中文字幕 | 国产精品午夜在线播放a | 日韩一区二区三区四区五区 | 国产激情视频一区二区三区 | 欧美成人精品第一区 | 中文字幕免费视频精品一 |