k8s基础命令及Linux上用Kubectl(k8s)部署Nginx

news2024/12/30 2:08:50

k8s基础命令及Linux上用Kubectl(k8s)部署Nginx

不懂K8s搭建的可以看我这篇文章 Linux上部署Kubectl(k8s)

1.k8s简介

1.1 Kubernetes 概念

在 k8s 上进行部署前,首先需要了解一个基本概念 Deployment

Deployment 译名为 部署。在k8s中,通过发布 Deployment,可以创建应用程序 (docker image) 的实例 (docker container),这个实例会被包含在称为 Pod 的概念中,Pod 是 k8s 中最小可管理单元。

在 k8s 集群中发布 Deployment 后,Deployment 将指示 k8s 如何创建和更新应用程序的实例,master 节点将应用程序实例调度到集群中的具体的节点上。

创建应用程序实例后,Kubernetes Deployment Controller 会持续监控这些实例。如果运行实例的 worker 节点关机或被删除,则 Kubernetes Deployment Controller 将在群集中资源最优的另一个 worker 节点上重新创建一个新的实例。这提供了一种自我修复机制来解决机器故障或维护问题。

在容器编排之前的时代,各种安装脚本通常用于启动应用程序,但是不能够使应用程序从机器故障中恢复。通过创建应用程序实例并确保它们在集群节点中的运行实例个数,Kubernetes Deployment 提供了一种完全不同的方式来管理应用程序

1.1.1 Node

Kubernetes集群是指Kubernetes协调一个高可用计算机集群,每个计算机作为独立单元互相连接工作。

一个Kubernetes集群包含两种类型的资源:

  • Master:负责管理整个集群。协调集群中的所有活动,例如调度应用、维护应用的所需状态、应用扩容以及推出新的更新。
  • Node:用于托管正在运行的应用。可以是一个虚拟机或者物理机,它在Kubernetes集群中充当工作机器的角色,每个Node都有Kubelet,它管理Node而且是Node与Master通信的代理,Node还具有用于处理容器操作的工具,例如Docker或rkt。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kgDzDtSc-1668999762282)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114105111396.png)

1.1.2 Deployment

Deployment负责创建和更新应用程序的实例。创建Deployment后,Kubernetes Master 将应用程序实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除,Deployment控制器会将该实例替换为群集中另一个节点上的实例。这提供了一种自我修复机制来解决机器故障维护问题。

可以使用Kubernetes命令行界面Kubectl创建和管理Deployment。Kubectl使用Kubernetes API与集群进行交互。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLWqfSSf-1668999762291)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114105148782.png)

1.1.3 Pod

Pod相当于逻辑主机的概念,负责托管应用实例。包括一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源(共享存储、网络、运行信息等)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cUziwVUX-1668999762291)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114105220641.png)

1.1.4 Service

Service是一个抽象层,它定义了一组Pod的逻辑集,并为这些Pod支持外部流量暴露、负载平衡和服务发现。

尽管每个Pod 都有一个唯一的IP地址,但是如果没有Service,这些IP不会暴露在群集外部。Service允许您的应用程序接收流量。Service也可以用在ServiceSpec标记type的方式暴露,type类型如下:

  • ClusterIP(默认):在集群的内部IP上公开Service。这种类型使得Service只能从集群内访问。
  • NodePort:使用NAT在集群中每个选定Node的相同端口上公开Service。使用<NodeIP>:<NodePort>从集群外部访问Service。是ClusterIP的超集。
  • LoadBalancer:在当前云中创建一个外部负载均衡器(如果支持的话),并为Service分配一个固定的外部IP。是NodePort的超集。
  • ExternalName:通过返回带有该名称的CNAME记录,使用任意名称(由spec中的externalName指定)公开Service。不使用代理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uRoQo32O-1668999762292)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114105254137.png)

