一、kubectl简介

kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用户和管理员必备的管理工具。

kubectl 提供了大量的子命令,方便管理 Kubernetes 集群中的各种功能。以下是查看子命令的帮助命令:

  • kubectl -h:查看子命令列表
  • kubectl options:查看全局选项
  • kubectl --help:查看子命令的帮助
  • kubectl [command] [PARAMS] -o=:设置输出格式(如 json、yaml、jsonpath 等)
  • kubectl explain [RESOURCE]:查看资源的定义

二、命令行自动补全配置

# Ubuntu
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.2/bin/linux/amd64/kubectl
chmod +x kubectl 
mv kubectl  /usr/local/bin/
sudo mv kubectl  /usr/local/bin/
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

# Centos
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

三、kubectl常用命令总结

1、kubectl version

输出 client 和 server 的版本信息

[ydt@dt ~]# kubectl version 
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.2", GitCommit:"66049e3b21efe110454d67df4fa62b08ea79a19b", GitTreeState:"clean", BuildDate:"2019-05-16T16:23:09Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.2", GitCommit:"66049e3b21efe110454d67df4fa62b08ea79a19b", GitTreeState:"clean", BuildDate:"2019-05-16T16:14:56Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}

2、kubectl run

用法:kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]

2.1、创建一个镜像为redis、副本为2、暴露端口为6379的redis容器
[ydt@dt ~]# kubectl run redis --image=redis --replicas=2 --port=6379
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/redis created

3、kubectl create

用法:kubectl create -f 文档名称 [选项],创建资源

3.1、创建dashboard通过yaml文件
kubectl create -f kubernetes-dashboard.yaml 
3.2、kubectl create namespace:创建namespace

用法:kubectl create namespace NAME [–dry-run] [options]

kubectl create namespace ppp
3.3、kubectl create secret:创建secret

用法:kubectl create secret [flags] [options]

(1).创建一个TLS Secret
kubectl create secret tls tomcat-ingress-sercret --cert=tls.crt --key=tls.key 
kubectl get secrets 
 kubectl describe secrets tomcat-ingress-sercret 
(2)创建一个generic Secret
kubectl create secret generic mysql-root-password --from-literal=password=Myp@ss123
kubectl get secrets 
3.4、kubectl create configmap:创建configmap

用法:kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run] [options]

kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=myapp.ydt.com
3.5、kubectl create serviceaccount:创建serviceaccount
kubectl create serviceaccount admin
kubectl create serviceaccount mysa -o yaml --dry-run 

4、kubectl get

用法:kubectl get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options]

4.1、kubectl get nodes

(1)、获取节点信息

kubectl get nodes

(2)、获取节点详细信息

kubectl get nodes -o wide

(3)、获取节点标签

kubectl get nodes --show-labels 

(4)、给节点打标签

