前言
- kubectl 是 apiserver 的客户端工具,工作在 linux 命令行下,能够连接到 apiserver 上实现各种增、删、改、查等各种操作。
Linux 命令行通过 tab 键自动补全
- Ubuntu 方法一
//创建脚本存储目录
mkdir /data/scripts -p
//使用 kubeadm 命令生成补全脚本
kubeadm completion bash > /data/scripts/kubeadm_completion.sh
//重新生效补全脚本(仅单次有效)
source /data/scripts/kubeadm_completion.sh
//编写系统环境变量
vim /etc/profile
...省略...
source /data/scripts/kubeadm_completion.sh
//重新生效系统环境变量
source /etc/profile
- Ubuntu 方法二
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
- Mac 方法
$ brew install bash-completion
$ source $(brew --prefix)/etc/bash_completion
$ source <(kubectl completion bash)
Kubectl 命令帮助简单说明
root@k8s-master1:~# kubectl -h
kubectl controls the Kubernetes cluster manager.
Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/
Basic Commands (Beginner): #基本命令,适用于新手
create #通过文件名或控制台输入,创建资源
expose #输入 replication controller,service 或者 pod,并将其暴露为新的 kubernetes service
run #在集群中使用指定镜像启动容器
set #设置对象的特定特性
Basic Commands (Intermediate): #基本命令集,适合有一定基础的人
explain #文档的参考资料
get #输出一个/多个资源
edit #使用默认编辑器,编辑服务器上定义的资源
delete #通过文件名、控制台输入、资源名或者 label selector 删除资源
Deploy Commands:
rollout #管理资源的转出
scale #为 Deployment, ReplicaSet 或者 Replication Controller 设置一个新的副本数大小
autoscale #自动调整 Deployment, ReplicaSet 或者 Replication Controller 的副本数大小
Cluster Management Commands: #集群管理相关的命令集
certificate #修改证书资源
cluster-info #显示集群信息
top #显示资源 (CPU/Memory/Storage) 使用方法。
cordon #将node标记为不可调度
uncordon #将node标记为可调度
drain #设定node进入维护模式
taint #设置一个或多个 node 为 taint
Troubleshooting and Debugging Commands: #故障检测及调试相关命令
describe #输出指定的一个或多个资源的详细信息
logs #输出 pod 中一个容器的日志
attach #连接到一个正在运行的容器
exec #在容器内部执行命令
port-forward #将本地端口转发到 pod
proxy #为 Kubernetes API server 启动代理服务器
cp #从容器中复制文件和目录
auth #检查授权
Advanced Commands: #高级命令
diff #比较实时版本和潜在应用版本
apply #通过文件名或标准输入对资源进行配置
patch #通过控制台输入更新资源中的字段
replace #用文件名或标准输入替换资源
wait Experimental: Wait for a specific condition on one or many resources.
convert #在不同的 API versions 之间转换配置文件
kustomize #从目录或远程 url 构建 kustomization 目标
Settings Commands: #设置相关命令
label #更新资源上的 label
annotate #更新资源上的 annotations
completion #输出当指定 shell 完成时的返回码 (bash or zsh)
Other Commands: #其他命令集
api-resources #在服务器上打印支持的 API resources
api-versions #在服务器上以 "组/版本" 的形式打印支持的 API version
config #修改 kubeconfig 配置文件
plugin Provides utilities for interacting with plugins (提供与插件交互的实用程序)
version #打印客户端和服务器端的版本信息
Usage: #使用格式
kubectl [flags] [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). #查看命令的通用选项(所有命令)
Kubectl 常用操作的简单语法
Operation | Description | Syntax |
---|---|---|
annotate | 为一个或多个资源添加注释 | kubectl annotate (-f FILENAME |
api-versions | 列出支持的API版本 | kubectl api-versions [flags] |
apply | 对文件或stdin的资源进行配置更改 | kubectl apply -f FILENAME [flags] |
attach | 连接到一个运行的容器,既可以查看output stream,也可以与容器(stdin)进行交互 | kubectl attach POD -c CONTAINER [-i] [-t] [flags] |
autoscale | 自动扩容/缩容由replication controller管理的一组pod | kubectl autoscale (-f FILENAME |
cluster-info | 显示有关集群中master和services的终端信息 | kubectl cluster-info [flags] |
config | 从file,stdin或指定label 选择器,names,resource选择器或resources中删除resources | kubectl delete (-f FILENAME |
describe | 显示一个或多个resources的详细状态 | kubectl describe (-f FILENAME |
edit | 使用默认编辑器编辑和更新服务器上一个或多个定义的资源 | kubectl edit (-f FILENAME |
exec | 对pod中的容器执行命令 | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]] |
explain | 获取各种资源的文档。例如pod,node,services等 | kubectl explain [–include-extended-apis=true] [–recursive=false] [flags] |
expose | 将 replication controller,service或pod作为一个新的Kubernetes service显示 | kubectl expose (-f FILENAME |
get | 列出一个或多个资源 | kubectl get (-f FILENAME |
label | 添加或更新一个或多个资源的flags | kubectl label (-f FILENAME |
logs | 在pod中打印容器的日志 | kubectl logs POD [-c CONTAINER] [–follow] [flags] |
patch | 使用strategic merge 补丁程序更新资源的一个或多个字段 | kubectl patch (-f FILENAME |
port-forward | 将一个或多个本地端口转发到pod | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] |
proxy | 在Kubernetes API服务器运行代理 | kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] |
replace | 从file或stdin替换资源 | kubectl replace -f FILENAME |
rolling-update | 通过逐步替换指定的replication controller及其pod来执行滚动更新 | kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE |
run | 在集群上运行指定的镜像 | kubectl run NAME –image=image [–env="key=value"] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] |
scale | 更新指定replication controller的大小 | kubectl scale (-f FILENAME |
stop | 已弃用 | kubectl stop |
version | 显示客户端和服务器上运行的Kubernetes版本 | kubectl version [–client] [flags] |
英文缩写
英文缩写 |
---|
clusters (仅对federation apiservers有效) |
componentstatuses (缩写 cs) |
configmaps (缩写 cm) |
daemonsets (缩写 ds) |
deployments (缩写 deploy) |
endpoints (缩写 ep) |
events (缩写 ev) |
horizontalpodautoscalers (缩写 hpa) |
ingresses (缩写 ing) |
jobs |
limitranges (缩写 limits) |
namespaces (缩写 ns) |
networkpolicies |
nodes (缩写 no) |
persistentvolumeclaims (缩写 pvc) |
persistentvolumes (缩写 pv) |
pods (缩写 po) |
podsecuritypolicies (缩写 psp) |
podtemplates |
replicasets (缩写 rs) |
replicationcontrollers (缩写 rc) |
resourcequotas (缩写 quota) |
secrets |
serviceaccounts (缩写 sa) |
services (缩写 svc) |
statefulsets |
storageclasses |
thirdpartyresources |
Kubectl 获取资源属性
- 获取 pod 的 ip
- 其中我们通过 -l app=naftis-ui 用于匹配 pod,在 jsonpath 中指定要获取的资源属性
kubectl -n naftis get pod -l app=naftis-ui -o jsonpath='{.items[0].status.podIP}'
Kubectl 同时管理多个集群
-
如果我们有多个集群,那我们就有多个 config 文件。如果切换需要替换 config 文件,这比较麻烦,我们可以在一个 config 文件里面把多个集群配置在一起。
-
比如我们有两个 config 文件,分别如下
-
文件一
current-context: "contexts1"
apiVersion: v1
kind: Config
clusters:
- name: "cluster1"
cluster:
server: "xxxxxxxxxxxxxxxxx"
api-version: v1
certificate-authority-data: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
users:
- name: "user1"
user:
token: "xxxxxxxxxxxxxxxx"
contexts:
- name: "contexts1"
context:
user: "user1"
cluster: "cluster1"
- 文件二
current-context: "contexts2"
apiVersion: v1
kind: Config
clusters:
- name: "cluster2"
cluster:
server: "xxxxxxxxxxxxxxxxx"
api-version: v1
certificate-authority-data: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
users:
- name: "user2"
user:
token: "xxxxxxxxxxxxxxxx"
contexts:
- name: "contexts2"
context:
user: "user2"
cluster: "cluster2"
- 我们可以手动将两个文件合并成一个
current-context: "contexts3"
apiVersion: v1
kind: Config
clusters:
- name: "cluster1"
cluster:
server: "xxxxxxxxxxxxxxxxx"
api-version: v1
certificate-authority-data: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- name: "cluster2"
cluster:
server: "xxxxxxxxxxxxxxxxx"
api-version: v1
certificate-authority-data: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
users:
- name: "user1"
user:
token: "xxxxxxxxxxxxxxxx"
- name: "user2"
user:
token: "xxxxxxxxxxxxxxxx"
contexts:
- name: "contexts1"
context:
user: "user1"
cluster: "cluster1"
- name: "contexts2"
context:
user: "user2"
cluster: "cluster2"
- 这样我们就可以通过命令切换集群了
kubectl config use-context contexts1/contexts2