1.2 Kubernetes 功能

  • 服务发现和负载均衡

    Kubernetes 可以通过 DNS 名称或 IP 地址暴露容器的访问方式。并且可以在同组容器内分发负载以实现负载均衡

  • 存储编排

    Kubernetes可以自动挂载指定的存储系统,例如 local stroage/nfs/云存储等

  • 自动发布和回滚

    您可以在 Kubernetes 中声明您期望应用程序容器应该达到的状态,Kubernetes将以合适的速率调整容器的实际状态,并逐步达到最终期望的结果。请参考 声明式的配置

  • 自愈

    Kubernetes提供如下自愈能力:

    • 重启已经停机的容器
    • 替换、kill 那些不满足自定义健康检查条件的容器
    • 在容器就绪之前,避免调用者发现该容器
  • 密钥及配置管理

    Kubernetes可以存储和管理敏感信息(例如,密码、OAuth token、ssh密钥等)。您可以更新容器应用程序的密钥、配置等信息,而无需:

    • 重新构建容器的镜像
    • 在不合适的地方暴露密码信息

2.使用kubectl部署 nginx Deployment

1.创建文件 nginx-deployment.yaml,内容如下:

apiVersion: apps/v1	#与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment	#该配置的类型,我们使用的是 Deployment
metadata:	        #译名为元数据,即 Deployment 的一些基本属性和信息
  name: nginx-deployment	#Deployment 的名称
  labels:	    #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
    app: nginx	#为该Deployment设置key为app,value为nginx的标签
spec:	        #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
  replicas: 1	#使用该Deployment创建一个应用程序实例
  selector:	    #标签选择器,与上面的标签共同作用,目前不需要理解
    matchLabels: #选择包含标签app:nginx的资源
      app: nginx
  template:	    #这是选择或创建的Pod的模板
    metadata:	#Pod的元数据
      labels:	#Pod的标签,上面的selector即选择包含标签app:nginx的Pod
        app: nginx
    spec:	    #期望Pod实现的功能(即在pod中部署)
      containers:	#生成container,与docker中的container是同一种
      - name: nginx	#container的名称
        image: nginx:1.7.9	#使用镜像nginx:1.7.9创建contain

2.应用 YAML 文件

kubectl apply -f nginx-deployment.yaml

3.查看部署结果

# 查看 Deployment
kubectl get deployments

# 查看 Pod
kubectl get pods

可分别查看到一个名为 nginx-deployment 的 Deployment 和一个名为 nginx-deployment-xxxxxxx 的 Pod

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X7DrYEf1-1668999762293)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114144115090.png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dxPZzzTF-1668999762293)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114162044379.png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvtoYT6l-1668999762293)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114144128257.png

3.发布应用程序 Kubernetes Service(服务)

3.1概述

事实上,Pod(容器组)有自己的 生命周期 (opens new window)。当 worker node(节点)故障时,节点上运行的 Pod(容器组)也会消失。然后,Deployment (opens new window)可以通过创建新的 Pod(容器组)来动态地将群集调整回原来的状态,以使应用程序保持运行。

举个例子,假设有一个图像处理后端程序,具有 3 个运行时副本。这 3 个副本是可以替换的(无状态应用),即使 Pod(容器组)消失并被重新创建,或者副本数由 3 增加到 5,前端系统也无需关注后端副本的变化。由于 Kubernetes 集群中每个 Pod(容器组)都有一个唯一的 IP 地址(即使是同一个 Node 上的不同 Pod),我们需要一种机制,为前端系统屏蔽后端系统的 Pod(容器组)在销毁、创建过程中所带来的 IP 地址的变化。

Kubernetes 中的 Service(服务) 提供了这样的一个抽象层,它选择具备某些特征的 Pod(容器组)并为它们定义一个访问方式。Service(服务)使 Pod(容器组)之间的相互依赖解耦(原本从一个 Pod 中访问另外一个 Pod,需要知道对方的 IP 地址)。一个 Service(服务)选定哪些 Pod(容器组) 通常由 LabelSelector(标签选择器) 来决定。

在创建Service的时候,通过设置配置文件中的 spec.type 字段的值,可以以不同方式向外部暴露应用程序:

  • ClusterIP(默认)

    在群集中的内部IP上公布服务,这种方式的 Service(服务)只在集群内部可以访问到

  • NodePort

    使用 NAT 在集群中每个的同一端口上公布服务。这种方式下,可以通过访问集群中任意节点+端口号的方式访问服务 <NodeIP>:<NodePort>。此时 ClusterIP 的访问方式仍然可用。

  • LoadBalancer

    在云环境中(需要云供应商可以支持)创建一个集群外部的负载均衡器,并为使用该负载均衡器的 IP 地址作为服务的访问地址。此时 ClusterIP 和 NodePort 的访问方式仍然可用。

