Kubernetes(十)Kubectl管理工具&常用操作&资源发布

  • A+
所属分类:Kubernetes

参考:http://docs.kubernetes.org.cn/494.html

查看命令帮助

kubectl --help

查看某一个命令的帮助手册

kubectl <command> --help
kubectl create --help
kubectl run -help

命令详解

基础命令

create		 通过文件名或标准输入创建资源
expose		 将一个资源公开为一个新的Service
run 		 集群中运行一个特定的镜像
set 		 在对象上设置特定的功能
get 		 显示一个或多个资源
explain 	 文档参考资料。
edit 		 使用默认的编辑器编辑一个资源。
delete 		 通过文件名、标准输入、资源名称或标签选择器来删除资源。

部署命令

rollout 		管理资源的发布
rolling-update 	        对给定的复制控制器滚动更新
scale			扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job
autoscale 		创建一个自动选择扩容或缩容并设置Pod数量

集群管理命令

certificate 		修改证书资源
cluster-info 		显示集群信息
top 		    显示资源(CPU/Memory/Storage)使用。需要Heapster运行
cordon 		标记节点不可调度
uncordon		标记节点可调度
drain		    维护期间排除节点
taint

故障诊断和调试命令

describe 	显示特定资源或资源组的详细信息
logs		在一个Pod中打印一个容器日志。如果Pod只有一个容器,容器名称是可选的
attach 	附加到一个运行的容器
exec		执行命令到容器
port-forward  转发一个或多个本地端口到一个pod
proxy 		运行一个proxy到Kubernetes API server
cp 		拷贝文件或目录到容器中
auth 		检查授权

高级命令

apply 		通过文件名或标准输入对资源应用配置
patch 		使用补丁修改、更新资源的字段
replace 	通过文件名或标准输入替换一个资源
convert 	不同的API版本之间转换配置文件

设置命令

label 			更新资源上的标签
annotate 		更新资源上的注释
completion 		用于实现kubectl工具自动补全

其他命令

api-versions 		打印受支持的API版本
config 		修改kubeconfig文件(用于访问API,比如配置认证信息)
help 			所有命令帮助
plugin 		运行一个命令行插件
version 		打印客户端和服务版本信息

常用命令演示

创建命名空间

[root@k8s-master Dashboard]# kubectl create namespace mike
namespace "mike" created

查看命名空间,可以使用kubectl get ns

[root@k8s-master Dashboard]# kubectl get namespace
NAME          STATUS    AGE
default       Active    15h
kube-public   Active    15h
kube-system   Active    15h
mike          Active    11s

kubectl get all 获取资源id

查看资源或资源组详细信息

[root@k8s-master ~]# kubectl describe po/nginx-bd9bb4588-mlkxz

查看资源日志

[root@k8s-master ~]# kubectl  logs po/nginx-bd9bb4588-mlkxz

进入容器,不需要指定pod

[root@k8s-master ~]# kubectl exec -it nginx-bd9bb4588-mlkxz bash

删除资源,还要删除svc

kubectl delete deploy/nginx
kubectl delete svc/nginx-service

查看集群版本

[root@k8s-master ~]# kubectl version

部署一个Nginx实例

1、创建(运行nginx,指定副本数量3,定义标签:app=example,指定镜像和端口)

kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80

2、查看

kubectl get deploy

查看所有标签

kubectl get pods --show-labels

查看某一个标签

kubectl get pods -l app=example

查看pod详细信息(分配的ip和节点)

kubectl get pods -o wide

查看其他的资源详细信息

kubectl get deploy -o wide
kubectl get cs -o wide

3、发布

node节点创建完,还要发布到负载均衡,用户才能访问,是使用node节点的kuber-proxy完成的;

expose deployment nginx是根据:kubectl get deploy里面的名称创建的

kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service

创建完成可以查看service

[root@k8s-master ~]# kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.10.10.1   <none>        443/TCP        18h
nginx-service   NodePort    10.10.10.7   <none>        88:42640/TCP   4m

所有node节点,可以通过cluster-ip来访问服务

curl 10.10.10.7:88

可以看到iptables 转发规则

[root@k8s-node02 ~]# iptables-save |grep 88
-A KUBE-SERVICES -d 10.10.10.7/32 -p tcp -m comment --comment "default/nginx-service: cluster IP" -m tcp --dport 88 -j KUBE-SVC-GKN7Y2BSGW4NJTYL

查看某一个service信息

kubectl describe service nginx-service

4、故障排查

kubectl describe TYPE NAME_PREFIX
kubectl logs nginx-xxx
kubectl exec –it nginx-xxx bash

5、更新

kubectl set image deployment/nginx nginx=nginx:1.11
or
kubectl edit deployment/nginx

资源发布管理

查看资源发布和回滚状态

kubectl rollout status deployment/nginx

查看历史发布和回滚记录

kubectl rollout history deployment/nginx

重新发布一个1.13版本nginx, --record是记录

kubectl set image deployment/nginx nginx=nginx:1.13 --record=true

重新发布一个1.12版本nginx, --record是记录

kubectl set image deployment/nginx nginx=nginx:1.12 --record=true

可以看到发布的记录,如果出现问题,能根据发布号回滚(之前发布的第三个版本号不见了,因为被回滚)

[root@k8s-master ~]# kubectl rollout history deployment/nginx
deployments "nginx"
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
4         kubectl set image deployment/nginx nginx=nginx:1.13 --record=true
5         kubectl set image deployment/nginx nginx=nginx:1.12 --record=true

查看某一个发布版本

kubectl rollout history deployment/nginx --revision=4

弹性伸缩扩容,副本集伸缩为2个

[root@k8s-master ~]# kubectl scale deploy/nginx --replicas=2

6、回滚

默认回滚到上一个版本,可以看到一件变成了nginx1.12

[root@k8s-master ~]# kubectl rollout undo deployment/nginx
deployment "nginx"
[root@k8s-master ~]# kubectl rollout history deploy/nginx
deployments "nginx"
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
5         kubectl set image deployment/nginx nginx=nginx:1.12 --record=true
6         kubectl set image deployment/nginx nginx=nginx:1.13 --record=true

回滚指定版本,可以看到nginx现在是1.12

[root@k8s-master ~]# kubectl rollout undo deployment/nginx --to-revision=5
deployment "nginx" 
[root@k8s-master ~]# kubectl rollout history deployment/nginx
deployments "nginx"
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
6         kubectl set image deployment/nginx nginx=nginx:1.13 --record=true
7         kubectl set image deployment/nginx nginx=nginx:1.12 --record=true

7、删除

删完deploy还要删除service

kubectl delete deploy/nginx
kubectl delete svc/nginx-service
[root@k8s-master ~]# kubectl get all
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   ClusterIP   10.10.10.1   <none>        443/TCP   20h

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: