概述

https://kubernetes.io/docs/reference/kubectl/overview/
资源的管理操作可归结为 增、删、改、查四种,kubectl 针对此中情况提供了命令,如 create、delete、patch、apply、replace、edit、get等,其中有些工具必须是基于清单来进行,如apply和replace命令,有些既可以是清单,也可以是实时作用于活动资源之上,如 create、get、patch 和 delete 等
kubectl 命令能读取任何以.yaml 、 .yml 或 .json 为后缀的文件,kubectl 的多数命令支持使用”-f”选项指定使用的清单文件路径或URL,也可以是存储有清单文件的目录。同一命令中可以重复使用多次,如果在指定的目录路径存在子目录时,可按需使用-R选项以递归的方式获取子目录中的配置清单

其提供了基于命令行访问kubernetes API 的简介方式,能够满足对kubernetes的绝大部分操作需求。

语法 :

  1. kubectl [command] [TYPE] [NAME] [flags]

语法解析详情请参考 :http://docs.kubernetes.org.cn/683.html
1 command : 对资源执行响应操作的子命令,如get(获取资源简要信息),create(根据资源清单创建资源)、delete(删除资源),run(启动运行资源)
2 TYPE: 要操作的资源对象类型,如 pods,services等,
3 NAME:对象名称,区分大小写,如果省略,则表示指定TYPE中的所有资源,也可”TYPE/NAME” 的格式来表示资源对象
4 flags:命令行选项,如”-s” 或 “—server

安装

官方安装教程https://kubernetes.io/docs/tasks/tools/install-kubectl/

二进制安装

  1. curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"

如果下载失败可以选择https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#client-binaries-3
图片.png
选择 Client Binaries 也就是所谓的kubectl,会出现如下下载地址信息
图片.png

增加执行权限

  1. chmod +x ./kubectl

放置到/usr/local/bin目录下

  1. sudo mv ./kubectl /usr/local/bin/kubectl

测试安装结果

  1. $kubectl version --client

查看集群信息

  1. $kubectl cluster-info

环境变量配置

默认设置在~/.kube/config
自定义设置
1、目录:/home/user/kubectl
2、配置文件 名叫做config
3、然后编辑 ~/.bash_profile 把上述文件加入到环境变量中
KUBECONFIG=/home/user/kubectl/config
然后执行 source ~/.bash_profile


基础入门

命令 说明
create 通过配置文件或者命令行创建资源
expose 使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的 Kubernetes Service
run 在集群中运行一个指定的镜像
set 为 objects 设置一个指定的特征

create

命令参数

  1. Available Commands:
  2. clusterrole Create a ClusterRole.
  3. clusterrolebinding 为一个指定的 ClusterRole 创建一个 ClusterRoleBinding
  4. configmap 从本地 file, directory 或者 literal value 创建一个 configmap
  5. cronjob Create a cronjob with the specified name.
  6. deployment Create a deployment with the specified name.
  7. ingress Create an ingress with the specified name.
  8. job Create a job with the specified name.
  9. namespace 创建一个指定名称的 namespace
  10. poddisruptionbudget 创建一个指定名称的 pod disruption budget.
  11. priorityclass Create a priorityclass with the specified name.
  12. quota 创建一个指定名称的 quota.
  13. role Create a role with single rule.
  14. rolebinding 为一个指定的 Role 或者 ClusterRole创建一个 RoleBinding
  15. secret 使用指定的 subcommand 创建一个 secret
  16. service 使用指定的 subcommand 创建一个 service.
  17. serviceaccount 创建一个指定名称的 service account

命令格式

  1. kubectl create deployment NAME --image=image -- [COMMAND] [args...] [options]

eg

  1. kubectl create deployment my-nginx --image=nginx:1.14 --replicas=3 --port=80
  2. deployment.apps/my-nginx created

查看

  1. $ kubectl get pod,deploy
  2. NAME READY STATUS RESTARTS AGE
  3. pod/my-nginx-556b5b998-2ps9s 1/1 Running 0 60s
  4. pod/my-nginx-556b5b998-f5psp 1/1 Running 0 60s
  5. pod/my-nginx-556b5b998-mg5wv 1/1 Running 0 60s
  6. NAME READY UP-TO-DATE AVAILABLE AGE
  7. deployment.apps/my-nginx 3/3 3 3 60s

expose

命令格式

  1. kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name]
  2. [--name=name] [--external-ip=external-ip-of-service] [--type=type] [options]

eg:

  1. kubectl expose deployment my-nginx --name=my-nginx --port=80 --target-port=80 --type=NodePort
  2. service/my-nginx exposed

查看

  1. kubectl get svc |grep my-nginx
  2. my-nginx NodePort 10.96.143.139 <none> 80:31346/TCP 95s

run

验证

  1. kubectl run nginx-deploy --image=nginx:1.14 --port=80 --dry-run=client
  2. pod/nginx-deploy created (dry run)