Service是一个抽象层,它通过 LabelSelector 选择了一组 Pod(容器组),把这些 Pod 的指定端口公布到到集群外部,并支持负载均衡和服务发现。

  • 公布 Pod 的端口以使其可访问
  • 在多个 Pod 间实现负载均衡
  • 使用 Label 和 LabelSelector

3.2 服务和标签

下图中有两个服务Service A(黄色虚线)和Service B(蓝色虚线) Service A 将请求转发到 IP 为 10.10.10.1 的Pod上, Service B 将请求转发到 IP 为 10.10.10.2、10.10.10.3、10.10.10.4 的Pod上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DIZ6cqi5-1668999762294)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114145031017.png)

Service 将外部请求路由到一组 Pod 中,它提供了一个抽象层,使得 Kubernetes 可以在不影响服务调用者的情况下,动态调度容器组(在容器组失效后重新创建容器组,增加或者减少同一个 Deployment 对应容器组的数量等)。

Service使用 Labels、LabelSelector(标签和选择器) (opens new window)匹配一组 Pod。Labels(标签)是附加到 Kubernetes 对象的键/值对,其用途有多种:

  • 将 Kubernetes 对象(Node、Deployment、Pod、Service等)指派用于开发环境、测试环境或生产环境
  • 嵌入版本标签,使用标签区别不同应用软件版本
  • 使用标签对 Kubernetes 对象进行分类

下图体现了 Labels(标签)和 LabelSelector(标签选择器)之间的关联关系

  • Deployment B 含有 LabelSelector 为 app=B 通过此方式声明含有 app=B 标签的 Pod 与之关联
  • 通过 Deployment B 创建的 Pod 包含标签为 app=B
  • Service B 通过标签选择器 app=B 选择可以路由的 Pod

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7a3GzaHY-1668999762295)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114145342845.png)

Labels(标签)可以在创建 Kubernetes 对象时附加上去,也可以在创建之后再附加上去。任何时候都可以修改一个 Kubernetes 对象的 Labels(标签)

3.3 使用Kubectl创建

创建文件 nginx-service.yaml

vim nginx-service.yaml

文件内容如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service	#Service 的名称
  labels:     	#Service 自己的标签
    app: nginx	#为该 Service 设置 key 为 app,value 为 nginx 的标签
spec:	    #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问
  selector:	    #标签选择器
    app: nginx	#选择包含标签 app:nginx 的 Pod
  ports:
  - name: nginx-port	#端口的名字
    protocol: TCP	    #协议类型 TCP/UDP
    port: 80	        #集群内的其他容器组可通过 80 端口访问 Service
    nodePort: 32600   #通过任意节点的 32600 端口访问 Service
    targetPort: 80	#将请求转发到匹配 Pod 的 80 端口
  type: NodePort	#Serive的类型,ClusterIP/NodePort/LoaderBalancer

执行命令

kubectl apply -f nginx-service.yaml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EPN27xyq-1668999762295)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114145602383.png)

检查执行结果

kubectl get services -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FFjWi4W5-1668999762296)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114145621960.png)

访问服务

curl <任意节点的 IP>:32600

http://192.168.1.28:32600/

http://192.168.1.119:32600/

http://192.168.1.183:32600/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xs15Zicv-1668999762296)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114145719572.png)

ps:如果您的集群在云上,您可能通过云服务商的安全组开放 32600 端口的访问

4.Kubernetes Pods/Nodes

在 部署第一个应用程序 中创建 Deployment 后,k8s创建了一个 Pod(容器组) 来放置应用程序实例(container 容器)。

4.1 Pods概述(相当于一个或多个容器)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EAkAZIA5-1668999762297)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114150059285.png)

Pod 容器组 是一个k8s中一个抽象的概念,用于存放一组 container(可包含一个或多个 container 容器,即图上正方体),以及这些 container (容器)的一些共享资源。这些资源包括:

  • 共享存储,称为卷(Volumes),即图上紫色圆柱
  • 网络,每个 Pod(容器组)在集群中有个唯一的 IP,pod(容器组)中的 container(容器)共享该IP地址
  • container(容器)的基本信息,例如容器的镜像版本,对外暴露的端口等