kubectl label nodes node1 disktype=ssd```
4.2、kubectl get pods

(1)、获取指定namespace的Pod信息(不加-n默认获取default)

    #获取pod节点运行信息
    kubectl get pods -n prod

(2).获取namespace信息

kubectl get namespace

(3).获取所有namespace的Pod信息

kubectl get pods --all-namespaces
 kubectl get pods -A

(4)、获取Pod的详细信息,获取一些更具体的信息,可以通过使用选项“-o”
kubectl get pod < podname > -o yaml 以yawl格式输出pod的详细信息

kubectl get pods -o wide
kubectl get pods -A -o wide
kubectl get pods -n prod 容器名称 -o yaml

(5)、获取Pod的labels

kubectl get pods --show-labels 

(6)、查看所有pod对于指定标签的key是否有value,有则显示,没有则空白

kubectl get pods -L apps,run

(7)、获取含有指定标签key的pod

kubectl get pods -l apps --show-labels 

(8)、获取含有指定标签key=value的pod
等值关系:=和!=

kubectl get pods -l release=stable --show-labels 

(9)、获取podIP
kubectl get pod pod-name -o jsonpath=’{.status.podIP}’

#其中-n pred是指定命名空间pred
kubectl get pods nginx-862964dd6c-c56ar -n pred -o jsonpath='{.status.podIP}'

(10)、导出指定pod的yaml配置

kubectl get pods myapp-deploy-74fb9bdf9b-2rt79 -n pred -o yaml --export
4.3、kubectl get namespaces:获取namespace信息

1、获取指定namespace信息

kubectl get namespaces (命名空间)

2、获取指定namespace的yaml格式和json格式信息

kubectl get namespaces kube-system -o yaml
kubectl get namespaces kube-system -o json
4.4、kubectl get rs:获取ReplicaSet控制器信息
kubectl get rs
4.5、kubectl get deploy && kubectl get deployment

1、获取Deployment控制器信息

kubectl get deploy -n pred
kubectl get deployments -n pred

2、滚动更新
修改后的滚动更新过程

kubectl get pods -w

查看滚动更新后历史版本和现在运行版本

kubectl get rs -o wide
4.6、kubectl get svc:获取service信息

1、获取默认命名空间和指定命名空间的service

kubectl get svc
kubectl get svc -n pred 

2、获取pv信息和pvc信息

kubectl get pv
kubectl get pvc

3、获取configMap信息

kubectl get cm
kubectl get configmap

4、获取statefulSet控制器信息

kubectl get sts

5、获取serviceaccount信息

kubectl get serviceaccounts && kubectl get sa

5、kubectl label

用法:kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version],资源标签设定

1、给一个pod打一个没有存在的标签key=value

kubectl label pods pod-demo release=canary
kubectl get pods pod-demo --show-labels 

2、给一个pod已经存在的标签重新赋值

 kubectl label pods pod-demo release=stable
 kubectl label pods pod-demo release=stable --overwrite

3、通过key删除标签

kubectl get nodes --show-labels
 kubectl label nodes node1 disktype-

6、kubectl describe

用法:kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) [options],显示资源的详细描述

1、查看某个pod的详细信息

kubectl describe pods (容器名) -n pred (指定命名空间)

2、查看节点详细信息

kubectl describe nodes

7、kubectl delete

用法:kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options],删除资源

1、删除pods资源

kubectl delete pods (容器名) -n pred 

8、kubectl edit

1.edit提供了另一种更新resource源的操作,通过edit能够灵活的在一个common的resource基础上,发展出更过的significant resource。使用edit直接更新前面创建的pod的命令:

用法:kubectl edit (RESOURCE/NAME | -f FILENAME) [options],编辑资源清单

kubectl edit pods -n prod ownership-query-node-6c45577f9b-c69s9 -o yaml

9、kubectl exec

用法:kubectl exec POD [-c CONTAINER] -- COMMAND [args...] [options],类似docker exec,进入容器

kubectl exec -it (容器名)-- /bin/sh -n pred
kubectl exec -it (容器名)sh -n pred

10、kubectl logs

用法:kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options],类似于docker logs,查看容器日志

kubetcl logs (容器名) -n pred -f

1、查看pod内指定容器的日志

kubectl logs platformuniversal-web-cb6c7c57b-gz2sl -c platformuniversal-web -n pred -f 

11、kubectl explain

用法:kubectl explain RESOURCE [options],显示各种资源清单的字段解释

1、查看pod资源清单字段

kubectl explain pod

2、查看pod资源清单理metadata字段下的字段(以此类推)

kubectl explain pod.metadata

12、kubectl rollout

用法:kubectl rollout SUBCOMMAND [options],滚动更新
类型:

  • deployments
  • daemonsets
  • statefulsets

1、查看deployment滚动更新历史版本

kubectl rollout history deployment (容器名不加后缀 )-n pred

2、回滚到指定版本

#回滚到上一个版本
kubectl rollout undo deployment (容器名)
#显示全部版本号
kubectl rollout history deployment (容器名不加后缀 )-n pred
#指定回滚的版本
kubectl rollout undo deployment (容器名不加后缀 ) --to-revision=1(1代表版本号)

3、更新一个pod后暂停更新

#暂停更新
kubectl rollout pause deployment (容器名)
#显示更详细的
kubectl get pods -l app=(容器名) -w

4、解除暂停状态,继续更新

#恢复更新状态
kubectl rollout resume deployment (容器名) 
#监控deployment更新状态
kubectl rollout status deployment (容器名)

13、kubectl scale

Deployment, ReplicaSet, Replication Controller, or StatefulSet,pod副本的扩容和缩容

用法:kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

设置容器副本数

#设置容器的副本数为0
kubectl scale deployment -n pred (容器名称) --replicas=0
#设置容器的副本数为1,依次类推
kubectl scale deployment -n pred (容器名) --replicas=1

14、kubectl patch

1、修改deployment副本数

kubectl patch deployment (容器名) -p '{"spec":{"replicas":5}}'

2、修改deployment滚动更新策略

kubectl patch deployment (容器名) -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
kubectl describe deployments (容器名不加后缀)

15、kubectl set

用法:kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N [options]

#更新现有的资源对象的容器镜像。
kubectl set image

(1).输入关键字查找项目名称

kubectl get pod -n prod |grep website(关键字)

(2).查看项目详细信息

 kubectl describe pods -n prod (项目名称)
Logo

开源、云原生的融合云平台

更多推荐