基礎(chǔ)命令:
create
硫朦,delete
贷腕,get
,run
咬展,expose
泽裳,set
,explain
破婆,edit
涮总。使用以下語法 kubectl 從終端窗口運(yùn)行命令:
kubectl [command] [TYPE] [NAME] [flags]
其中
command
、TYPE
祷舀、NAME
和 flags
分別是:
command
:指定要對一個或多個資源執(zhí)行的操作瀑梗,例如create
烹笔、get
、describe
抛丽、delete
谤职。TYPE
:指定資源類型。資源類型不區(qū)分大小寫亿鲜, 可以指定單數(shù)允蜈、復(fù)數(shù)或縮寫形式。例如蒿柳,以下命令輸出相同的結(jié)果:
1饶套、create
命令:根據(jù)文件或者輸入來創(chuàng)建資源
# 創(chuàng)建Deployment和Service資源
kubectl create -f test-deployment.yaml
kubectl create -f test-service.yaml
其他更多參見:Kubernetes kubectl create 命令詳解
2、delete
命令:刪除資源
#根據(jù)yaml文件刪除對應(yīng)的資源垒探,但是yaml文件并不會被刪除凤跑,這樣更加高效
kubectl delete -f test_deletet_deployment.yaml
kubectl delete -f test_deletet_service.yaml
也可以通過具體的資源名稱來進(jìn)行刪除,使用這個刪除資源叛复,需要同時刪除pod和service資源才行
kubectl delete 具體的資源名稱
其他更多參見:Kubernetes kubectl delete 命令詳解
3仔引、kubectl get
- 列出一個或多個資源。
## 查看所有的資源信息
root@k8s-master1-etcd1:~# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/net-test1 1/1 Running 0 4h44m
pod/net-test2 1/1 Running 0 4h44m
pod/net-test3 1/1 Running 0 4h44m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 5h2m
# 以純文本輸出格式列出所有 pod褐奥。
kubectl get pods
# 以純文本輸出格式列出所有 pod咖耘,并包含附加信息(如在節(jié)點(diǎn)IP)。
root@k8s-master1-etcd1:~# kubectl get pods -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
net-test1 1/1 Running 0 4h49m 10.200.228.129 172.31.7.111 <none> <none>
net-test2 1/1 Running 0 4h49m 10.200.35.129 172.31.7.112 <none> <none>
net-test3 1/1 Running 0 4h49m 10.200.228.130 172.31.7.111 <none> <none>
# 顯示pod節(jié)點(diǎn)的標(biāo)簽信息
kubectl get pod --show-labels
# 根據(jù)指定標(biāo)簽匹配到具體的pod
kubectl get pods -l app=exampl
# 查看node節(jié)點(diǎn)列表
kubectl get node
# 顯示node節(jié)點(diǎn)的標(biāo)簽信息
kubectl get node --show-labels
# 查看服務(wù)的詳細(xì)信息撬码,顯示了服務(wù)名稱儿倒,類型,集群ip呜笑,端口夫否,時間等信息
root@k8s-master1-etcd1:~# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 5h9m
查看命名空間
kubectl get ns
# 查看所有pod所屬的命名空間
kubectl get pod --all-namespaces
# 查看所有pod所屬的命名空間并且查看都在哪些節(jié)點(diǎn)上運(yùn)行
kubectl get pod --all-namespaces -o wide
# 查看目前所有的replica set,顯示了所有的pod的副本數(shù)叫胁,以及他們的可用數(shù)量以及狀態(tài)等信息
root@k8s-master1-etcd1:~# kubectl get rs --all-namespaces
NAMESPACE NAME DESIRED CURRENT READY AGE
kube-system calico-kube-controllers-754966f84c 1 1 1 5h6m
kube-system coredns-79688b6cb4 1 1 1 117m
kubernetes-dashboard dashboard-metrics-scraper-799d786dbf 1 1 1 46m
kubernetes-dashboard dashboard-metrics-scraper-c766885cc 0 0 0 50m
kubernetes-dashboard kubernetes-dashboard-5cf689bbcc 0 0 0 50m
kubernetes-dashboard kubernetes-dashboard-fb8648fd9 1 1 1 46m
#查看所有deployment
root@k8s-master1-etcd1:~# kubectl get deployment -A
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system calico-kube-controllers 1/1 1 1 5h7m
kube-system coredns 1/1 1 1 118m
kubernetes-dashboard dashboard-metrics-scraper 1/1 1 1 52m
kubernetes-dashboard kubernetes-dashboard 1/1 1 1 52m
# 查看已經(jīng)部署了的所有應(yīng)用凰慈,可以看到容器,以及容器所用的鏡像驼鹅,標(biāo)簽等信息
root@k8s-master1-etcd1:~# kubectl get deploy -o wide -A
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
kube-system calico-kube-controllers 1/1 1 1 5h10m calico-kube-controllers docker.io/calico/kube-controllers:v3.19.3 k8s-app=calico-kube-controllers
kube-system coredns 1/1 1 1 120m coredns harbor.host.com/base/coredns:1.8.7 k8s-app=kube-dns
kubernetes-dashboard dashboard-metrics-scraper 1/1 1 1 54m dashboard-metrics-scraper kubernetesui/metrics-scraper:v1.0.7 k8s-app=dashboard-metrics-scraper
kubernetes-dashboard kubernetes-dashboard 1/1 1 1 54m kubernetes-dashboard kubernetesui/dashboard:v2.5.1 k8s-app=kubernetes-dashboard
其他更多參考:Kubernetes kubectl get 命令詳解
4微谓、explain命令:用于顯示資源文檔信息
kubectl explain rs
5、edit命令:用于編輯資源信息
# 編輯Deployment nginx的一些信息
kubectl edit deployment nginx
# 編輯service類型的nginx的一些信息
kubectl edit service/nginx
設(shè)置命令:label输钩,annotate豺型,completion
label命令:用于更新(增加、修改或刪除)資源上的 label(標(biāo)簽)
- label 必須以字母或數(shù)字開頭买乃,可以使用字母姻氨、數(shù)字、連字符剪验、點(diǎn)和下劃線肴焊,最長63個字符前联。
- 如果--overwrite 為 true,則可以覆蓋已有的 label抖韩,否則嘗試覆蓋 label 將會報錯蛀恩。
- 如果指定了--resource-version疫铜,則更新將使用此資源版本茂浮,否則將使用現(xiàn)有的資源版本。
語法
label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
# 給名為foo的Pod添加label unhealthy=true
kubectl label pods foo unhealthy=true
# 給名為foo的Pod修改label 為 'status' / value 'unhealthy'壳咕,且覆蓋現(xiàn)有的value
kubectl label --overwrite pods foo status=unhealthy
# 給 namespace 中的所有 pod 添加 label
kubectl label pods --all status=unhealthy
# 僅當(dāng)resource-version=1時才更新 名為foo的Pod上的label
kubectl label pods foo status=unhealthy --resource-version=1
# 刪除名為“bar”的label 席揽。(使用“ - ”減號相連)
kubectl label pods foo bar-
completion
命令:用于設(shè)置kubectl命令自動補(bǔ)全
$ source <(kubectl completion bash) # setup autocomplete in bash, bash-completion package should be installed first.
$ source <(kubectl completion zsh) # setup autocomplete in zsh
kubectl 部署命令:rollout,rolling-update谓厘,scale幌羞,autoscale
rollout命令:用于對資源進(jìn)行管理
可用資源包括:deployments,daemonsets竟稳。
子命令:
# 語法
kubectl rollout SUBCOMMAND
# 回滾到之前的deployment
kubectl rollout undo deployment/abc
# 查看daemonet的狀態(tài)
kubectl rollout status daemonset/foo
rolling-update命令:執(zhí)行指定ReplicationController的滾動更新属桦。
該命令創(chuàng)建了一個新的RC, 然后一次更新一個pod方式逐步使用新的PodTemplate他爸,最終實(shí)現(xiàn)Pod滾動更新聂宾,new-controller.json需要與之前RC在相同的namespace下。
# 語法
rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC)
# 使用frontend-v2.json中的新RC數(shù)據(jù)更新frontend-v1的pod
kubectl rolling-update frontend-v1 -f frontend-v2.json
# 使用JSON數(shù)據(jù)更新frontend-v1的pod
cat frontend-v2.json | kubectl rolling-update frontend-v1 -f -
# 其他的一些滾動更新
kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
kubectl rolling-update frontend --image=image:v2
kubectl rolling-update frontend-v1 frontend-v2 --rollback
scale命令:擴(kuò)容或縮容 Deployment诊笤、ReplicaSet系谐、Replication Controller或 Job 中Pod數(shù)量
scale也可以指定多個前提條件,如:當(dāng)前副本數(shù)量或 --resource-version 讨跟,進(jìn)行伸縮比例設(shè)置前纪他,系統(tǒng)會先驗(yàn)證前提條件是否成立。這個就是彈性伸縮策略
# 語法
kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
# 將名為foo中的pod副本數(shù)設(shè)置為3晾匠。
kubectl scale --replicas=3 rs/foo
kubectl scale deploy/nginx --replicas=30
# 將由“foo.yaml”配置文件中指定的資源對象和名稱標(biāo)識的Pod資源副本設(shè)為3
kubectl scale --replicas=3 -f foo.yaml
# 如果當(dāng)前副本數(shù)為2茶袒,則將其擴(kuò)展至3。
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
# 設(shè)置多個RC中Pod副本數(shù)量
kubectl scale --replicas=5 rc/foo rc/bar rc/baz
autoscale命令: 這個比scale更加強(qiáng)大凉馆,也是彈性伸縮策略 弹谁,它是根據(jù)流量的多少來自動進(jìn)行擴(kuò)展或者縮容
指定Deployment、ReplicaSet或ReplicationController句喜,并創(chuàng)建已經(jīng)定義好資源的自動伸縮器预愤。使用自動伸縮器可以根據(jù)需要自動增加或減少系統(tǒng)中部署的pod數(shù)量。
# 語法
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
# 使用 Deployment “foo”設(shè)定咳胃,使用默認(rèn)的自動伸縮策略植康,指定目標(biāo)CPU使用率,使其Pod數(shù)量在2到10之間
kubectl autoscale deployment foo --min=2 --max=10
# 使用RC“foo”設(shè)定展懈,使其Pod的數(shù)量介于1和5之間销睁,CPU使用率維持在80%
kubectl autoscale rc foo --max=5 --cpu-percent=80
集群管理命令:certificate供璧,cluster-info,top冻记,cordon睡毒,uncordon,drain冗栗,taint
certificate命令:用于證書資源管理演顾,授權(quán)等
[root@master ~]# kubectl certificate --help
Modify certificate resources.
Available Commands:
approve Approve a certificate signing request
deny Deny a certificate signing request
Usage:
kubectl certificate SUBCOMMAND [options]
Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
# 例如,當(dāng)有node節(jié)點(diǎn)要向master請求隅居,那么是需要master節(jié)點(diǎn)授權(quán)的
kubectl certificate approve node-csr-81F5uBehyEyLWco5qavBsxc1GzFcZk3aFM3XW5rT3mw node-csr-Ed0kbFhc_q7qx14H3QpqLIUs0uKo036O2SnFpIheM18
cluster-info命令:顯示集群信息
kubectl cluster-info
[root@master ~]# kubectl cluster-info
Kubernetes master is running at http://localhost:8080
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
top命令:用于查看資源的cpu钠至,內(nèi)存磁盤等資源的使用率
kubectl top pod --all-namespaces
它需要heapster運(yùn)行才行
cordon命令:用于標(biāo)記某個節(jié)點(diǎn)不可調(diào)度
uncordon命令:用于標(biāo)簽節(jié)點(diǎn)可以調(diào)度
drain命令: 用于在維護(hù)期間排除節(jié)點(diǎn)。
taint命令:參見:https://blog.frognew.com/2018/05/taint-and-toleration.html
集群故障排查和調(diào)試命令:describe胎源,logs棉钧,exec,cp
describe命令:顯示特定資源的詳細(xì)信息
# 語法
kubectl describe TYPE NAME_PREFIX
(首先檢查是否有精確匹配TYPE和NAME_PREFIX的資源涕蚤,如果沒有宪卿,將會輸出所有名稱以NAME_PREFIX開頭的資源詳細(xì)信息)
支持的資源包括但不限于(大小寫不限):pods (po)、services (svc)万栅、 replicationcontrollers (rc)佑钾、nodes (no)、events (ev)申钩、componentstatuses (cs)次绘、 limitranges (limits)、persistentvolumes (pv)撒遣、persistentvolumeclaims (pvc)邮偎、 resourcequotas (quota)和secrets。
#查看my-nginx pod的詳細(xì)狀態(tài)
kubectl describe po my-nginx
logs命令:用于在一個pod中打印一個容器的日志义黎,如果pod中只有一個容器禾进,可以省略容器名
# 語法
kubectl logs [-f] [-p] POD [-c CONTAINER]
# 返回僅包含一個容器的pod nginx的日志快照
$ kubectl logs nginx
# 返回pod ruby中已經(jīng)停止的容器web-1的日志快照
$ kubectl logs -p -c ruby web-1
# 持續(xù)輸出pod ruby中的容器web-1的日志
$ kubectl logs -f -c ruby web-1
# 僅輸出pod nginx中最近的20條日志
$ kubectl logs --tail=20 nginx
# 輸出pod nginx中最近一小時內(nèi)產(chǎn)生的所有日志
$ kubectl logs --since=1h nginx
# 參數(shù)選項(xiàng)
-c, --container="": 容器名。
-f, --follow[=false]: 指定是否持續(xù)輸出日志(實(shí)時日志)廉涕。
--interactive[=true]: 如果為true泻云,當(dāng)需要時提示用戶進(jìn)行輸入。默認(rèn)為true狐蜕。
--limit-bytes=0: 輸出日志的最大字節(jié)數(shù)宠纯。默認(rèn)無限制。
-p, --previous[=false]: 如果為true层释,輸出pod中曾經(jīng)運(yùn)行過婆瓜,但目前已終止的容器的日志。
--since=0: 僅返回相對時間范圍,如5s廉白、2m或3h个初,之內(nèi)的日志。默認(rèn)返回所有日志猴蹂。只能同時使用since和since-time中的一種院溺。
--since-time="": 僅返回指定時間(RFC3339格式)之后的日志。默認(rèn)返回所有日志磅轻。只能同時使用since和since-time中的一種珍逸。
--tail=-1: 要顯示的最新的日志條數(shù)。默認(rèn)為-1瓢省,顯示所有的日志弄息。
--timestamps[=false]: 在日志中包含時間戳痊班。
exec命令:進(jìn)入容器進(jìn)行交互勤婚,在容器中執(zhí)行命令
語法
kubectl exec POD [-c CONTAINER] -- COMMAND [args...]
命令選項(xiàng)
-c, --container=""
: 容器名。如果未指定涤伐,使用pod中的一個容器馒胆。
-p, --pod=""
: Pod
名。
-i, --stdin[=false]
: 將控制臺輸入發(fā)送到容器凝果。
-t, --tty[=false]
: 將標(biāo)準(zhǔn)輸入控制臺作為容器的控制臺輸入祝迂。
進(jìn)入nginx容器,執(zhí)行一些命令操作
kubectl exec -it nginx-deployment-66666666-lc5fp bash
cp
命令:拷貝文件或者目錄到pod容器中
用于pod和外部的文件交換,類似于docker 的cp器净,就是將容器中的內(nèi)容和外部的內(nèi)容進(jìn)行交換型雳。
其他命令:api-servions
api-servions命令:打印受支持的api版本信息
# kubectl api-versions
root@k8s-master1-etcd1:~# kubectl api-versions
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
coordination.k8s.io/v1
discovery.k8s.io/v1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta2
networking.k8s.io/v1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
apply
命令:
apply
命令:通過文件名或者標(biāo)準(zhǔn)輸入對資源應(yīng)用配置
通過文件名或控制臺輸入,對資源進(jìn)行配置山害。 如果資源不存在纠俭,將會新建一個±嘶牛可以使用 JSON 或者 YAML 格式冤荆。
語法
kubectl apply -f FILENAME
kubectl apply -f test.yaml
小結(jié):
以上是 kubectl 一些基本命令操作,更多請查看http://docs.kubernetes.org.cn/683.html
參考鏈接
http://www.reibang.com/p/304c629d127c
https://kubernetes.io/zh/docs/reference/kubectl/cheatsheet