K8s操作命令

这篇具有很好参考价值的文章主要介绍了K8s操作命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

K8s操作命令,kubernetes,容器,云原生

生命周期管理

1. 创建

1. 创建资源

  • kubectl run

    • 创建并运行一个或多个容器镜像。
    • *创建一个deployment或job来管理容器*

语法:kubectl run NAME --image=image [–env=“key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [–command] – [COMMAND] [args…]

kubectl run nginx --replicas=3 --labels="app-nginx-example" --image=nginx:1.10 --port=80
  • kubectl create
kubectl create deployment nginx --image=nginx
# 根据yaml配置文件创建资源对象
kubectl create -f zookeeper.yaml
# 根据yaml配置文件一次创建Service和RC
kubectl create -f my-service.yaml -f my-rc.yaml
# 创建名称空间
kubectl create namespace bigdata
  • kubectl apply
kubectl apply deployment nginx --image=nginx
# 使用yaml文件创建资源
kubectl apply -f zookeeper.yaml

2. 标签操作

  • 查询标签
kubectl get nodes --show-labels
  • 添加****标签
# 为指定节点添加标签
kubectl label nodes nodeName labelName=value
# 为指定Pod添加标签
kubectl label pod podName -n nsName labelName=value
  • 修改****标签
# 修改节点标签值
kubectl label nodes nodeName
# 修改Pod标签值(需要overwrite参数)
kubectl label pod podName -n nsName labelName=value --overwrite
  • 删除****标签
# 为指定节点删除标签
kubectl label nodes nodeName labelName-
# 删除Pod标签
kubectl label pod podName -n nsName labelName-

2. 查看

# 查看集群状态
kubectl get cs

# 查看Pod
kubectl get pods
kubectl get pod
kubectl get po

# 查看指定名称Pod
kubectl get pod mynginx
kubectl get pod/mynginx

# 同时查看多个资源
kubectl get deploy,pods

# 查看Pod端口信息
kubectl get pod,svc

# 特定命名空间资源查看
kubectl get pods -n bigdata

# 查看所有命名空间下的pod信息
kubectl get pod --all-namespaces
kubectl get pods --A

# 获取Pod运行在哪个节点上的信息
kubectl get pod -o wide

# 显示Pod标签信息
kubectl get pods --show-labels

# 查看特定标签的Pod
kubectl get pods -l app=example

# 以JSON格式显示Pod的详细信息
kubectl get pod podName -o json

# 查看RS
kubectl get replicasets -o wide

# 查看Deployments
kubectl get deployments -o wide

# 查看ip和端口,也叫端点
kubectl get ep

# 查看事件
kubectl get ev
  • yaml方式
# 以yaml格式显示Pod的详细信息
kubectl get pod podName -o yaml
kubectl get pod -f pod.yaml
kubectl get pod -f pod1.yaml -f pod2.yaml

# 用get生成yaml文件
kubectl get deploy/nginx --export -o yaml > my-deploy2.yaml

# 查看资源子节点详情
kubectl explain pods.spec.containers

# 用run命令生成yaml文件,dry-run尝试运行,但不会生成,可用于检查语法错误
kubectl run nginx --image=nginx:latest --port=80 --replicas=3 --dry-run
# 尝试运行,并生成yaml文件
kubectl run nginx --image=nginx:latest --port=80 --replicas=3 --dry-run -o yaml > my-deploy.yaml

3. 发布

# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl expose deployment nginx --port=80 --type=NodePort --target-port=80 --name=nginx-service

# 输出为yaml文件(推荐)
kubectl expose deployment nginx --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml
kubectl expose deployment nginx -n bigdata --port=80 --type=NodePort

4. 故障排查

1. 资源详情排查

# 显示Node的详细信息
kubectl describe nodes nodeNamePrefix
# 显示Pod的详细信息
kubectl describe pods  podNamePrefix
# 显示由RC管理的Pod的信息
kubectl describe pods  rcNamePrefix

2. 资源日志排查

# 容器日志查看
kubectl logs zk-0
kubectl logs zk-0 -n bigdata
# 跟踪查看容器的日志,相当于tail -f命令的结果
kubectl logs -f <pod-name> -c <container-name>

3. 进入资源容器

# 进入容器
kubectl exec -it podName -n nsName /bin/sh    
kubectl exec -it podName -n nsName /bin/bash

5. 更新

1. 版本更新

kubectl set image deployment/nginx nginx=nginx:1.15
# 记录更新操作命令以便后续查看变更历史
kubectl set image deployment/nginx nginx=nginx:1.15 --record

2. 编辑更新

kubectl edit deployment/nginx

3. 滚动更新

kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
kubectl rolling-update frontend --image=image:v2
kubectl rolling-update frontend-v1 frontend-v2 --rollback

4. 替换更新

kubectl replace -f zookersts.yaml

5. 扩缩容

kubectl scale deployment nginx --replicas=10

6. 回滚

# 查看更新过程
kubectl rollout status deployment/nginx --namespace=nsName
# 如果更新成功, 返回值为0 
kubectl rollout status deployment nginx-deployment --watch=false | grep -ic waiting

# 查看变更历史版本信息
kubectl rollout history deployment/nginx
kubectl rollout history deployment/nginx --revision=3 --namespace=nsName

# 终止升级
kubectl rollout pause deployment/nginx --namespace=nsName

# 继续升级
kubectl rollout resume deployment/review-demo --namespace=nsName

# 回滚版本
kubectl rollout undo deployment/nginx --namespace=nsName
kubectl rollout undo deployment/nginx --to-revision=3  --namespace=nsName

7. 清理

# 删除资源
kubectl delete deploy/nginx
kubectl delete svc/nginx-service

# 删除所有Pod
kubectl delete pods --all

# 删除所有包含某个label的Pod和Service
kubectl delete pod,service -l name=labelName

# 基于yaml定义的名称删除
kubectl delete -f pod.yaml

# 删除指定命名空间
kubectl delete ns nsName

# 删除指定命名空间的资源
kubectl delete pod zk-0 -n bigdata
kubectl delete pod --all -n bigdata

# 删除计时(观察删除总耗时)
time -p kubectl delete pod podName

# 强制删除(默认:30s)
# 指定删除延迟时间:0s,整体删除时间会明显降低
kubectl delete pod podName -n nsName --grace-period=0 --force
# 以下两行命令功能相同(grace-period=1,等价于now,立即执行)
kubectl delete pod podName -n nsName --grace-period=1
kubectl delete pod podName -n nsName --now
# 删除所有Pods
kubectl delete pods --all --force --grace-period=0

常用操作命令

类型 命令 描述
基础命令 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 打印客户端和服务版本信息

1. 获取帮助

# 检查kubectl是否安装
rpm -qa | grep kubectl
# 获取kubectl及其子命令帮助方法
kubectl --help
kubectl create --help

1. Worker上执行kubectl

# Worker节点上执行
mkdir -p ~/.kube
scp master1:/root/.kube/config ~/.kube/
# 验证(查看K8s集群节点列表)
kubectl get nodes

2. api相关操作命令

# 查看api版本信息
kubectl api-versions
# 查看api资源列表
kubectl api-resources

3. K8s相关进程操作命令

netstat -lntp | grep kube-proxy
netstat -tnlp | grep kubelet

4. 节点操作命令

  • 加入新节点
# 加入新节点,在master节点上执行,将输出再到新节点上执行
kubeadm token create --print-join-command
  • 驱逐节点
# 驱逐节点的Pod
kubectl drain nodeName
  • 节点下线
# 将节点标记为不可调度,不影响现有Pod(注意daemonSet不受影响)
kubectl cordon nodeName
  • 节点上线
# 维护结束,节点重新投入使用
kubectl uncordon nodeName
  • 污点设置
# 设置污点
kubectl taint nodes nodeName key1=value1:NoSchedule
kubectl taint nodes nodeName key1=value1:NoExecute
kubectl taint nodes nodeName key2=value2:NoSchedule
# 删除污点
kubectl taint nodes nodeName key1:NoSchedule-
kubectl taint nodes nodeName key1:NoExecute-
kubectl taint nodes nodeName key2:NoSchedule-
# 查看污点详情
kubectl describe nodes nodeName

资源创建实例

Namespace

命令行方式

kubectl create namespace bigdata

yaml方式

vi ns-test.yaml

编排文件如下:

apiVersion: v1
kind: Namespace
metadata:
  name: bigdata

执行yaml文件:

kubectl apply -f ns-test.yaml

验证:

kubectl get namespaces
kubectl get namespace
kubectl get ns

清除:

kubectl delete -f ns-test.yaml
kubectl delete ns bigdata

Pod

命令行方式

未提供直接创建Pod的命令,命令行方式一般通过创建Deployment、RC、RS等资源间接创建Pod。

yaml方式

vi pod-test.yaml

编排文件如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest

执行yaml文件:

kubectl apply -f pod-test.yaml

验证:

kubectl get pods
kubectl get pod
kubectl get po
kubectl describe pod pod1
kubectl get pods -o wide
curl http://172.16.189.68

清除:

kubectl delete -f pod-test.yaml
kubectl delete pod pod1

Service

命令行方式

kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2
kubectl expose deployment.apps nginx-app --type=ClusterIP --target-port=80 --port=83

参数说明:

  • expose:创建service。

  • deployment.apps:控制器类型。

  • nginx-app:应用名称,也是service名称。

  • **–type=**ClusterIP:指定service类型。

  • target-port=80:指定Pod中容器端口。

  • port=80:指定service端口。

验证:

kubectl get service
kubectl get svc
kubectl get endpoints
kubectl get ep
curl http://10.104.173.230:83
kubectl get all

清除:

kubectl delete service nginx-app
kubectl delete svc nginx-app

yaml方式

vi nginx-service.yaml

编排文件如下:

---
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: nginx-app
  labels:
    app: nginx
spec: 
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginxapp
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-app-svc
  labels:
    name: nginx-app-svc
spec:
  type: ClusterIP
  ports: 
  - protocol: TCP
    port: 83
    targetPort: 80
  selector:
    app: nginx

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-app-svc2
  labels:
    name: nginx-app-svc2
spec:
  type: NodePort
  ports: 
  - protocol: TCP
    port: 83
    targetPort: 80
    nodePort: 30083
  selector:
    app: nginx

执行yaml文件:

kubectl apply -f nginx-service.yaml

验证:

kubectl describe deployment nginx-app
kubectl describe svc nginx-app-svc
kubectl get service
kubectl get svc
kubectl get endpoints
kubectl get ep
# nginx-app-svc
curl http://10.107.141.109:83
# nginx-app-svc2
curl http://192.168.216.100:30083
# 查看k8s集群指定端口的侦听状态
ss -anput | grep ":30083"
kubectl get all

清除:

kubectl delete -f nginx-service.yaml
kubectl delete service nginx-app-svc
kubectl delete svc nginx-app-svc

常用控制器

1. Deployment

命令行方式

kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2

参数说明:

  • nginx-app:Deployment控制器类型的应用名称。

  • –image=nginx**😗*latest:应用运行的Pod中的Container所使用的镜像。

  • IfNotPresent:Container容器镜像下载策略,如果本地有镜像,使用本地,如果本地没有镜像,下载镜像。

  • **–replicas=**2:是指应用运行的Pod共计2个副本,这是用户的期望值,Deployment控制器中的ReplicaSet控制器会一直监控此应用运行的Pod副本状态,如果数量达不到用户期望,就会重新拉起一个新的Pod,会让Pod数量一直维持在用户期望值数量。

验证:

kubectl get deployment.apps
kubectl get deployment
kubectl get deploy
kubectl get replicaset
kubectl get rs
kubectl get all

清除:

kubectl delete deployment nginx-app

yaml方式

vi nginx-deployment.yaml

编排文件如下:

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: nginx-app
  labels:
    app: nginx
spec: 
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginxapp
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

执行yaml文件:

kubectl apply -f nginx-deployment.yaml

验证:

kubectl get deployment.apps
kubectl get deployment
kubectl get deploy
kubectl get replicaset
kubectl get rs
kubectl get all
kubectl describe deployment nginx-app
kubectl get pods -o wide
curl http://172.16.189.77
curl http://172.16.235.138

清除:

kubectl delete -f nginx-deployment.yaml
kubectl delete deployment nginx-app

2. ReplicaSet

命令行方式

yaml方式

3. StatefulSet

命令行方式

yaml方式

4. DaemonSet

命令行方式

yaml方式

5. Job

命令行方式

yaml方式

6. CronJob

命令行方式

yaml方式

操作命令补充说明

1. create和apply的异同点

  • create

先删除所有现有的东西,重新根据yaml文件生成新的。所以要求yaml文件中的配置必须是完整的。

  • apply

根据配置文件里面列出来的内容,升级现有的。所以yaml文件的内容可以只写需要升级的属性。apply命令将配置应用于资源。 如果资源不在那里,那么它将被创建。

K8s操作命令,kubernetes,容器,云原生

从执行的角度来看,如上所示,在kubectl create和kubectl apply之间第一次创建资源时没有区别。 但是,第二次kubectl create会抛出错误。简单来说,如果在单个文件上运行操作以创建资源,则create和apply基本相同。 但是, apply允许您在目录下的多个文件上同时创建和修补。文章来源地址https://www.toymoban.com/news/detail-709708.html

到了这里,关于K8s操作命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

    目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd)  5.master2节点迁移容器运行时(docker → containerd)  6.node1节点容器运行时迁移(docker → containerd)  7.升级集群计划(v1.23.14 → v1.24.1) 8.升级master1节点版本(v1.24.1) 9.升级master2节点版本

    2024年02月03日
    浏览(47)
  • 云上攻防-云原生篇&;Kubernetes&;K8s安全&;API&;Kubelet未授权访问&;容器执行

    curl -XPOST -k “https://192.168.139.132:10250/run///” -d “cmd=id” 执行的命令是test03容器里的命令,需要进行容器逃逸。 1、攻击8080端口:API Server(Master)未授权访问 旧版本的k8s的API Server默认会开启两个端口:8080和6443。 6443是安全端口,安全端口使用TLS加密;但是8080端口无需认证,

    2024年04月22日
    浏览(52)
  • 云原生Kubernetes:K8S概述

    目录 一、理论 1.云原生 2.K8S 3.k8s集群架构与组件 4.K8S网络 二、总结 (1)概念 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念,云原生更

    2024年02月10日
    浏览(40)
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

    目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念? 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。谷歌早在十几

    2024年02月03日
    浏览(64)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(42)
  • 云原生_kubernetes(k8s)介绍

    目录 一、应用部署方式演变 二、k8s介绍 三、k8s的组件 四、k8s中的概念 五、k8s资源管理方式 1、命令式对象管理 2、命令式对象配置 3、声明式对象配置 在部署应用程序的方式上,主要经历了三个时代: 1 、物理机部署: 互联网早期,会直接将应用程序部署在物理机上 优点

    2023年04月13日
    浏览(38)
  • 云原生Kubernetes:K8S安全机制

    目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜像拉取失败 四、总结 (1)概念 Kubernetes 作为一个分

    2024年02月07日
    浏览(45)
  • 云原生Kubernetes:K8S存储卷

    目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验  1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享目录 3.静态创建pv 报错 4.使用 Deployment 来创建

    2024年02月07日
    浏览(45)
  • 【云原生K8S】Kubernetes之探针

    目录 一、探针是什么 二、探针类型  Ⅰ、livenessProbe 容器重启策略  Ⅱ、readinessProbe Ⅲ、startupProbe 执行顺序: 字段详情 三、探测机制 Ⅰ、HTTP GET探针 Ⅱ、TCP套接字探针 Ⅲ、Exec探针 探针:是由 kubelet 对容器执行的定期诊断 要执行诊断,则需kubelet 调用由容器实现的 Handler。

    2024年02月09日
    浏览(47)
  • 云原生Kubernetes:K8S常用服务端口

    目录 一、理论 1.K8S常用服务端口号 (1)K8S集群 表1 K8S集群端口 协议 端口号 K8S集群 TCP 22 使用主机驱动通过SSH进行节点配置 TCP 53 集群DNS服务 UDP 53 集群DNS服务 TCP 2376 主机驱动与Docker守护进程通信的TLS端口 TCP 2379 etcd客户端请求 TCP 2380 etcd节点通信 UDP 8472 Canal/Flannel VXLAN ove

    2024年02月10日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包