使用Kubectl管理kubernetes集群

1 资源管理

create

根据文件或者输入来创建资源

# 创建Deployment和Service资源
$ kubectl create -f demo-deployment.yaml
$ kubectl create -f demo-service.yaml

delete

删除资源

# 根据yaml文件删除对应的资源,不会被删除yaml文件

$ kubectl delete -f demo-deployment.yaml
$ kubectl delete -f demo-service.yaml

# 通过具体的资源名称来进行删除,同时删除deployment和service资源

$ kubectl delete 具体的资源名称

get

获取资源信息

# 查看所有的资源信息
$ kubectl get all
$ kubectl get --all-namespaces

# 查看pod列表
$ kubectl get pod
# 显示mypod节点的标签信息,如果不指定默认显示所有的
$ kubectl get pod [mypod] --show-labels
# 查看标签为example的pod
$ kubectl get pods -l app=example
# 查看pod详细信息,包括pod具体运行在哪个节点上(ip地址信息)
$ kubectl get pod -o wide
# 查看所有pod所属的命名空间
$ kubectl get pod --all-namespaces

# 查看所有node节点列表
$ kubectl get node
# 显示mynode节点的标签信息
$ kubectl get node mynode --show-labels

# 查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
$ kubectl get svc
$ kubectl get svc -n kube-system

# 查看命名空间
$ kubectl get ns
$ kubectl get namespaces

# 查看目前所有的replica set,显示了所有的pod的副本数,以及他们的可用数量以及状态等信息
$ kubectl get rs

# 查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息
$ kubectl get deploy -o wide
$ kubectl get deployments -o wide

通过--field-selector指定参数可以对查询的结果进行筛选过滤,例如要查询在i-node4mx4knp5dezenp5up节点上的pod列表,可以依据pod描述文件中的spec.nodeName进行筛选,可以通过使用逗号分隔多个选择条件

kubectl get pods --field-selector spec.nodeName=i-node4mx4knp5dezenp5up

不同的 Kubernetes 资源类型支持不同的字段选择器, 所有资源类型都支持 metadata.name和 metadata.namespace 字段。 使用不被支持的字段选择器会报错:field selector is not a known field selector

通过如下方式可以查看pod的制定标签内容,例如查看.metadata.namespace值

kubectl get pod <pod-name> -o=jsonpath='{.metadata.namespace}'

run

在集群中创建并运行一个或多个容器镜像。

# 示例,运行一个名称为nginx,镜像为nginx:1.10,副本数为3,标签为app=example,端口为80的容器实例,并绑定到k8s-node1上
$ kubectl run nginx --image=nginx:1.10 --replicas=3 --labels="app=example" --port=80 --overrides='{"apiVersion":"apps/v1","spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-node1"}}}}}'

expose

暴露端口让外部可以访问

# 创建一个nginx服务并且暴露端口到80让外界访问
$ kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service

set

命令用于对资源进行设置,例如进行一些范围限制、具体镜像设置。

# 将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
$ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi

# 设置所有nginx容器中 Requests和Limits
$ kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi

# 删除nginx中容器的计算资源值
$ kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0

# 所有deployment和rc的nginx容器镜像更新为“nginx:1.9.1”
$ kubectl set image deployments,rc nginx=nginx:1.9.1 --all

# 将daemonset abc的所有容器镜像更新为“nginx:1.9.1”
$ kubectl set image daemonset abc *=nginx:1.9.1

edit

用于编辑资源信息

# 编辑Deployment nginx的一些信息
$ kubectl edit deployment nginx

# 编辑service类型的nginx的一些信息
$ kubectl edit service/nginx

2 容器管理

apply

通过文件名或控制台输入,对资源进行配置。如果资源不存在,将会新建一个。可以使用 JSON 或者 YAML格式。

# 将pod.json中的配置应用到pod
$ kubectl apply -f ./pod.json

# 将控制台输入的JSON配置应用到Pod
$ cat pod.json | kubectl apply -f -

参数选项:

  • -f, --filename=[]: 包含配置信息的文件名,目录名或者URL。
  • -o, --output=“”: 输出模式。"-o name"为快捷输出(资源/name).
  • –record[=false]: 在资源注释中记录当前 kubectl 命令。
  • -R, --recursive[=false]: 递归处理文件夹下的文件
  • –schema-cache-dir=“~/.kube/schema”: 非空则将API schema缓存为指定文件,默认缓存到’$HOME/.kube/schema’
  • –validate[=true]: 如果为true,在发送到服务端前先使用schema来验证输入。

patch

更新资源的字段,也就是修改资源的部分内容

# 更新k8s-node-1节点unschedulable为true
$ kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'

replace

通过文件或者标准输入替换原有资源

# 使用pod.json中的数据替换pod
$ kubectl replace -f ./pod.json

# 强制执行
$ kubectl replace --force -f ./pod.json

convert

不同的版本之间转换配置文件

# 将'pod.yaml' 转换为最新版本并输出
$ kubectl convert -f pod.yaml

# 通过pod.yaml输出资源的最新状态并转化为json输出
$ kubectl convert -f pod.yaml --local -o json

# 将文件下的所有文件转换为最新版本
$ kubectl convert -f . | kubectl create -f -

label

用于更新(增加、修改或删除)资源上的 label(标签)