Pod(容器组)是 k8s 集群上的最基本的单元。当我们在 k8s 上创建 Deployment 时,会在集群上创建包含容器的 Pod (而不是直接创建容器)。每个Pod都与运行它的 worker 节点(Node)绑定,并保持在那里直到终止或被删除。如果节点(Node)发生故障,则会在群集中的其他可用节点(Node)上运行相同的 Pod(从同样的镜像创建 Container,使用同样的配置,IP 地址不同,Pod 名字不同)。

重要

  • Pod 是一组容器(可包含一个或多个应用程序容器),以及共享存储(卷 Volumes)、IP 地址和有关如何运行容器的信息。
  • 如果多个容器紧密耦合并且需要共享磁盘等资源,则他们应该被部署在同一个Pod(容器组)中。

4.2Node(节点)

下图显示一个 Node(节点)上含有4个 Pod(容器组)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UVHY9AMg-1668999762297)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114150445708.png)

Pod(容器组)总是在 Node(节点) 上运行。Node(节点)是 kubernetes 集群中的计算机,可以是虚拟机或物理机。每个 Node(节点)都由 master 管理。一个 Node(节点)可以有多个Pod(容器组),kubernetes master 会根据每个 Node(节点)上可用资源的情况,自动调度 Pod(容器组)到最佳的 Node(节点)上。

每个 Kubernetes Node(节点)至少运行:

  • Kubelet,负责 master 节点和 worker 节点之间通信的进程;管理 Pod(容器组)和 Pod(容器组)内运行的 Container(容器)。
  • 容器运行环境(如Docker)负责下载镜像、创建和运行容器等。

4.3 kubectl基础用法

4.3.1 get操作

# kubectl get 资源类型

#获取类型为Deployment的资源列表
kubectl get deployments

 # 列出当前NS中所有service资源
kubectl get services  

# 查询所有pod信息
kubectl get pods

# 更多信息
kubectl get pods -o wide


# 查看所有名称空间的 Deployment
kubectl get deployments -A
kubectl get deployments --all-namespaces

# 查看 kube-system 名称空间的 Deployment
kubectl get deployments -n kube-system


# JSON格式显示Pod的完整信息
kubectl get pod pod名字  --output json

# YAML方式显示Pod的完整信息
kubectl get pod pod名字  --output yaml

#查看 RC 和 service 列表, -o wide 查看详细信息
 kubectl get svc -o wide

#获取类型为Node的资源列表
kubectl get nodes


# JSON格式显示Pod的完整信息
kubectl get pod pod名字  --output json

# YAML方式显示Pod的完整信息
kubectl get pod pod名字  --output yaml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tfaDxXQG-1668999762298)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114151305180.png)

4.3.2 delete操作

# 暴力删除node(操作需谨慎)
kubectl delete node node_xxx

#删除deployment
kubectl delete deployment  deployment名字

#删除node
kubectl delete node  node名字

#用create创建的pod 删除
kubectl delete -f pod_xxx.yaml

#删除svc网络
 kubectl delete svc svc网络名称
 
 # 删除所有pod O(∩_∩)O
kubectl delete pod --all

4.3.3 scale(进行副本的扩容)操作

# 设置副本数量,增加到3个  xxx是指deployments名字

kubectl scale deployments/xxx --replicas=3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2IKWJ8yz-1668999762298)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114154632689.png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZEojNA6-1668999762299)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114160249367.png)

4.3.4 创建资源操作

## 使用 apply 命令通过文件创建资源
kubectl apply -f xxx.yaml 

#这个也可以 创建pod,定义号pod_xxx.yaml 不过一般用apply好

kubectl create -f pod_xxx.yaml 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8rIAwVO1-1668999762299)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221115103244946.png)

4.3.5 cp操作(文件传输)

# Usage:

kubectl cp <file-spec-src> <file-spec-dest> [options]

# Examples:  

kubectl cp /tmp/foo_dir pod名称:/tmp/bar_dir                 # 拷贝宿主机本地文件夹到pod
kubectl cp 空间名称/pod名称:/tmp/foo /tmp/bar        # 指定namespace的拷贝pod文件到宿主机本地目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z24A05R5-1668999762300)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221115111132787.png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-219Uza0x-1668999762301)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221115110913100.png)

