第三章 Kubernetes进阶之kubectl管理命令
一. kubectl管理命令概要
- 基础命令
- create 通过文件名或标准输入创建资源
- expose 将一个新的资源公开为新的service
- run 在集群中运行一个特定的镜像(创建一个容器)
- set 在对象上设置特定的功能
- get 显示一个或多个资源
- edit 使用默认的编辑器编辑资源
- delete 通过文件名、标准输入、资源名称、或标签选择器来删除资源
- 部署命令
- rollout 管理资源的发布
- rolling-update 对给定的复制控制器滚动更新
- scale 扩容或缩容pod数量,Deployment、ReplicaSet、RC、或Job
- autoscale 创建一个自动选择扩容并设置pod数量
- 集群管理命令
- certficate 修改证书资源
- cluster-info 显示集群信息
- top 显示资源(cpu/memory/storage)使用。需要部署Heapster运行
- cordon 标记节点可以调度
- uncordon 标记节点不可调度 (节点维护情况下使用)
- drain 驱逐节点上的应用,准备下线(比如机器故障、更换等停机)
- taint 修改节点taint标记
- 故障诊断和调试命令
- describe 显示特性资源或资源组详细信息
- log 在一个pod中打印一个容器日志,如果pod只有一个容器日志,容器名称是可选的
- attach 附加到一个运行的容器
- exec 执行命令到容器
- port-forward 转发一个或多个本地端口到pod
- porxy 运行一个porxy到kubernetes api server
- cp 拷贝文件或目录到容器中
- auth 检查授权
- 高级命令
- apply 通过文件名或标准输入对资源应用配置
- patch 通过补丁修改、更新资源字段
- replace 通过文件名或标准输入替换一个资源
- covert 不同api版本之间转换配置文件
- 设置命令
- lable 更新资源上的标签
- annotate 更新资源上的注释
- completion 用于实现kubectl工具自动补全
- 其他命令
- api-versions 打印受支持的api版本
- config 修改kubernetes文件(用于访问api,比如配置认证信息等)
- help 所有帮助命令
- plugin 运行一个命令行插件
- version 打印客户端和服务版本信息
二. kubectl工具管理资源生命周期
k8s创建资源会自动调用后端node,部署是使用镜像进行部署
1,创建
1 2 | #指定名称为nginx 副本数为3 使用镜像为nginx:1.14 端口是80这里的80端口代表的镜像nginx默认的端口80 kubectl run nginx - - replicas = 3 - - image = nginx: 1.14 - - port = 80 |
使用run创建deployment会出现以下警告信息
1 | kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. |
意思是参数--generator=deployment/apps.v1会在将来版本移除,使用kubectl run --generator=run-pod/v1或者kubectl create替代
使用以上命令创建pod
1 | kubectl run nginx --image=nginx:1.14 --replicas=3 --port=80 --generator=run-pod/v1 |
注意:使用该命令创建pod但是不会创建deployment
针对pod使用以下命令创建对应service
1 | kubectl expose pod nginx --port=80 --type=NodePort --target-port=80 --name=nginx-service |
参数解释
1 2 3 4 5 6 | #创建一个service #pod nginx 该service对应的pod名称是nginx #--port=80 k8s中服务之间访问的端口 #--type=NodePort发布类型是NodePort即外部可以访问的端口,会随机生成一个3000以上的端口 #--target-port容器的端口(最根本的端口人口),与制作容器时暴露的端口一致,例如docker.io官方的nginx暴露是80端口 #--name指定service的的名称 |
删除以上创建的pod和service继续,没有deployment不需要删除
1 2 | kubectl delete pod nginx kubectl delete svc nginx-service |
查看创建的pod,正在创建3个副本容器
1 2 3 4 5 | # kubectl get pod NAME READY STATUS RESTARTS AGE nginx - 7bc87ddb4d - 47lrr 0 / 1 ContainerCreating 0 55s nginx - 7bc87ddb4d - 4q9nr 0 / 1 ContainerCreating 0 55s nginx - 7bc87ddb4d - sz8hl 0 / 1 ContainerCreating 0 55s |
创建成功后状态为running
1 2 3 4 5 | # kubectl get pod NAME READY STATUS RESTARTS AGE nginx - 7bc87ddb4d - 47lrr 1 / 1 Running 0 6m nginx - 7bc87ddb4d - 4q9nr 1 / 1 Running 0 6m nginx - 7bc87ddb4d - sz8hl 1 / 1 Running 0 6m |
实际创建了一个包含三个副本的deployment
1 2 3 | # kubectl get deploy NAME READY UP - TO - DATE AVAILABLE AGE nginx 3 / 3 3 3 6m49s |
2,发布
创建好的应用需要创建service暴露应用
1 2 3 4 5 6 7 | #创建一个service #deployment nginx 该service对应的deployment名称是nginx #--port=80 k8s中服务之间访问的端口 #--type=NodePort发布类型是NodePort即外部可以访问的端口,会随机生成一个3000以上的端口 #--target-port容器的端口(最根本的端口人口),与制作容器时暴露的端口一致,例如docker.io官方的nginx暴露是80端口 #--name指定service的的名称 kubectl expose deployment nginx - - port = 80 - - type = NodePort - - target - port = 80 - - name = nginx - service |
查看,对外暴露了端口为30232
1 2 3 4 | # kubectl get service NAME TYPE CLUSTER - IP EXTERNAL - IP PORT(S) AGE kubernetes ClusterIP 10.10 . 10.1 <none> 443 / TCP 3d4h nginx - service NodePort 10.10 . 10.48 <none> 80 : 30232 / TCP 9m8s |
访问 任意node的ip加对应的端口
查看nginx日志
1 | kubectl logs nginx - 7bc87ddb4d - sz8hl |
如果查看日志出现错误提示
1 | Error from server (Forbidden): Forbidden (user = system:anonymous, verb = get, resource = nodes, subresource = proxy) ( pods / log nginx - 7bc87ddb4d - sz8hl) |
解决办法
绑定一个cluster-admin的权限
1 | kubectl create clusterrolebinding system:anonymous - - clusterrole = cluster - admin - - user = system:anonymous |
3,更新项目
项目已经部署需要更新
1 | kubectl set image deployment / nginx nginx = nginx: 1.15 |
会下载镜像滚动更新
更新完毕查看nginx版本变成1.15了
1 | kubectl describe pod nginx - 6f7d58d4cc - 9bj74 |
4,回滚
查看发布过的版本
1 2 3 4 5 | # kubectl rollout history deployment/nginx deployment.extensions / nginx REVISION CHANGE - CAUSE 1 <none> 2 <none> |
其中最后一个版本即为现在正在运行的版本,比如这里的版本2
回滚到上一个版本
1 | kubectl rollout undo deployment / nginx |
指定版本回滚,假如想回滚到版本1
1 | kubectl rollout undo deploy/nginx --to-revision=1 |
回滚后再查看,已经回滚到1版本现在运行的版本是3
1 2 3 4 5 | # kubectl rollout history deploy/nginx deployment.extensions/nginx REVISION CHANGE-CAUSE 2 <none> 3 <none> |
5,删除
项目下线删除
1 2 3 4 | #删除deployment kubectl delete deployment / nginx #删除service kubectl delete svc / nginx - service |
三. kubectl工具远程连接集群
一般管理k8s集群在master进行管理,把管理工具kubectl拷贝至其他主机无法管理集群,本地没有监听的端口8080
1 2 | # kubectl get node The connection to the server localhost: 8080 was refused - did you specify the right host or port? |
生产admin证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # cat admin-csr.json { "CN" : "admin" , "hosts" : [], "key" : { "algo" : "rsa" , "size" : 2048 }, "names" : [ { "C" : "CN" , "ST" : "BeiJing" , "L" : "BeiJing" , "O" : "system:masters" , "OU" : "System" } ] } cfssl gencert - ca = ca.pem - ca - key = ca - key.pem - config = ca - config.json - profile = kubernetes admin - csr.json | cfssljson - bare admin |
在k8s证书目录下执行生成配置文件,这里连接的IP使用的是VIP 192.168.1.60
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | kubectl config set - cluster kubernetes \ > - - server = https: / / 192.168 . 1.60 : 6443 \ > - - embed - certs = true \ > - - certificate - authority = ca.pem \ > - - kubeconfig = config Cluster "kubernetes" set . # kubectl config set-credentials cluster-admin \ > - - certificate - authority = ca.pem \ > - - embed - certs = true \ > - - client - key = admin - key.pem \ > - - client - certificate = admin.pem \ > - - kubeconfig = config User "cluster-admin" set . kubectl config set - context default - - cluster = kubernetes - - user = cluster - admin - - kubeconfig = config Context "default" created. kubectl config use - context default - - kubeconfig = config Switched to context "default" . |
生成config配置文件
把该配置文件config拷贝至其他主机例如node即可以加配置文件运行kubectl命令
1 2 3 4 | # kubectl --kubeconfig=config get node NAME STATUS ROLES AGE VERSION 192.168 . 1.65 Ready <none> 3d22h v1. 13.4 192.168 . 1.66 Ready <none> 3d22h v1. 13.4 |
把配置文件放在以下目录即可以不加配置文件即可使用
1 | / root / .kube |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2019-03-02 ELK之使用kafka作为消息队列收集日志
2018-03-02 Openstack创建镜像
2018-03-02 Openstack深入了解虚拟机