# 给名为foo的Pod添加label unhealthy=true
$ kubectl label pods foo unhealthy=true

# 覆盖更新pod的label
$ kubectl label --overwrite pods foo status=unhealthy

# 给 namespace 中的所有 pod 添加 label
$ kubectl label  pods --all status=unhealth

# 删除名为“bar”的label 。(使用“ - ”减号相连)
$ kubectl label pods foo bar-

annotate

更新一个或多个资源的注解Annotations信息

# 更新Pod“foo”,设置annotation “description”为“my frontend”
$ kubectl annotate pods foo description='my frontend'

# 根据“pod.json”中的type和name更新pod的annotation
$ kubectl annotate -f pod.json description='my frontend'

# 通过删除名为“description”的annotations
$ kubectl annotate pods foo description-

Kubernets部署相关命令

rollout

用于对deployments,daemonsets的版本进行管理。子命令包括:history(查看历史版本)、pause(暂停资源)、resume(恢复暂停资源)、status(查看资源状态)、undo(回滚版本)

# 语法
$ kubectl rollout SUBCOMMAND

# 回滚到之前的deployment
$ kubectl rollout undo deployment/abc

# 查看daemonet的状态
$ kubectl rollout status daemonset/foo

rolling-update命令: 滚动更新ReplicationController,该命令会逐步使用新的ReplicationController去替换旧的,最终实现Pod滚动更新。

# 使用frontend-v2.json中的新RC数据更新frontend-v1的pod
$ kubectl rolling-update frontend-v1 -f frontend-v2.json

scale

扩容或缩容

# 将foo中的pod副本数设置为3。
$ kubectl scale --replicas=3 rs/foo

# 将由“foo.yaml”配置文件中的Pod资源副本设为3
$ kubectl scale --replicas=3 -f foo.yaml

# 如果当前副本数为2,则将其扩展至3。
$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

autoscale

弹性伸缩策略 ,根据流量的多少来自动进行扩展或者缩容

# 使用默认的自动伸缩策略,使其Pod数量在2到10之间
$ kubectl autoscale deployment foo --min=2 --max=10

# 使用RC“foo”设定,使其Pod的数量介于1和5之间,CPU使用率维持在80%
$ kubectl autoscale rc foo --max=5 --cpu-percent=80

3 容器交互

describe

显示特定资源的详细信息

# 查看my-nginx pod的详细状态
$ kubectl describe po my-nginx

logs

打印pod容器的日志,如果pod中只有一个容器,可以省略容器名。命令具体参数如下:

  • -c, --container=“”: 容器名。
  • -f, --follow[=false]: 指定是否持续输出日志(实时日志)。
  • –interactive[=true]: 如果为true,当需要时提示用户进行输入。默认为true。
  • –limit-bytes=0: 输出日志的最大字节数。默认无限制。
  • -p, --previous[=false]: 如果为true,输出pod中曾经运行过,但目前已终止的容器的日志。
  • –since=0: 仅返回相对时间范围,如5s、2m或3h,之内的日志。默认返回所有日志。只能同时使用since和since-time中的一种。
  • –tail=-1: 要显示的最新的日志条数。默认为-1,显示所有的日志。
  • –timestamps[=false]: 在日志中包含时间戳
# 返回仅包含一个容器的pod nginx的日志快照
$ kubectl logs nginx

# 返回pod ruby中已经停止的容器web-1的日志快照
$ kubectl logs -p -c ruby web-1

# 持续输出pod ruby中的容器web-1的日志
$ kubectl logs -f -c ruby web-1

exec

进入容器进行交互,命令选项:

  • -c, --container=“”: 容器名。如果未指定,使用pod中的一个容器。
  • -p, --pod=“”: Pod名。
  • -i, --stdin[=false]: 将控制台输入发送到容器。
  • -t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。
# 进入nginx容器,执行一些命令操作
$ kubectl exec -it nginx-deployment-58d6d6ccb8-lc5fp bash

attach

连接到一个正在运行的容器。

-c, --container="": pod中的容器名。默认选择第一个 pod。
-i, --stdin[=false]: 将控制台输入发送到容器。
-t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。
# 获取pod 123456-7890中ruby-container的输出
$ kubectl attach mypod -c ruby-container

# 切换到终端模式,将输入发送到pod 123456-7890的ruby-container的“bash”命令,并将其输出到控制台
$ kubectl attach mypod -c ruby-container -i -t

cp

拷贝文件或者目录到pod容器中,用于pod和外部的文件交换,将容器中的内容和外部的内容进行交换。

4 集群管理

certificate命令:用于证书资源管理,授权等

# 例如,当有node节点要向master请求,那么是需要master节点授权的
$ kubectl certificate approve node-csr-81F5uBehyEyLWco5qavBsxc1GzFcZk3aFM3XW5rT3mw node-csr-Ed0kbFhc_q7qx14H3QpqLIUs0uKo036O2SnFpIheM18

cluster-info 命令:显示集群信息

$ kubectl cluster-info

top 命令:用于查看资源的cpu,内存磁盘等资源的使用率

# 以前需要heapster,后替换为metrics-server
$ kubectl top pod --all-namespaces

cordon命令:用于标记某个节点不可调度

uncordon命令:用于标签节点可以调度

drain命令:用于在维护期间排除节点。

taint命令:用于给某个Node节点设置污点

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值