创建与运行pod

  1. kubectl run nginx --image=nginx:1.14 --port=80
  2. pod/deployment created

进阶命令

命令 说明
explain 查看资源的文档
get 获取资源
edit 编辑资源
delete 删除资源

get

kubectl get +资源类型

获取类型为deployments的资源列表

  1. $ kubectl get deployments
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. nginx-deployment 1/1 1 1 45m

获取类型是pod 的资源列表

  1. $ kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. nginx-app-5f8c6846ff-bjmvp 1/1 Running 21 93d
  4. nginx-app-5f8c6846ff-ccxzs 1/1 Running 21 93d

将服务信息输入yaml格式

  1. $ kubectl get pod nginx-app-5f8c6846ff-bjmvp -o yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:

命令解释:

  • get: 查看某个资源
  • -o yaml: 输出格式为 yaml, 也可以选择 json
  • pod/cm: 想要查看的资源的类型, node 表示节点, cm(configmap) 表示配置文件
  • -n <namespace>: 查看某个 namespace 下的资源

查看服务

  1. $ kubectl get services
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d14h
  4. nginx-service NodePort 10.104.113.228 <none> 80:32600/TCP 24h

获取类型是node的资源列表

  1. $ kubectl get node
  2. NAME STATUS ROLES AGE VERSION
  3. docker-desktop Ready master 102d v1.18.3

将节点信息输出-o

  1. $ kubectl get node docker-desktop -o yaml
  2. apiVersion: v1
  3. kind: Node
  4. metadata:
  5. annotations:

获取组件运行状态

  1. $ kubectl get cs
  2. NAME STATUS MESSAGE ERROR
  3. scheduler Healthy ok
  4. controller-manager Healthy ok
  5. etcd-0 Healthy {"health":"true"}

在命令后增加 -A--all-namespaces 可查看所有命名空间对象

  1. $ kubectl get deployments -A
  2. NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
  3. default niginx-deployment 1/1 1 1 8m9s
  4. docker compose 1/1 1 1 232d
  5. docker compose-api 1/1 1 1 232d
  6. kube-system coredns 2/2 2 2 232d

使用参数 -n 可查看指定名称空间的对象

  1. $ kubectl get deployments -n kube-system
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. coredns 2/2 2 2 232d


delete

  1. kubectl delete deployment nginx
  2. # 输出如下
  3. deployment.extensions "nginx" deleted

部署命令

名称 说明
rollout
scale
autoscal 自动调整一个 Deployment, ReplicaSet, 或者ReplicationController 的副本数量

集群管理

certificate 修改 certificate 资源. cluster-info 显示集群信息
top 显示 资源 (CPU/Memory/Storage) 使用情况
cordon 标记 node 为 unschedulable
uncordon 标记 node 为 schedulable
drain Drain node in preparation for maintenance
taint 更新一个或者多个 node 上的 taints

故障定位与调试

describe 显示一个指定 resource 或者 group 的 resources 详情
logs 输出容器在 pod 中的日志
attach Attach 到一个运行中的 container
exec 在一个 container 中执行一个命令
port-forward Forward one or more local ports to a pod
proxy 运行一个 proxy 到 Kubernetes API server
cp 复制 files 和 directories 到 containers
和从容器中复制 files 和 directories.
auth 权限查看

describe

查看pod

  1. $ kubectl descible pod niginx-deployment

logs

查看pod中的容器的打印日志(和命令docker logs 类似)

  1. $ kubectl logs -f nginx-deployment-759fccf44f-lsnnl

kubectl exec
在pod中的容器环境内执行命令,和命令docker exec 类似

  1. $ kubectl exec -it nginx-deployment-759fccf44f-lsnnl /bin/bash

高级命令

diff Diff live version against would-be applied version
apply 通过文件名或标准输入流(stdin)对资源进行配置
patch 使用 strategic merge patch 更新一个资源的 field(s)
replace 通过 filename 或者 stdin替换一个资源
wait Experimental: Wait for a specific condition on one or many
resources.
convert 在不同的 API versions 转换配置文件
kustomize Build a kustomization target from a directory or a remote url.

apply

创建资源对象 可以重复利用和升级


设置

label 更新在这个资源上的 labels
annotate 更新一个资源的注解
completion Output shell completion code for the specified shell (bash or
zsh)
  1. <br /> <br />

其他

alpha Commands for features in alpha api-resources Print the supported API resources on the server
api-versions Print the supported API versions on the server, in the form of
“group/version”
config 修改 kubeconfig 文件
plugin Provides utilities for interacting with plugins.


查看主节点信息

  1. $ kubectl cluster-info
  2. Kubernetes master is running at https://kubernetes.docker.internal:6443
  3. KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
  4. To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'

version

version输出 client 和 server 的版本信息

  1. > kubectl version --short=true
  2. Client Version: v1.13.9
  3. Server Version: v1.14.6