首页 > 其他 > 详细

k8s自学之——kubectl常用命令

时间:2021-06-05 18:17:20      阅读:229      评论:0      收藏:0      [点我收藏+]

技术分享图片


kubenetes常用命令:


查看apiversion 可用版本

$ kubectl api-versions

显示全部的命令帮助提示

$ kubectl --help

查看kubectl具体的子命令帮助,例如

$ kubectl create --help


命名空间命令

创建命名空间

$ kubectl create ns dev

查看集群中有哪些命名空间

$ kubectl get ns

删除命名空间

$ kubectl delete ns test

查看所有pod所属的命名空间

$ kubectl get pod --all-namespaces


关于node的操作命令

查询所有的node节点

$ kubectl get nodes

查看节点my-node的详细信息

$ kubectl describe node my-node

查看master和集群服务的地址

$ kubectl cluster-info

查看集群详细日志

$ kubectl cluster-info dump

显示node节点的标签信息

$ kubectl get node --show-labels


关于pod 操作命令

列出集群所有命名空间中所有的Pod

$ kubectl get pods --all-namespaces

-watch 参数可以监控资源的状态,在状态变换时输出。在跟踪服务部署情况时很有用

$ kubectl get deployment my-dep --watch

查看所有的资源信息

$ kubectl get all

查看yaml格式的资源配置,这里包括资实际的status,可以用--export排除

$ kubectl get pod my-pod -o yaml

列出pod的yaml资源清单

$ kubectl get service nginx -o yaml

修改pod的资源清单,例如修改端口号,类似vim编辑

$ kubectl edit service nginx

查看所有带有标签app: nginx的pod

$ kubectl get pod my-pod -l app=nginx

查看pod my-pod的详细信息

$ kubectl describe pod my-pod

查看my-deployment的详细信息

$ kubectl descibe deploy my-deployment

指定某个node不可用

$ kubectl cordon node-name

指定某个node可以使用

$ kuebctl uncordon node-name

设置某个node进入维护模式,这上面的pod将被驱逐到其他node上

$ kubectl drain node-name

手动横向扩展pod副本数

$ kubectl scale deployment my-deployment --replicas 5

设定自动横向扩展pod副本数 autoscale

$ kubectl autoscale deployment foo --min=2 --max=10
$ kubectl autoscale rc foo --max=5 --cpu-percent=80

查看pod日志

$ kubectl logs my-pod

加上-f参数跟踪日志,类似tail -f 也可以用attach

$ kubectl logs -f my-pod (常用这种)
$ kubectl attach my-pod

查看pod列表

$ kubectl get pod

显示pod节点的标签信息

$ kubectl get pod --show-labels

根据指定标签匹配到具体的pod

$ kubectl get pods -l app=example

查看所有pod所属的命名空间并且查看都在哪些节点上运行

$ kubectl get pod --all-namespaces -o wide

-o wide也比较常用,查看pod详细信息,也就是可以查看pod具体运行在哪个节点上(ip地址信息)

$ kubectl get pod -o wide

查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息

$ kubectl get svc

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

$ kubectl get rs

进入pod

$ kubectl exec -it pod-name /bin/bash

不进入pod 执行命令

$ kubectl exec -it pod-name cat /etc/my.cnf

查看目前所有的deployment

$ kubectl get deployment


kubeubectl run 命令:

示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例

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

查看一个pod 的yaml 文件

$ kubectl get pod myappj -o yaml

快速创建一个pod的yaml文件

$ kubectl create deployment nginx --image=nginx -o yaml --dry-run > my-deployment.yaml

解释:
"-o yaml" ——指定我们的yaml文件
"--dry-run" ——不在k8s中执行
">"——重定向到你指定的文件中

列出已有pod 的yaml文件

$ kubectl get deploy nginx -o yaml --export > my-deploy2.yaml

解释:
"-o yaml"——指定yaml文件
"--export"——输出
">"——重定向到你指定的文件中

也可以用这样 创建,指定更多的配置信息

?

$ kubectl run http --image=mysql:5.7 --replicas=10 --dry-run -ncka -o yaml

$ kubectl run nginx-1 --image=nginx --port=80 --replicas=3 --dry-run -o yaml> test.yaml

$ kubectl create deployment http --image=http --dry-run -o yaml > web.yaml


命令实现 pod 手动/自动水平扩容缩容

将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3

$ kubectl scale --replicas=3 -f foo.yaml

如果当前副本数为2,则将其扩展至3。

$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

设置多个RC中Pod副本数量

$ kubectl scale --replicas=5 rc/foo rc/bar rc/baz
?

使用 Deployment “foo”设定,使用默认的自动伸缩策略,指定目标CPU使用率,使其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

给名为foo的Pod添加label unhealthy=true

$ kubectl label pods foo unhealthy=true