4.3.6 describe操作

显示有关资源的详细信息

# kubectl describe 资源类型 资源名称

#查看名称为nginx-XXXXXX的Pod的信息
kubectl describe pod nginx-XXXXXX	

#查看名称为nginx的Deployment的信息
kubectl describe deployment nginx	

# 查看单个pod状态和生命周期
kubectl describe pod pod名字

#查看名称为nginx-service的
 kubectl describe svc nginx-service
  

4.3.7 replace操作

# 更新pod
kubectl replace -f pod_xxx.yaml

# 重建pod,Pod的很多属性没办法修改,比如容器镜像,这时候可以采用--force参数
kubectl replace --force -f pod_xxx.yaml

4.3.8 log操作

# Usage:

 kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options]

# Examples: 

kubectl logs my-pod                              

# 输出一个单容器pod my-pod的日志到标准输出

kubectl logs nginx-78f5d695bd-czm8z -c nginx     

# 输出多容器pod中的某个nginx容器的日志

kubectl logs -l app=nginx                        

# 输出所有包含app-nginx标签的pod日志

kubectl logs -f my-pod                           

# 加上-f参数跟踪日志,类似tail -f

kubectl logs my-pod  -p                          

# 输出该pod的上一个退出的容器实例日志。在pod容器异常退出时很有用

kubectl logs my-pod  --since-time=2018-11-01T15:00:00Z

# 指定时间戳输出日志            

kubectl logs my-pod  --since=1h 

# 指定时间段输出日志,单位s/m/h
# kubectl logs Pod名称

#查看名称为nginx-pod-XXXXXXX的Pod内的容器打印的日志
#本案例中的 nginx-pod 没有输出日志,所以您看到的结果是空的
kubectl logs -f nginx-pod-XXXXXXX
  

例如:

 kubectl logs -f nginx-deployment-7c479fcb56-d44nl

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u2i7poRf-1668999762301)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114151346689.png)

4.3.9 exec操作(进入容器组)

# Usage:

kubectl exec POD [-c CONTAINER] -- COMMAND [args...] [options]

# Examples:

kubectl exec my-pod ls                         # 对my-pod执行ls命令
kubectl exec -t -i nginx-78f5d695bd-czm8z bash # 进入pod的shell,并打开伪终端和标准输入

kubectl exec - 在pod中的容器环境内执行命令(和命令docker exec 类似)

# kubectl exec Pod名称 操作命令

# 在名称为nginx-pod-xxxxxx的Pod中运行bash
kubectl exec -it nginx-pod-xxxxxx /bin/bas

例如:kubectl exec -it nginx-deployment-7c479fcb56-d44nl /bin/bash

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ht4qdTr6-1668999762302)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221114151419217.png)

4.3.10 svc操作

查看 RC 和 service 列表, -o wide 查看详细信息

 kubectl get svc -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X9YXD7jl-1668999762303)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221115100511853.png)

删除svc网络

 kubectl delete svc nginx-service-nodeport

4.3.11 run 命令

# 示例,运行一个名称为nginx,标签为app=example,镜像为nginx:1.10 端口为80

标签的作用在于后面申请服务端口的时候可以对应

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6szXZQU8-1668999762303)(Linux%E4%B8%8A%E7%94%A8Kubectl(k8s)]%E9%83%A8%E7%BD%B2Nginx.assets/image-20221115112938138.png)

ps:这里建议还是用yaml配置文件去拉取镜像,因为可以把容器的数据映射到宿主机。

4.3.12 set 命令

# 更新镜像 
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

# 将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
$ kubectl set resources deployment nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi

# 删除nginx中容器的计算资源值
$ kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0

4.3.13 其他操作

# 暂停节点
kubectl cordon node_xxx

# 恢复节点
kubectl uncordon node_xxx

# 温和的驱除节点(操作需谨慎)
kubectl drain node_xxx

# 查看默认命名空间 pod 资源(cpu/内存)使用情况,并按照 cpu 倒序排序
kubectl top pod --sort-by cpu -n default

# 查看默认命名空间 pod 资源(cpu/内存)使用情况,并按照内存倒序排序
kubectl top pod --sort-by memory -n default

