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

(未完待续)

posted @ 2023-01-30 21:00  unchch  阅读(280)  评论(0编辑  收藏  举报