【Kubernetes系列二】kubectl命令常用操作

2022/4/15 23:18:00

本文主要是介绍【Kubernetes系列二】kubectl命令常用操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

kubectl命令常用操作

1.创建资源对象

命令式
资源清单
声明式配置清单

2.查看资源对象

查看名称空间

~]# kubectl get namespaces
NAME          STATUS   AGE
default       Active   10d
kube-public   Active   10d
kube-system   Active   10d

列出默认名称空间所有pod和service对象,并输出额外信息

~]# kubectl get pods,services -o wide
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   10d   <none>

列出指定名称空间拥有k8s-app标签名称的所有pod对象

~]# kubectl get pods -l k8s-app -n kube-system
NAME                       READY   STATUS    RESTARTS   AGE
coredns-6c66ffc55b-ndrfc   1/1     Running   0          10d
coredns-6c66ffc55b-t74vv   1/1     Running   0          10d
kube-proxy-hs66q           1/1     Running   0          9d
kube-proxy-kgl4v           1/1     Running   0          10d
kube-proxy-lmgph           1/1     Running   0          9d
kube-proxy-mf2qk           1/1     Running   0          10d

3.查看资源对象的详细信息

每个资源对象都包含用户期望的状态(spec)和现有状态信息,可由kubectl get -o {yaml|json} 或者 kubectl describe 命令打印指定资源对象的详细描述信息

查看指定名称空间中拥有标签component=kube-apiserver的pod对象的资源配置清单及当前的状态信息,并输出为yaml格式

~]# kubectl get pods -l component=kube-apiserver -o yaml -n kube-system
~]# kubectl describe pods -l component=kube-apiserver -n kube-system

4.查看容器的日志信息

~]# kubectl logs kube-apiserver-master.ilinux.io -n kube-system
实时监控容器日志信息(类似tail -f)
~]# kubectl logs -f kube-apiserver-master.ilinux.io -n kube-system

5.在容器中执行命令

~]# kubectl exec kube-apiserver-master.ilinux.io -n kube-system -- ps
若pod存在多个容器,需要-c指定容器

6.删除资源对象

删除默认名称空间的service资源对象

~]# kubectl delete service nginx-svc

删除拥有标签app=monitor的pod对象

~]# kubectl delete pods -l app=monitor -n kube-system

删除kube-public名称空间中的所有pod对象

~]# kubectl delete pods --all -n kube-public

命令式容器应用编排

下面使用示例镜像'ikubernetes/nginx-app:v1'来掩饰容器应用编排的基础操作,应用的部署、访问、查看、服务暴漏和扩缩容等

1.部署应用(pod)

~]# kubectl run --image=nginx:alpine nginx-app --port=80

可以看到部署pod生成的deployment状态

~]# kubectl get deployment
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-app   1         1         1            1           17h
1) NAME:资源对象名称
2) DESIRED: 用户期望当前控制器管理的pod对象副本的精确数量
3) CURRENT: 当前控制器已有的pod对象副本数量
4) UP-TO-DATE: 更新到最新版本定义的pod对象副本数量,在控制器滚动更新下,他表示已经完成版本更新的pod对象的副本数量
5) AVAILABLE: 当前处于可用状态的pod对象副本数量
6) AGE: pod存在时长

提示:deployment资源对象通过ReplicaSet控制器实例完成对pod对象的控制,默认自动附加一个标签,如'run=nginx-app'

查看deployment控制器创建pod对象信息

~]# kubectl get pods -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP           NODE               NOMINATED NODE
nginx-app-787756bcb-2962q   1/1     Running   0          17h   10.244.2.4   node02.ilinux.io   <none>

此时,可以在集群任一节点使用curl命令对创建的nginx-app pod对象的80端口进行访问
~]# curl http://10.244.2.4:80/

2.探查pod及应用详情

  1. kubectl describe:显示资源的详情,包括运行状态,事件等
  2. kubectl logs:查看pod对象中容器输出在控制台的日志信息,在pod中有多个容器时,使用-c指定容器名称
  3. kubectl exec:在pod对象某容器内运行指定程序

例子:

~]# kubectl logs nginx-app-787756bcb-2962q
~]# kubectl exec nginx-app-787756bcb-2962q ps aux
~]# kubectl -it exec nginx-app-787756bcb-2962q /bin/sh

3.部署service对象

一个service对象可视作通过其标签选择器过滤出一组pod对象,并能够为此组pod对象监听的套接字提供端口代理及调度服务

创建service对象
kubectl expose 命令可用于创建service对象已将应用程序暴漏于网络中

~]# kubectl expose deployment/nginx-app --type="NodePort" --port=80 --name=nginx-app

查看创建的service对象

~]# kubectl get service
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        11d
nginx-app    NodePort    10.105.8.163   <none>        80:32121/TCP   6s
PORT字段表明,集群各工作节点都会铺货发往本地目标端口32121的流量,并将其代理至当前service对象的80端口
集群外部可以直接访问任一节点的的此端口来访问service对象上的服务

4.扩容和缩容

使用kubectl run命令创建deployment对象时,'--replicase='选项能够制定该对象的pod副本数量
kubectl scale命令专用于变动控制器应用规模的命令,支持对deployment资源对象的扩容和缩容操作

~]# kubectl scale deployments/nginx-app --replicas=3
~]# kubectl get pods -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP           NODE               NOMINATED NODE
nginx-app-787756bcb-2962q   1/1     Running   0          18h   10.244.2.4   node02.ilinux.io   <none>
nginx-app-787756bcb-66fp5   1/1     Running   0          78s   10.244.3.4   node03.ilinux.io   <none>
nginx-app-787756bcb-f67wb   1/1     Running   0          78s   10.244.1.5   node01.ilinux.io   <none>
~]# kubectl get deployment
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-app   3         3         3            3           18h

之前创建的service根据标签选择器,自动扩展到3个pod对象
~]# kubectl describe services nginx-app
Name:                     nginx-app
Namespace:                default
Labels:                   run=nginx-app
Annotations:              <none>
Selector:                 run=nginx-app
Type:                     NodePort
IP:                       10.105.8.163
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  32121/TCP
Endpoints:                10.244.1.5:80,10.244.2.4:80,10.244.3.4:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

5.修改及删除对象

~]# kubectl delete service myappd
删除默认名称空间的所有deployment对象
~]# kubectl delete deployment --all


这篇关于【Kubernetes系列二】kubectl命令常用操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程