#查看过程及结果
watch kubectl get pods -l app=nginx


#创建命名空间
kubectl create namespace 空间名字

#删除命名空间 
kubectl delete ns 空间名字

#查看命名空间
kubectl get namespace


#切换到指定命名空间下,不然的话每次执行操作都要加-n namespace名字
kubectl config set-context --current --namespace=namespace名字

个人搭建项目代码地址:
https://github.com/hongjiatao/spring-boot-anyDemo

欢迎收藏点赞三连。谢谢!有问题可以留言博主会24小时内无偿回复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

积分商城小程序的作用_分享积分商城小程序开发的效果

积分商城系统带来的6点作用分别是&#xff1a;对商家的依赖性、提升转化和复购、运营模式多元化、提升收益、进行积分营销、进行口碑传播&#xff0c;下面我们就来详细的了解一下。 积分商城系统带来的作用一&#xff1a;对商家的依赖性 积分商城系统是进行积分兑换的&#xf…

渗透测试CTF-图片隐写的详细教程2(干货)

上篇文章我们介绍了这7个工具&#xff0c;这里简单的介绍一下。 Binwalk 用来检测图片中是否有隐藏的文件。 Foremost 将图片中的隐藏文件拆分出来。 010Editor ①修改图片的参数来查看隐藏信息。 ②查看压缩包是否是伪加密。 Stegsolve.jar 图片隐写查看神器。 OurSecret 1个图…

公众号免费查题功能搭建

公众号免费查题功能搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xf…

Word处理控件Aspose.Words功能演示:在 Java 中将文本转换为 PNG、JPEG 或 GIF 图像

在各种情况下&#xff0c;通常需要进行文本到图像的转换&#xff0c;例如&#xff0c;使文本成为只读。在上一篇文章中&#xff0c;我们写过如何将TXT文件中的文本转换为 Java 中的 PDF。在本文中&#xff0c;您将学习如何在 Java 中以编程方式将文本转换为PNG、JPEG或GIF图像。…

B. Catching Cheaters(最长公共子序列变形)

Problem - 1446B - Codeforces 给你两个字符串A和B&#xff0c;代表两个涉嫌作弊的学生的论文。对于任何两个字符串C&#xff0c;D&#xff0c;我们将其相似性分数S(C,D)定义为4⋅LCS(C,D)-|C|-|D|&#xff0c;其中LCS(C,D)表示字符串C和D的最长公共子序列。 你认为只有部分文…

三次握手与四次挥的问题,怎么回答?

在面试中&#xff0c;三次握手和四次挥手可以说是问的最频繁的一个知识点了&#xff0c;我相信大家也都看过很多关于三次握手与四次挥手的文章&#xff0c;今天的这篇文章&#xff0c;重点是围绕着面试&#xff0c;我们应该掌握哪些比较重要的点&#xff0c;哪些是比较被面试官…

大一学生网页课程作业 南京介绍网页设计 学生家乡网页设计作品静态 HTML网页模板源码 html我的家乡网页作业

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

uniapp自动识别并切换到pad端、pc端【不断更新】【伸手党福利】

目录uniapp自动切换到pad、pc端&#xff08;框架方法&#xff09;1. 新建文件&#xff1a;index为主页面&#xff08;代理页面&#xff09;detail为主页面的引用页面&#xff08;业务页面&#xff09;leftwindow为左边栏【名字随便起】topwindow为顶部栏【名字随便起】2. pages…

【LeetCode】808.分汤

题目描述 有 A 和 B 两种类型 的汤。一开始每种类型的汤有 n 毫升。有四种分配操作&#xff1a; 提供 100ml 的 汤A 和 0ml 的 汤B 。 提供 75ml 的 汤A 和 25ml 的 汤B 。 提供 50ml 的 汤A 和 50ml 的 汤B 。 提供 25ml 的 汤A 和 75ml 的 汤B 。 当我们把汤分配给某人之后&a…

【selenium】多 frame 切换定位元素

frame 简介 frame 是 html 中的框架导航。同一个框架集中&#xff0c;点击某一框架的超链接&#xff0c;内容会在另一个框架的窗口中展示。 比如后台管理页面&#xff0c;点击左侧导航栏按钮&#xff0c;在右侧区域展示加载的内容&#xff0c;而不是打开一个新的窗口。 fram…

