k8s02 - 集群操作基础命令(持续补充)
基础操作命令
1、kubectl 命令
1.1 自动补全
在k8s 1.3版本之前,设置kubectl命令自动补全是通过以下的方式:
source ./contrib/completions/bash/kubectl
但是在k8s 1.3版本,源码contrib目录中已经没有了completions
目录,无法再使用以上方式添加自动补全功能。
1.3版本后,kubectl
添加了一个completions
的命令, 该命令可用于自动补全
source <(kubectl completion bash)
具体步骤如下:
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
2、containerd 常用命令
在了解容器相关命令前,先看一张图,了解一下 docker/ctr/crictl 三者的关系:
-
主要有以下区别
- docker 底层使用的是 containerd, 但 docker 操作的是 containerd 下 moby 命名空间下的资源,只能操作容器,而不能操作 containerd 的镜像
- ctr 是 containerd 自带工具,对接是 containerd 的 api,操作的是 containerd下 的 default 空间,并且镜像保存目录与docker 不通,ctr 也不能操作docker的镜像
- crictl 是 k8s 提供的,操作的是 containerd下的 k8s.io 空间,其命名用法几乎与 docker 一致,甚至可以使用 alias docker=crictl 在系统中建立快捷命令
-
万事不明, 先看帮助 -h
# ctr -h
# 以下是输出
NAME:
ctr -
__
_____/ /______
/ ___/ __/ ___/
/ /__/ /_/ /
\___/\__/_/
containerd CLI
USAGE:
ctr [global options] command [command options] [arguments...]
VERSION:
v1.6.14
DESCRIPTION:
ctr is an unsupported debug and administrative client for interacting
with the containerd daemon. Because it is unsupported, the commands,
options, and operations are not guaranteed to be backward compatible or
stable from release to release of the containerd project.
COMMANDS:
plugins, plugin provides information about containerd plugins
version print the client and server versions
containers, c, container manage containers
content manage content
events, event display containerd events
images, image, i manage images # images,image,i 都可以用,是相同的意思,i是简写
leases manage leases
namespaces, namespace, ns manage namespaces
pprof provide golang pprof outputs for containerd
run run a container
snapshots, snapshot manage snapshots
tasks, t, task manage tasks
install install a new package
oci OCI tools
shim interact with a shim directly
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--debug enable debug output in logs
--address value, -a value address for containerd's GRPC server (default: "/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]
--timeout value total timeout for ctr commands (default: 0s)
--connect-timeout value timeout for connecting to containerd (default: 0s)
--namespace value, -n value namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]
--help, -h show help
--version, -v print the version
images,image, i 都可以用,三者是相同的含义,例如拉取镜像时,可以使用
ctr images pull <image>
,也可以用ctr image pull <image>
,日常经常使用ctr i pull <image>
序号 | 操作含义 | 命令 | 说明 |
---|---|---|---|
1 | 拉取镜像 | ctr i pull docker.io/library/redis:alpine |
镜像需要输入完整的域名,不像docker会自动补全从 docker.io 拉取,containerd并没有默认的仓库地址 |
2 | 列出镜像 | ctr i ls, ctr imae list, ctr i list |
|
3 | 列出命名空间 | ctr ns ls |
引申出一个问题,如果节点上同时安装了containerd和docker,他们的镜像是否能共享?默认是不能共享的,二者存贮镜像的位置不一样,containerd的镜像文件存贮在 /var/lib/containerd ,而docker的镜像文件存贮在/var/lib/docker ,docker改革为docker-ce后(理解为新版docker即可)默认会创建一个moby的命名空间,ctr -n moby i ls 可以尝试列出 moby空间下的镜像 ,看不到 docker 下载的镜像。实际上,docker镜像和containerd是通用的。 |
4 | 列出指定空间下的镜像 | ctr -n k8s.io i ls |
|
5 | 删除镜像 | ctr -n k8s.io i rm docker.io/library/redis:alpine |
|
6 | 镜像标记tag | ctr -n k8s.io i tag rdocker.io/library/redis:alpine docker.io/library/redis:alpine_v1 |
ctr -n (namespace) tag (旧tag) (新tag),若新tag已存在,可用参数 --force 强制覆盖 |
7 | 推送镜像 | ctr -n k8s.io i push -k docker.io/library/redis:alpine_v1 |
-k :--skip-verify, -k skip SSL certificate validation |
8 | 导出镜像 | ctr -n k8s.io i export pause.tar k8s.gcr.io/pause:3.2 |
|
9 | 导入镜像 | ctr -n k8s.io i import pause.tar |
|
10 | 查看容器 | ctr task ls |
|
11 | 直接运行一个动态的容器1 | ctr run -t -d docker.io/library/redis:alpine_v1 redis_v1 |
-d : 后台运行,当task执行后就进行下一步shell命令,如没有选项,则会等待用户输入,并定向到容器内 |
直接运行一个动态的容器2 | ctr run -d --net-host docker.io/library/nginx:alpine nginx_v2 |
-d : 代表dameon,后台运行, --net-host : 代表容器的IP就是宿主机的IP(相当于docker里的host类型网络) |
|
12 | 进入容器操作 | ctr -n default task exec --exec-id $RANDOM -t redis_v1 sh |
$RANDOM 可以是常数,如 1 |
13 | 停止容器 | ctr task kill redis_v1 |
使用kill命令停止容器中运行的进程,既为停止容器 |
14 | 暂停容器 | ctr tasks pause redis_v1 |
|
15 | 恢复容器 | ctr tasks resume redis_v1 |
只能恢复 PAUSE 状态的容器,不能恢复处于 STOPPED 的容器 |
16 | 删除容器 | ctr tasks delete redis_v1 |
|
17 | 创建一个静态的容器 | ctr c create docker.io/library/redis:alpine_v1 redis_v2 |
静态容器创建后处于非运行状态,可使用 ctr c ls 查看容器列表,使用ctr t ls 查看容器的状态,ctr t ls 不会列出静态容器 |
18 | 查看容器详细信息 | ctr c info redis_v3 |
|
19 | 日志查看 | containerd 作为k8s 的容器运行时的情况下,容器日志的落盘由kubelet 完成,保存到 /var/log/pods/$CONTAINER_NAME 目录下,同时在 var/log/containers 目录下建立软链接,指向日志文件 |
|
20 | 日志配置 | 在kubelet 参数中指定:--container-log-max-files=10 ,--container-log-max-size=200Mi |
延伸1:docker run 运行的容器与 containerd 是什么关系?
当同一台主机同时安装了 docker 和 containerd 时,docker run 运行的容器处于docker自动创建的 moby 空间下,此时如果用 ctr -n moby task ls 查看 containerd 下的 task, 是能够看到 docker run 启动的容器的
延伸2:容器c与任务t的关系
容器可以是静态的,也可以是动态的;静态容器是指创建了容器,但容器中没有任务在运行,只是一个空壳子,是无状态的,静态容器可以用 ctr c ls查看;ctr t ls 只能看到有状态的容器,如STOPPED,RUNNING,PAUSE,看不到静态容器
3、crictl
crictl
可以直接查看 k8s 中的容器,由 k8s 提供,它使用的命名空间是 k8s.io,单conntainerd环境下,该命令无输出
crictl
的命令大部分与 docker 类似
序号 | 操作含义 | 命令 | 说明 |
---|---|---|---|
1 | crictl images | 列出镜像 | |
2 | crictl ps | 列出所有在运行的pod | |
3 | crictl pods | 列出所有pod |
其余命令可以查看帮助
crictl -h
# 以下为输出
NAME:
crictl - client for CRI
USAGE:
crictl [global options] command [command options] [arguments...]
VERSION:
1.24.1
COMMANDS:
attach Attach to a running container
create Create a new container
exec Run a command in a running container
version Display runtime version information
images, image, img List images
inspect Display the status of one or more containers
inspecti Return the status of one or more images
imagefsinfo Return image filesystem info
inspectp Display the status of one or more pods
logs Fetch the logs of a container
port-forward Forward local port to a pod
ps List containers
pull Pull an image from a registry
run Run a new container inside a sandbox
runp Run a new pod
rm Remove one or more containers
rmi Remove one or more images
rmp Remove one or more pods
pods List pods
start Start one or more created containers
info Display information of the container runtime
stop Stop one or more running containers
stopp Stop one or more running pods
update Update one or more running containers
config Get and set crictl client configuration options
stats List container(s) resource usage statistics
statsp List pod resource usage statistics
completion Output shell completion code
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--config value, -c value Location of the client config file. If not specified and the default does not exist, the program's directory is searched as well (default: "/etc/crictl.yaml") [$CRI_CONFIG_FILE]
--debug, -D Enable debug mode (default: false)
--image-endpoint value, -i value Endpoint of CRI image manager service (default: uses 'runtime-endpoint' setting) [$IMAGE_SERVICE_ENDPOINT]
--runtime-endpoint value, -r value Endpoint of CRI container runtime service (default: uses in order the first successful one of [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]). Default is now deprecated and the endpoint should be set instead. [$CONTAINER_RUNTIME_ENDPOINT]
--timeout value, -t value Timeout of connecting to the server in seconds (e.g. 2s, 20s.). 0 or less is set to default (default: 2s)
--help, -h show help (default: false)
--version, -v print the version (default: false)
4 worker 节点标签相关
- 查看所有节点及labels
kubectl get node --show-labels
- 给节点添加labels
kubectl label node <node-name> <label-key>=<label-value>
例如给节点 vm22 添加一个标签: app=ingress
kubectl label node vm23 app=ingress
- 删除节点的labels
kubectl label nodes <node-name> <label-key>-
例如删除节点vm23 的app=ingress
[root@vm21 ~]# kubectl label nodes vm23 app-
node/vm23 unlabeled
(此处注意命令,是在
- 修改节点的labels
kubectl label nodes <node-name> <label-key>=<label-value> --overwrite
加上--overwrite参数即可,如:
kubectl label nodes vm23 app=test --overwrite
(未完待续)