k8s系列3之kubectl常用命令

admin 2024年6月8日22:38:26评论3 views字数 4179阅读13分55秒阅读模式

前言

Kubernetes API是管理各种资源对象的唯一入口,它提供了一个RESTful风格的CRUD(Create、Read、Update和Delete)接口用于查询和修改集群状态,并将结果存储在集群状态存储系统etcd中。事实上,API Server也是用于更新etcd中资源对象状态的唯一途径,Kubernetes的其他所有组件和客户端都要通过它完成查询或修改操作

kubectl的核心功能在于通过API Server操作Kubernetes的各种资源对象,它支持3种操作方式,其中直接命令式使用最为简便,是了解Kubernetes集群管理的有效途径。

对于Kubernetes中,Pod、Deployment和Service等都是所谓的资源类型,它们由相应类型的对象集合而成。

k8s系列3之kubectl常用命令

kubectl命令格式

语法格式:

kubectl [command] [TYPE] [NAME] [flags]
▪command:对资源执行相应操作的子命令,例如get、createdelete、run等;TYPE:要操作的资源类型,例如pods、services等;类型名称大小写敏感,但支持使用单数、复数或简写格式。NAME:要操作的资源对象名称,大小写敏感;省略时,则表示指定TYPE的所有资源对象;同一类型的资源名称可于TYPE后同时给出多个,也可以直接使用TYPE/NAME的格式来为每个资源对象分别指定类型。▪flags:命令行选项,例如-s或--server等;另外,get等命令在输出时还有一个常用的标志-o 用于指定输出格式

常用命令

命令

命令类别

功能说明

create

基础命令

通过文件或者标准输入创建资源

expose

基础命令

基于RC,Service,Deployment或Pod创建Service资源

run

基础命令

在集群中以Pod形式运行指定的镜像

set

基础命令

设置目标资源对象的特定属性

get

基础命令

显示一个或多个资源

explain

基础命令

打印指定资源的内置文档

edit

基础命令

编辑资源

delete

基础命令

基于文件名,stdin,资源或名字,以及资源和选择器删除资源

rollout

部署命令

管理资源的滚动更新

scale

部署命令

伸缩Deployment,ReplicaSet,RC或Job的规模

autoscale

部署命令

对 Deploymcnt、ReplicaSet或RC 进行自动伸缩

certifieate

部署命令

配置数字证书资源

cluster-info

部署命令

打印集群信息

top

集群管理命令

打印资源(CPU/Memory/Storage)使用率

cordon

集群管理命令

将指定node设定为“不可用”(unschedulable)状态

uncordon

集群管理命令

将指定 node  设定为“可用"(schedulable)状态

drain

集群管理命令

“排空”Nodc 上的Pod 以进人“维护”模式

taint

集群管理命令

为Node 声明污点及标准行为

describe

集群管理命令

显示指定的资源或资源组的详细信息

logs

排错以及调试命令

显示一个Pod内某容器的目志

attach

排错以及调试命令

附加终端至一个运行中的容器

exec

排错以及调试命令

在容器中执行指定命令

port-forward

排错以及调试命令

将本地的一个或多个端口转发至指定的Pod

prоxy

排错以及调试命令

创建能够访间KuberetesAPlServer 的代理

cp

排错以及调试命令

在容器间复制文件或目录

auth

排错以及调试命令

打印授权信息

diff

高级命令

对比当前版本与即将应用的新版本的不同

apply

高级命令

基于文件或sldin将配置应用于资源

patch

高级命令

使用策略合并补丁更新资源字段

replace

高级命令

基于文件或sldin替换一个资源

walt

高级命令

等待一个或多个资源上的指定境况(condition)

convert

高级命令

为不同的API版本转换配置文件

kuslomize

高级命令

某于目录或URL构建kustomization日标

label

设置命令

更新指定资源的label

annofate

设置命令

更新资源的 annotation

completion

设置命令

输出指定的shell(例如bash)的补全码

version

其它命令

打印Kubcmetes服务端和客户端的版本信息

api-versions

其它命令

以group/version格式打印服务器支持的API版本信息

api-resourees

其它命令

打印API支持的资源类型

confg

其它命令

配置kubcconig文件的内容

plugin

其它命令

运行命令行插件

alpha

其它命令