【node进阶】在node.js中优雅的使用Socket.IO模块

✅ 作者简介&#xff1a;一名普通本科大三的学生&#xff0c;致力于提高前端开发能力 ✨ 个人主页&#xff1a;前端小白在前进的主页 &#x1f525; 系列专栏 &#xff1a; node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 &#x1f340; 学习格言: ☀️ 打不倒你的会使你更强&a…

Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd

近日&#xff0c;Serverless 开发者平台 Serverless Devs 重磅发布基于 Serverless 架构的轻量级 CI/CD 框架——Serverless-cd。Serverless-cd 是一款运行在 Serverless 架构上的功能强大而灵活&#xff0c;安全&#xff0c;低成本的CI/CD开源框架。该框架基于 Serverless Dev…

ML XGBoost详细原理及公式推导讲解+面试必考知识点

&#x1f604; 搞竞赛天天无脑XGBoost、LightGBM、CatBoost&#xff0c;但不知道原理也少许有点尴尬了~&#xff0c;所以打算深入学习下这三大竞赛杀器的原理&#xff0c;整理下面试中一些高频问题。之前有决策树&#xff0c;GBDT的基础了&#xff0c;再学学这三个和随机森林&a…

unix网络编程(四)epoll反应堆

epoll反应堆原理代码demo原理 【epoll模型原来的流程】&#xff1a; epoll_create(); // 创建监听红黑树 epoll_ctl(); // 向书上添加监听fd epoll_wait(); // 监听 有监听fd事件发送—>返回监听满足数组—>判断返回数组元素—> lfd满足accept—>返回cfd---->r…

【仿牛客网笔记】项目进阶,构建安全高效的企业服务——任务执行和调度

http://www.quartz-scheduler.org 集群服务器有两类程序一类普通请求&#xff0c;另一类定时任务。 浏览器通过负载均衡工具Nginx, Nginx同一时刻有一个去处理。 Quartz存入到数据库中&#xff0c;多个Quartz同时访问 线程池测试类 实例化logger,通过logger输出&#xff0c;自…

Java学习之封装

**学习重点&#xff1a;**面向对象编程的三大特征&#xff1a;封装、继承、多态度 封装介绍 封装&#xff1a;encapsulation就是把属性和方法封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作&#xff08;方法&#xff09;&#xff0c…

【Linux】四、Linux 进程概念(二)|普遍操作系统的进程状态(运行、阻塞、挂起)|Linux的具体进程状态|僵尸进程|孤儿进程

目录 五、进程状态 5.1 普遍操作系统层面的进程状态&#xff08;宏观&#xff09; 5.1.1 什么叫做运行状态 5.1.2 阻塞状态 5.1.2 挂起状态 5.2 Linux 的进程状态&#xff08;具体&#xff09; 5.2.1 Linux 内核进程状态源代码 5.2.2 Linux 进程状态查看 5.2.3 Linux …

2023年软考高级系统规划与与管理师备考策略

2023年上半年软考高级系统规划与管理师打算怎么备考呢&#xff1f; 系统规划与管理师是高级科目的其中一科&#xff0c;难度系数是有的&#xff0c;系统规划与管理师相较于其他高级考试又相对难度可控。只要你肯下功夫&#xff0c;还是可以拿下的&#xff01;系统规划与管理师…

ASP.NET Core教程-Routing(路由)

更新记录 转载请注明出处&#xff1a; 2022年11月21日 发布。 2022年11月20日 从笔记迁移到博客。 Route Basic(路由基础) 路由说明 请求URL映射到控制器方法的过程&#xff0c;这个映射过程由路由规则定义。 路由功能 跟据预先配置的路由信息对客户端传来的请求进行路由映射&a…

Hbase Coprocessor 协处理器 与 JavaAPI

协处理器概念 一、协处理器有两种&#xff1a; observer 和 endpoint 1、observer协处理器 Observer 类似于传统数据库中的触发器&#xff0c;当发生某些事件的时候这类协处理器会被 Server 端调用。Observer Coprocessor 就是一些散布在 HBase Server 端代码中的 hook 钩子…