kubectl相關(guān)
命令
kind 所有類型
# kind 所有類型
kubectl api-resources -o wide --namespaced=true
1搂蜓、基本命令
命令 | 作用 |
---|---|
create | 創(chuàng)建資源 |
edit | 編輯資源 |
get | 獲取資源 |
patch | 更新(修改)資源 |
delete | 刪除資源 |
explain | 展示資源文檔 |
2畦韭、運(yùn)行/調(diào)試命令
命令 | 作用 |
---|---|
run | 在集群中運(yùn)行指定鏡像 |
expose | 暴露資源為service |
describe | 展示資源內(nèi)部信息 |
logs | 輸出容器在pod中的日志 |
attach | 進(jìn)入運(yùn)行中的容器 |
cp | 在pod內(nèi)外復(fù)制文件 |
rollout | 管理資源的發(fā)布 |
scale | 擴(kuò)/縮容Pod數(shù)量 |
autoscale | 自動調(diào)整pod數(shù)量 |
資源分類
1蜜自、集群級別資源
資源名稱 | 縮寫 | 說明 | 資源作用 |
---|---|---|---|
nodes | no | node節(jié)點(diǎn) | 集群組成部分 |
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复局、服務(wù)發(fā)現(xiàn)資源
資源名稱 | 縮寫 | 說明 | 資源作用 |
---|---|---|---|
services | svc | 服務(wù) | 統(tǒng)一pod對外接口 |
ingress | ing | 統(tǒng)一pod對外接口 |
參數(shù)
參數(shù) | 說明 |
---|---|
-A | 展示所有 |
-f | 指定文件 |
-k | 處理kustomization目錄。此標(biāo)志不能與-f或-R一起使用晤柄。 |
-L | 指定標(biāo)簽lebel |
-o | 指定輸出格式擦剑,常用的有json、yaml、wide(詳細(xì)列表) |
-R | 遞歸處理-f惠勒,–filename中使用的目錄赚抡。在需要管理時非常有用 |
-l | 要進(jìn)行篩選的選擇器(只支持標(biāo)簽查詢),支持“=”纠屋、“=”和“涂臣!=”。(例如-l鍵1=value1售担,鍵2=value2) |
用法示例: | kubectl get pod -l "key=value" |
-w | 持續(xù)跟蹤命令的狀態(tài)或者事件變化赁遗,類似tail -f 功能 |
-n | 指定命名空間,--namepace 的縮寫 |
-i | 即使未連接任何組件,也要保持pod中容器上的stdin打開族铆。 |
-t | 為pod中的每個容器分配了一個tty岩四。 |
資源管理方式
命令行敲出的指令分為2種,
- 其中
kubectl
哥攘、run
剖煌、create
、apply
等等都是命令逝淹, - 前面帶
-
或者--
的都是參數(shù)耕姊,比如--port
、-image
栅葡、-n
資源管理方式分類
類型 | 操作對象 | 適用環(huán)境 | 優(yōu)點(diǎn) | 缺點(diǎn) | 使用頻率 |
---|---|---|---|---|---|
命令式對象管理 | 對象 | 測試 | 簡單 | 只操作活動對象茉兰,無法審計、跟蹤 | 較少 |
命令式對象配置 | 文件 | 開發(fā) | 可以審計跟蹤 | 項目大時欣簇,配置文件多邦邦,操作麻煩 | 常用 |
聲明式對象配置 | 開發(fā) | 支持目錄操作 | 意外情況下難以調(diào)試 | 較少 |
1、命令式對象管理
直接使用命令去操作k8s資源醉蚁,命令和參數(shù)一起出現(xiàn)
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
2、命令式對象配置
通過命令和配置文件去操作作k8s資源鬼店,命令還是那個命令网棍,只不過參數(shù)都放在配置文件里面
kubectl create/patch -f nginx-pod.yaml
3、聲明式對象配置
kubectl apply -f nginx-pod.yaml
使用apply創(chuàng)建資源妇智,
- 如果資源不存在滥玷,就創(chuàng)建,相當(dāng)于執(zhí)行
kubectl create -f nginx-pod.yaml
- 如果資源存在巍棱,就修改惑畴,相當(dāng)于執(zhí)行
kubectl patch -f nginx-pod.yaml
node
1、獲取所有節(jié)點(diǎn)
[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 : 節(jié)點(diǎn)名稱
- STATUS :節(jié)點(diǎn)狀態(tài)
- Ready : 已就緒
- NotReady:未就緒
- ROLES :角色
- AGE:運(yùn)行時長航徙,從啟動到現(xiàn)在運(yùn)行了多長時間
- VERSION : 版本
2如贷、刪除節(jié)點(diǎn)
在master節(jié)點(diǎn)執(zhí)行以下命令即可刪除
# 先卸載節(jié)點(diǎn),但是還未刪除
kubectl drain node1 --delete-local-data --force --ignore-daemonsets
# 刪除節(jié)點(diǎn)
kubectl delete node node2
還需要在work節(jié)點(diǎn)上執(zhí)行以下命令來清空ini配置
kubeadm reset
3、加入節(jié)點(diǎn)
先在主節(jié)點(diǎn)創(chuàng)建令牌
# 執(zhí)行后會返回一個 kubeadm 開頭的命令
kubeadm token create --print-join-command
然后在需要加入集群的節(jié)點(diǎn)中執(zhí)行令牌杠袱,注意這里的命令是通過kubeadm token create --print-join-command
命令返回的結(jié)果
# 在工作節(jié)點(diǎn)上執(zhí)行以下命令即可加入集群
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 # 集群節(jié)點(diǎn)之間的心跳維護(hù),v1.13開始引入
kube-public Active 16h # 此命名空間可以被所有人訪問(包括未認(rèn)證用戶)
kube-system Active 16h # k8s系統(tǒng)空間楣富,所有由k8s創(chuàng)建的資源都分配到這個空間
# 第二種用法
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
3庄萎、創(chuàng)建namespace
記住,名稱中不能用下劃線_
塘安,可以用橫行-
第一種創(chuàng)建方式–命令行創(chuàng)建
kubectl create ns xxx
第二種創(chuàng)建方式–命令行 + 配置文件
創(chuàng)建一個名為namespace-dev.yaml的文件糠涛,內(nèi)容如下(注意大小寫,kind的頭字母必須大寫)
apiVersion: v1
kind: Namespace
metadata:
name: dev
然后偶執(zhí)行命令進(jìn)行創(chuàng)建
kubectl create -f namespace-dev.yaml
4耙旦、刪除namespace
需要注意的是脱羡,刪除后,當(dāng)前命名空間下的pod免都、deployment锉罐、container也會一起刪掉
第一種–使用命令刪除
kubectl delete ns xxx
第二種–使用配置文件刪除
kubectl delete -f namespace-dev.yaml
5、查看命名空間詳情
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:已準(zhǔn)備好的實例數(shù)/總實例數(shù)
- STATUS:狀態(tài)
-
Running
:運(yùn)行中 -
Init:0/2
: 正在初始化 已初始化完成數(shù)量/總數(shù) -
ContainerCreating
: 容器正在創(chuàng)建中脓规,需要注意的是,如果長時間還是這個狀態(tài)的話险领,就是有錯誤了侨舆,需通過命令kubectl describe pod podName
查看原因
-
- RESTARTS : 重啟次數(shù)
- AGE:運(yùn)行時長
獲取所有namespace的pod并監(jiān)視資源變動
加上-w
表示監(jiān)視資源變動信息,此時命令行進(jìn)入阻塞狀態(tài)绢陌,如果pod有變化將會馬上呈現(xiàn)出來挨下;
kubectl get pod -A -w
其他參數(shù)
# -n 表示獲取指定namespace的pod
kubectl get pod -n kube-system
# 如果不加 -n 參數(shù),默認(rèn)獲取的是default下的pod脐湾,所以以下2個命令的執(zhí)行結(jié)果是一樣的
kubectl get pod
kubectl get pod -n default
2臭笆、創(chuàng)建pod
因為pod里面至少要有一個容器,所以pod是和容器一起創(chuàng)建的秤掌,新建一個文件pod.ymal
愁铺,內(nèi)容如下
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
然后執(zhí)行命令并指定配置文件進(jìn)行創(chuàng)建
kubectl create -f pod.ymal
3、修改pod
4闻鉴、刪除pod
- 如果只是單純的刪除pod茵乱,你會發(fā)現(xiàn),刪除了之后孟岛,k8s會自動啟動了另一個pod瓶竭,這是因為當(dāng)前pod是由pod控制器創(chuàng)建的督勺,控制器會監(jiān)控pod狀態(tài),一旦pod死亡在验,會立即重建玷氏,所以想要刪除pod就得先刪除deployment。刪除后腋舌,與此deployment關(guān)聯(lián)的pod也會一起刪除盏触;
- 如果不刪除delployment的話,這里的刪除pod只是充當(dāng)一個重啟的作用块饺;
- 如果是創(chuàng)建時未指定pod控制器赞辩,那就可以使用以下命令直接刪除pod
# 刪除deployment,刪除后授艰,與此deployment關(guān)聯(lián)的pod也會一起刪除
kubectl delete deployment xxx
# 刪除pod
kubectl delete pod xxx
label
1辨嗽、為資源打標(biāo)簽(第一種方式:使用命令打標(biāo)簽)
# 為pod資源打標(biāo)簽,需要注意的是淮腾,打標(biāo)簽之前糟需,pod必須提前創(chuàng)建好
kubectl label pod pod-name labelKey=labelValue -n deplot-name
# 為node資源打標(biāo)簽
kubectl label nodes node1 nodetag=node1
2、為資源打標(biāo)簽(第二種方式:使用配置文件打標(biāo)簽)
以下示例是為pod資源打標(biāo)簽谷朝,這種方式是和pod一起創(chuàng)建的糊探,新建一個配置文件 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
執(zhí)行命令創(chuàng)建pod
kubectl apply -f label.ymal
3蒸眠、更新標(biāo)簽
適合更新label值短纵,前提是label的key必須已存在缚忧;
kubectl label pod pod-name labelKey=labelValue -n deplot-name --overwrite
4、查看標(biāo)簽
kubectl get pod pod-name -n dev --show-labels
5专钉、篩選標(biāo)簽
# 查詢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
5挑童、刪除標(biāo)簽
刪除key為lebelKey的標(biāo)簽
# 刪除pod資源的表標(biāo)簽
kubectl label pod ymal-create-pod-name lebelKey- -n dev
# 刪除node資源的標(biāo)簽
kubectl label nodes node1 nodetag-
pod控制器(deployment)
pod控制器有很多種,我們這里就用deployment
1跃须、創(chuàng)建deployment(第一種方式:命令行創(chuàng)建)
使用以下run命令運(yùn)行一個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 # 創(chuàng)建三個副本尽楔,也就是會創(chuàng)建三個pod(注意:在k8s版本v1.8以后,r--eplicas已失效玉雾,建議使用deployment,不過僅僅是run命令失效轻要,create 和yaml配置文件還是有效的)
-n dev # 指定namespace
通過以下命令可以看到复旬,會自動生成一個app=run-cmd-nginx-deploy-3
的標(biāo)簽
[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、創(chuàng)建deployment(第二種方式:yaml配置文件創(chuàng)建)
新建一個deployment.yaml文件冲泥,內(nèi)容如下
apiVersion: apps/v1 # 前面的apps/必須這樣寫驹碍,斜杠后面隨便寫壁涎,暫不知為何
kind: Deployment # 創(chuàng)建deployment
metadata:
name: ymal-deployment-name # deployment名稱
namespace: dev # 所屬命名空間
spec:
replicas: 3 # 副本數(shù)量
selector:
matchLabels: # 匹配標(biāo)簽
deploy-label-1: ymal-label # 此選擇器和下面的template.metadata..labels進(jìn)行關(guān)聯(lián),可以發(fā)現(xiàn)這倆值是一樣的志秃,一樣的值就會進(jìn)行關(guān)聯(lián)
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的詳細(xì)信息
# 查看deployment詳細(xì)信息
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
# 第二種刪除方式担汤,使用配置文件進(jìn)行刪除
kubectl delete -f deployment.yaml
service
1、創(chuàng)建service–命令行方式創(chuàng)建
默認(rèn)創(chuàng)建的pod是只能對內(nèi)訪問的洼冻,所以需要創(chuàng)建一個對外的訪問端口崭歧,創(chuàng)建一個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
: 目標(biāo)端口,也就是pod容器中的端口 -
--type
:service類型撞牢,分為以下幾個- ClusterIP:默認(rèn)值率碾,它是Kubernetes系統(tǒng)自動分配的虛擬IP,只能在集群內(nèi)部訪問
- NodePort:將Service通過指定的Node上的端口暴露給外部屋彪,通過此方法所宰,就可以在集群外部訪問服務(wù)
- LoadBalancer:使用外接負(fù)載均衡器完成到服務(wù)的負(fù)載分發(fā),注意此模式需要外部云環(huán)境支持
- ExternalName: 把集群外部的服務(wù)引入集群內(nèi)部撼班,直接使用
創(chuàng)建好service之后歧匈,查看service信息,可以看到砰嘁,暴露的端口為:30474件炉,
- 外部訪問:因為博主這邊是虛擬機(jī),所以使用主機(jī)的ip:端口矮湘,也就是
192.168.253.131:30474
就可以訪問到頁面了斟冕; - 內(nèi)部訪問:直接在虛擬機(jī)內(nèi)訪問
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只能內(nèi)部訪問
PORT(S) # 我們看到上面有2個端口80:30474,80是內(nèi)部訪問端口缅阳,30474是外部訪問的端口磕蛇;
2、創(chuàng)建service(ymal方式創(chuàng)建)
新建一個service.ymal文件十办,內(nèi)容如下
apiVersion: v1
kind: Service
metadata:
name: service-name
namespace: dev
spec:
clusterIP: 10.96.98.123
ports:
- port: 80
protocol: TCP
targetPort: 80
selector: # 標(biāo)簽選擇器秀撇,需要和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對應(yīng)的所有pod的訪問地址件相,它是根據(jù)service配置文件中selector描述產(chǎn)生的再扭。
一個Service由一組Pod組成氧苍,這些Pod通過Endpoints暴露出來,Endpoints是實現(xiàn)實際服務(wù)的端點(diǎn)集合泛范。換句話說让虐,service和pod之間的聯(lián)系是通過endpoints實現(xiàn)的。
每創(chuàng)建一個service罢荡,k8s會自動創(chuàng)建一個同名的 Endpoint出來
1赡突、查看 endpoint
# 一定要加s
kubectl get endpoints -n dev
# 查看endpoint的詳細(xì)信息
kubectl describe endpoints -n dev
2、刪除endpoint
如果是由service創(chuàng)建出來的endpoints柠傍,刪除后會馬上創(chuàng)建出一個同名的endpoint出來麸俘,如果要刪除必須先刪除service
kubectl delete endpoints xxxx -n dev
3、創(chuàng)建endpoint
因為每次創(chuàng)建一個service惧笛,k8s會自動創(chuàng)建一個同名的 Endpoint出來从媚,所我們直接創(chuàng)建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
其他
1、kubectl run
和 kubectl create
的區(qū)別
# run后面的xxx是pod名稱
kubectl run xxx --image=nginx:1.17.1 --port=80
# create 后面必須指定創(chuàng)建的資源是什么類似患整,比如我下面創(chuàng)建了一個deployment拜效,xxx是deployment的名字,鏡像是nginx各谚,端口80紧憾,啟用3個pod副本,
kubectl create deployment xxx --image=nginx:1.17.1 --port=80 --replicas=3
2昌渤、–help
--help
用來查看幫助文檔赴穗,如果你不知道某個命令怎么使用了,就可以用--help
查詢命令的用法
kubectl --help
kubectl create --help
kubectl run --help
kubectl explain --help
3膀息、explain
查看資源結(jié)構(gòu)
explain用來查看配置文件的 資源結(jié)構(gòu)般眉,如果不知道配置文件中的資源用有哪些結(jié)構(gòu),那么就可以使用explain命令來查看
# 查看pod資源結(jié)構(gòu)
kubectl explain pod
# 查看容器配置的資源結(jié)構(gòu)
kubectl explain pod.spec.containers
#查看namespace資源結(jié)構(gòu)
kubectl explain namespace
#查看service資源結(jié)構(gòu)
kubectl explain service
# 查看deployment資源結(jié)構(gòu)
kubectl explain deployment
3潜支、進(jìn)入容器執(zhí)行命令
# 容器名稱可通過命令`kubectl describe pod`查看
# centos 使用 /bin/bash
# ubuntu或debain 使用/bin/sh
kubectl exec pod名稱 -it -c 容器名稱 /bin/sh