仍处于 Alpha 阶段的子命令

kubectl get命令常用输出格式

k8s系列3之kubectl常用命令

此外,kubectl还有许多通用选项,这个可以使用kubectl options命令获取。其中比较常用的选项如下所示。

▪-s或--server:指定API Server的地址和端口。--kubeconfig:使用的kubeconfig配置文件路径,默认为~/.kube/config。▪-n或--namespace:命令执行的目标名称空间。

常见命令举例

1.加入节点

节点加入集群的命令格式:

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

由于默认token的有效期为24小时,当过期之后,该token就不可用了,解决方法如下:

重新生成新的token ==> kubeadm token create 

1.查看当前的token列表

kubeadm token list

2.重新生成新的token

kubeadm token create --print-join-command

3.再次查看当前的token列表

kubeadm token list

4.获取ca证书sha256编码hash值

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

5.执行命令将节点加入集群

通过上面第三步获取到的命令,将节点加入集群

kubeadm join 10.100.5.122:6443 --token  新的token --discovery-token-ca-cert-hash sha256:新的值

2.查看资源对象

kubectl get nodes查看所有的pod
查看创建pod的命令,一般需要指定命名空间。kubectl get pods -A  显示所有的podskubectl get pods -n namespace  显示namespace命名空间下的pods查看pod的详细信息以及报错信息都可以通过下面的命令kubectl describe pod redis-phpkubectl get namespace

3.创建资源对象

kubectl create namespace devkubectl create deployment demoapp --image="ikubernetes/demoapp:v1.0" -n dev

k8s系列3之kubectl常用命令

4.打印资源对象的详细信息

kubectl get pods demoapp-7c58cd6bb-7d6vb -o yaml -n dev
kubectl describe查看资源的详细情况

k8s系列3之kubectl常用命令

5.打印容器中的日志信息

kubectl logs命令

k8s系列3之kubectl常用命令

6.在容器中执行命令

kubectl exec demoapp-7c58cd6bb-7d6vb -n dev -- ps

k8s系列3之kubectl常用命令

7.删除资源对象

kubectl delete命令能够删除指定的资源对象,例如下面的命令可删除default名称空间中名为demoapp-svc的Service资源对象

k8s系列3之kubectl常用命令

若要删除指定名称空间中的所有某类对象,可以使用类似kubectl delete TYPE --all -n NS格式的命令

8.k8s命令对node调度

cordon,drain,delete

cordon 停止调度

影响最小,只会将node调为SchedulingDisabled

之后再发创建pod,不会被调度到该节点

旧有的pod不会受到影响,仍正常对外提供服务

恢复调度

kubectl uncordon node_name

drain 驱逐节点

首先,驱逐node上的pod,其他节点重新创建

接着,将节点调为** SchedulingDisabled**

在对节点维护的时候,一般操作是先将节点设置成不可调度,然后再驱逐node上的pod,驱逐的pod会在其它node上重新创建。如下:

1) 封锁节点,先让节点变的不可调度

kubectl cordon

2)使用 kubectl drain 安全驱逐节点上面所有的 pod

kubectl drain [node-name] --force --ignore-daemonsets --delete-local-data

恢复调度

上面两种方式会使节点变得无法调度,可以通过下面的命令恢复调度

kubectl uncordon node_name

9.删除节点

不需要这个节点的话,可以选择删除节点,第一步通过drain驱逐所有的节点,然后在删除掉节点。

kubectl delete  nodes  node_name

这种方式比较暴力,将被删节点从master管理范围内移除,master对其失去管理控制,若想使node重归麾下,必须在node节点重启kubelet。

如果需要彻底删除这个节点,重启kubectl也不能恢复的话,需要到node节点上执行下面的操作:

kubeadm resetsystemctl stop kubeletsystemctl stop dockerrm -rf /var/lib/cni/rm -rf /var/lib/kubelet/*rm -rf /etc/cni/ifconfig cni0 downifconfig flannel.1 downifconfig docker0 downip link delete cni0ip link delete flannel.1systemctl start dockersystemctl start kubelet

原文始发于微信公众号(信安路漫漫):k8s系列3之kubectl常用命令

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月8日22:38:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   k8s系列3之kubectl常用命令http://cn-sec.com/archives/2816578.html

发表评论

匿名网友 填写信息