给名为foo的Pod修改label 为 ‘status‘ / value ‘unhealthy‘,且覆盖现有的value

$ kubectl label --overwrite pods foo status=unhealthy


从pod中拷贝文件到宿主机/tmp下

$ kubectl cp pod-name:/etc/hosts /tmp
#可能会报错:command terminated with exit code 126 ,因为pod 缺少tar命令,需要进入pod安装
pod中有可能无法yum ,需要配置yum源
$ cat > /etc/yum.repos.d/CentOS-Base.repo << EOF
[base]
name=centos7
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck=0
EOF

$ yum install -y tar

退出pod,在执行拷贝

如果是拷贝宿主机文件到pod中

$ kubectl cp /etc/hosts/ pod-name:/etc/hosts/


pod的几种状态:

1)Pending:Pod创建已经提交给k8s,但是因为某种原因不能顺利创建,例如下载镜像慢,调度不成功等。

2)Running:Pod已经绑定到一个节点上了,并且已经创建了所有容器。只是有一个容器正在运行,或者在启动中。

3)Secceeded:Pod中的所有容器都已经成功终止,不能重新启动。

4)Failed: Pod中所有的容器均已经终止,且至少有一个容器已经在故障中终止。

5)Unkown:由于某中原因apiserver无法获取到Pod的状态。通常是由于Master与pod所在的主机失去连接了。

6)CrashLoopBackOff :容器消亡了

7)ImagePullBackOff : 镜像下载失败,或者镜像不存在

8)terminating :正在删除中


查看apiversion 可用版本

$ kubectl api-versions

Kind apiVersion
CertificateSigningRequest certificates.k8s.io/v1beta1
ClusterRoleBinding rbac.authorization.k8s.io/v1
ClusterRole rbac.authorization.k8s.io/v1
ComponentStatus v1
ConfigMap v1
ControllerRevision apps/v1
CronJob batch/v1beta1
DaemonSet extensions/v1beta1
Deployment extensions/v1beta1
Endpoints v1
Event v1
HorizontalPodAutoscaler autoscaling/v1
Ingress extensions/v1beta1
Job batch/v1
LimitRange v1
Namespace v1
NetworkPolicy extensions/v1beta1
Node v1
PersistentVolumeClaim v1
PersistentVolume v1
PodDisruptionBudget policy/v1beta1
Pod v1
PodSecurityPolicy extensions/v1beta1
PodTemplate v1
ReplicaSet extensions/v1beta1
ReplicationController v1
ResourceQuota v1
RoleBinding rbac.authorization.k8s.io/v1
Role rbac.authorization.k8s.io/v1
Secret v1
ServiceAccount v1
Service v1
StatefulSet apps/v1


控制器类型:

ReplicaSet 控制器

  ReplicaSet用于确保其管控的Pod对象副本数满足期望的数值,它能实现以下功能:

         确保Pod的资源数量精确反应期望值

         确保Pod健康运行

         弹性伸缩

  查看Pod资源变动的相关事件:

         kubectl descibe replicasets/re-example

Deployment 控制器

基于ReplicaSet之上,可为Pod和ReplicaSet资源提供声明式更新,它具有以下特性:

  事件和状态查看:可以查看Deployment对象升级的详细进度和状态

  回滚:升级操作完成后发现问题时,支持将应用返回到指定的历史版本中

  版本记录:对Deployment  对象的每一次操作都予以保存

  暂停和启动:每一次升级,都可以随时暂停和启动

  多种自动更新方案:Recreate重建更新、RollingUpdate滚动更新

Pod对象的命名以应用名-ReplicaSet控制器-随机五位字符的方式

DaemonSet控制器

   DaemonSet  是Pod控制器的有一种实现,用于在集群中的全部节点上同时运行一份指定的Pod资源副本,后续新加入集群的工作节点也会自动创建一个相关的Pod对象,当集群移除节点时,此类Pod对象也会被自动回收

   DaemonSet  通常运行那些执行系统级操作任务的应用,具体应用场景如下:

         运行集群存储的守护进程,如各个节点上运行ceph、glusterd

         各个节点上运行日志收集守护进程,如logstash、fluentd

         各个节点上运行监控系统的代理守护进程,如Prometheus Node Exporter、Datadog agent

  只有必须将Pod对象运行于固定的几个节点并且需要先于其他Pod启动时,才有必要使用DaemonSet  控制器,否则就应该使用Deployment控制器

Job控制器

  Job控制器用于配置Pod对象运行一次性任务,容器中的进程在正常运行借宿后不会进行重启,而是将Pod对象置于“Completed”状态  

CronJob控制器

  周期性任务作业计划,控制其运行的时间点及重复运行的方式

k8s自学之——kubectl常用命令

原文:https://blog.51cto.com/chengdumeiyouni/2869923

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!