1、kubectl命令使用
kubectl是apiserver的客户端工具,工作在命令行下,能够连接apiserver实现各种增删改查等操作。
kubectl官方使用文档:
https://kubernetes.io/zh/docs/reference/kubectl/overview/
K8S的各种命令帮助文档做得非常不错,遇到问题可以多查help帮助。
2、创建一个tomcat应用程序
使用kubectl create deployment命令可以创建一个应用部署deployment与POD(容器组),Pod里可以有多个容器
# my-tomcat表示pod的名称 --image表示镜像地址
kubectl create deployment my-tomcat --image=tomcat:7.0.75-alpine
查看一下deployment的信息
kubectl get deployment
查看Pod打印的日志
kubectl get pod -o wide
查看Pod打印的日志
kubectl logs my-tomcat-685b8fd9c9-ltcfk(Pod名称)
使用exec可以在Pod容器中执行命令,这里使用env命令查看环境变量
kubectl exec my-tomcat-685b8fd9c9-ltcfk -- env(Pod名称)
进入Pod容器内部并执行bash命令,如果想退出容器可以使用exit命令
kubectl exec -it my-tomcat-685b8fd9c9-ltcfk -- sh
访问一下这个tomcat pod
集群内访问(在集群中任一节点都可以访问)
curl 10.244.169.129:8080 # IP地址“查看Pod打印的日志”部分,日志ip部分
集群外部访问
在外部无法访问。
当我们在集群之外访问发现是无法访问的,那么集群之外的客户端如何才能访问呢?这就需要我们的service服务了,下面我们就创建一个service,使外部客户端可以访问我们的pod
3、创建一个service
kubectl expose deployment my-tomcat --name=tomcat --port=8080 --type=NodePort
# 查看service信息,port信息里冒号后面的端口号就是集群对外暴露的访问端口
kubectl get svc -o wide
集群外部访问
使用集群**任意节点的ip(master节点、Node节点都可以)**加上暴露的端口就可以访问
service服务有个特点,如果端口暴露类型为NodePort,那么可以通过集群内任意一台主机加暴露的端口进行访问
现在我们来删除刚刚添加的pod,看看会发生什么
# 查看pod信息,-w意思是一直等待观察pod信息的变动
kubectl get pod -w
打开另外一个命令窗口执行如下命令,同时观察之前窗口的变化情况
kubectl delete pod my-tomcat-685b8fd9c9-ltcfk
我们可以看到之前那个tomcat的pod被销毁,但是又重新启动了一个新的tomcat pod,这是K8S的服务自愈能力,不需要运维人员干预。
查看deployment和service的状态
kubectl get deployment,svc
再一次访问service地址,依然可以访问成功
4、对my-tomcat这个deployment进行扩缩容
# 扩容到5个pod
kubectl scale --replicas=5 deployment my-tomcat
查看pod信息,发现已经有5个tomcat的pod
缩容
# 缩容到3个pod
kubectl scale --replicas=3 deployment my-tomcat
5、滚动升级与回滚
对my-tomcat这个deployment进行滚动升级和回滚,将tomcat版本由tomcat:7.0.75-alpine升级到tomcat:8.0.41-jre8-alpine,再回滚到tomcat:7.0.75-alpine
滚动升级
kubectl set image deployment my-tomcat tomcat=tomcat:8.0.41-jre8-alpine
可以执行kubectl get pod -w 观察pod的变动情况,可以看到有的pod在销毁,有的pod在创建
查看pod信息
kubectl get pod
查看某个pod的详细信息,发现pod里的镜像版本已经升级了
kubectl describe pod my-tomcat-547db86547-wpdm7
访问下tomcat,看到版本已经升级
版本回滚
查看历史版本
kubectl rollout history deploy my-tomcat
回滚到上一个版本
kubectl rollout undo deployment my-tomcat # --to-revision 参数可指定回退的版本
再次访问tomcat,发现版本已经回退
6、标签的使用
通过给资源添加Label,可以方便的管理资源(如Deployment、Pod、Service等)。
查看Deployment中所包含的Label
kubectl describe deployment my-tomcat
通过Label查看Pod
kubectl get pods -l app=my-tomcat
通过Label查询Service
kubectl get services ‐l app=my‐tomcat
给Pod添加Label
kubectl label pod my-tomcat-685b8fd9c9-4tlvx version=v1
查看pod的详细信息,可以查看label信息
kubectl describe pods my-tomcat-685b8fd9c9-4tlvx
通过Label查询Pod
kubectl get pods -l version=v1
通过Label删除服务
kubectl delete service -l app=test-service
小结:
kubectl create deployment # 创建一个deployment来管理创建的容器
kubectl get # 显示一个或多个资源,可以使用标签过滤,默认查看当前名称空间的资源
kubectl expose # 将一个资源暴露为一个新的K8S的service资源,资源包括pod(po),service(svc),replicationcontroller(rc),deployment(deploy),replicaset(rs)
kubectl describe # 显示特定资源或资源组的详细信息
kubectl scale # 可以对Deployment,replicaSet,Replication Controller,或者StatefulSet设置新的值,可以指定一个或多个先决条件
kubectl set # 更改现有的应用程序资源
kubectl rollout # 资源回滚管理
以上就是kubectl命令行下一些简单的操作,主要是让我们对K8S有一个快速的认识。