K8s 集群管理命令与 Pod 资源对象的使用
·
文章目录
一、K8s 集群管理常用命令
kubectl 命令是使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具。
kubectl 语法格式
kubectl [command] [TYPE] [NAME] [flags]
command:指定要对一个或多个资源执行的操作type:指定资源类型,不区分大小写, 可以指定单数、复数或缩写形式。name:指定资源的名称。名称区分大小写。 如果省略名称,则显示所有资源的详细信息。flags:指定可选的参数。
信息管理常用命令
help:查看命令及子命令的帮助信息cluster-info:查看集群相关的配置信息api-resources:查看当前服务器上所有的资源对象api-versions:查看当前服务器上所有资源对象的版本config:管理当前节点上的认证信息
# 查看帮助命令信息
kubectl help version
Print the client and server version information for the current context.
Examples:
# Print the client and server versions for the current context
kubectl version
... ...
# 查看集群状态信息
kubectl cluster-info
Kubernetes control plane is running at https://192.168.88.50:6443
CoreDNS is running at https://192.168.88.50:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
... ...
# 查看资源对象类型
kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
endpoints ep v1 true Endpoints
events ev v1 true Event
... ...
# 查看资源对象版本
kubectl api-versions
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
... ...
config 命令
# 查看当前认证使用的用户及证书
kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
# 使用view查看详细配置
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.168.88.50:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
集群管理授权
# 为其他主机添加管理权限,如Harbor主机
# 配置本地域名解析
vim /etc/hosts
192.168.88.240 harbor
192.168.88.10 master
192.168.88.11 node1
192.168.88.12 node2
dnf makecache
# 安装集群管理命令
dnf install -y kubectl
# 证书默认路径:$HOME/.kube/config
mkdir -p $HOME/.kube
# 拷贝证书到目标主机
rsync -av master:/etc/kubernetes/admin.conf $HOME/.kube/config
# 设置证书的属主和属组
chown $(id -u):$(id -g) $HOME/.kube/config
# 查看节点状态
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 24h v1.32.2
node1 Ready <none> 22h v1.32.2
node2 Ready <none> 22h v1.32.2
node3 Ready <none> 22h v1.32.2
二、Pod 资源对象的使用
Pod 资源对象的创建
# 上传镜像到master主机
rsync -av /linux-soft/s4/public/myimg.tar.xz 192.168.88.50:/root/
# 导入镜像
docker load -i myimg.tar.xz
# 上传镜像到library项目
for img in $(docker images --format '{{.Repository}}:{{.Tag}}');do
[[ "${img}" =~ ^"harbor:443/".+ ]] && continue
docker tag ${img} harbor:443/library/${img##*/}
docker push harbor:443/library/${img##*/}
docker rmi ${img} harbor:443/library/${img##*/}
done
# 创建 Pod 资源对象
kubectl run web --image httpd:2.4
pod/web created
# 查询资源对象 -o:指定显示格式 wide:显示更多信息
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
web 1/1 Running 0 97s 10.244.166.129 node1
# 访问验证
curl http://10.244.166.129
Welcome to The Apache.
Pod 资源对象的创建过程

Pod 的创建过程涉及多个 Kubernetes 组件之间的协作,主要包括以下步骤:
- 用户提交请求:用户通过 kubectl 命令行工具或 API 服务器提交 Pod 的资源清单文件。
- API Server 接收并存储:API Server 验证请求参数后,将 Pod 的信息写入到 etcd 中。
- 调度器介入:Scheduler 监听到新的 Pod 被创建,根据资源需求和节点状态进行调度,决定将 Pod 分配到哪个节点上,并更新 etcd 中的信息。
- 节点上的 kubelet 处理:节点上的 kubelet 监听到被调度的 Pod 后,开始调用容器运行时来创建和启动 Pod 中的容器。
- 状态更新:一旦容器启动成功,kubelet 会将 Pod 的状态信息更新回 API Server,最终反映在 etcd 中。
此外,对于静态 Pod,其创建方式有所不同。静态 Pod 是由 kubelet 直接管理的,不需要 API Server 的监管。kubelet 会定期扫描指定目录下的 YAML/JSON 文件以创建或删除静态 Pod。
Pod 资源对象的状态
Pod 在其生命周期中会经历不同的状态(Phase),以下是 Pod 的五种主要状态:
- Pending(挂起):Pod 已被 Kubernetes 系统接受,但尚未被调度到节点上运行。此阶段可能包括等待调度和下载镜像的时间。
- Running(运行中):Pod 已被调度到某个节点,并且其中的所有容器都已创建并正在运行或处于启动/重启过程中。
- Completed(成功):Pod 中的所有容器均已成功终止,并且不会再被重启。
- Failed(失败):Pod 中至少有一个容器以非零状态退出,表示容器运行失败。
- Unknown(未知):Kubernetes 无法获取 Pod 的状态信息,通常是因为与节点通信出现问题。
Pod 管理的常用命令
run:创建 Pod 资源对象,创建即运行,没有停止的概念get:查看资源对象的状态信息,常用参数:-o显示格式create:创建资源对象,不能创建 Poddescribe:查询资源对象的属性信息logs:查看容器的日志,常用参数:-c容器名称exec:在某个容器内执行特定的命令,可选参数:-c容器名称cp:在容器和宿主机之间拷贝文件或目录,可选参数:-c容器名称delete:删除资源对象 可选参数:-l标签
get 命令
# 查看Pod资源对象的运行状态
kubectl get pods
NAME READY STATUS RESTARTS AGE
web 1/1 Running 0 5m10s
# 只查看资源对象的名字
kubectl get pods -o name
pod/web
# 查看资源对象运行节点的信息
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
web 1/1 Running 0 6m19s 10.244.166.129 node1
# 查看资源对象详细信息,Yaml/Json 格式
kubectl get pod myweb -o yaml
apiVersion: v1
kind: Pod
metadata:
name: web
... ...
# 查看命名空间
kubectl get namespaces
NAME STATUS AGE
default Active 2d22h
kube-node-lease Active 2d22h
kube-public Active 2d22h
kube-system Active 2d22h
# 查看系统命名空间中的Pod信息
kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
etcd-master 1/1 Running 0 2d22h
kube-apiserver-master 1/1 Running 0 2d22h
kube-controller-manager-master 1/1 Running 0 2d22h
kube-scheduler-master 1/1 Running 0 2d22h
... ...
create 与 run 命令
# 创建命名空间资源对象
kubectl create namespace work
namespace/work created
# 查看命名空间
kubectl get namespaces
NAME STATUS AGE
default Active 2d22h
kube-node-lease Active 2d22h
kube-public Active 2d22h
kube-system Active 2d22h
work Active 10s
# 在命名空间work下创建Pod
kubectl -n work run web --image nginx:1.27.5
pod/web created
# 查询命名空间work下的Pod信息
kubectl -n work get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
web 1/1 Running 0 19s 10.244.104.1 node2
# 访问验证
curl http://10.244.104.1
Nginx is running !
describe 与 logs 命令
# 查看资源对象的配置信息
kubectl -n work describe pod web
Name: web
Namespace: work
Priority: 0
Service Account: default
Node: node2/192.168.88.12
... ...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 63s default-scheduler Successfully assigned work/web to node2
Normal Pulling 62s kubelet Pulling image "nginx:1.27.5"
Normal Pulled 60s kubelet Successfully pulled image "nginx:1.27.5" ......
Normal Created 60s kubelet Created container: web
Normal Started 60s kubelet Started container web
# 查看命名空间work的配置信息
kubectl describe namespaces work
Name: work
Labels: kubernetes.io/metadata.name=work
Annotations: <none>
Status: Active
No resource quota.
No LimitRange resource.
# 查看容器日志
kubectl -n work logs web
# 不写就是默认的default命名空间
kubectl logs web
exec 命令
# 在容器内执行命令
kubectl exec -it web -- ls
index.html info.php
# --:选项终止符
kubectl exec -it web -- bash
pwd
/var/www/html
ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.244.166.129 netmask 255.255.255.0 broadcast 10.244.166.255
ether 3a:32:78:59:ed:25 txqueuelen 0 (Ethernet)
... ...
cp 命令
# 与容器进行文件或目录传输
kubectl -n default cp web:/var/www ./www
tar: Removing leading `/' from member names
# 将宿主机的文件拷贝到容器中
kubectl -n work cp www/html/info.php web:/root/
kubectl -n work exec -it web -- ls
info.php
delete 命令
# 删除资源对象
kubectl delete pods web
pod "web" deleted
# 删除命名空间work下所有 Pod 对象
kubectl -n work delete pods --all
pod "web" deleted
# 删除命名空间
kubectl delete namespaces work
namespace "work" deleted
更多推荐
所有评论(0)