【云原生】使用Kubectl工具详细讲解+管理集群

发布于:2024-06-28 ⋅ 阅读:(14) ⋅ 点赞:(0)

Kubernetes资源控制管理

一、案例概述

  • kubectl是一个用于操作Kubernetes集群的命令行接口,利用kubectl的各种命令可以是实现各种功能,再使用Kubernetes过程中是非常常用的工具。

  • 在Kubernetes中,一般使用YAML格式的文件来创建符合预期期望的Pod状态,这样的YAML文件一般称之为资源清单。

二、案例前置知识点

2.1、Kubectl命令工具

  • Kubernetes通过kube-apiserver成为整个kubenetes集群管理的入口。API Server是kubernetes集群的主管理节点,用户通过API Server配置和组织集群,同样集群中各节点与Etcd存储的交互也是通过API Server来进行的。
  • API Server实现了一套TRSTfull的接口,用户可以直接使用API与API Server进行交互。另外官方还提供了一个客户端Kubectl工具集打包,可以直接通过kubectl以命令行的方式与集群进行交互。
# kubectl 命令行的语法如下所示
kubectl [command] [TYPE] [NAME] [flags]

# 参数解释
command:字命令,用于操作kubernetes集群资源对象的命令。例如:create、delete、describe、get、apply等
TYPE:资源对象的类型。区别大小写,能以单数、复数或者简写形式表示,例如:kubectl get pod pod1、kubectl get pods pod1、kubectl get po pod1三种TYPE等一样的意思,回显也将会是一样的
NAME:资源对象名称,区别大小写。如果不指定名称,系统则返回属于TYPE的全部对象列表,例如,执行kubectl get pods命令即可返回默认命名空间default中的所有Pod的列表
flags:kubectl字命令的可选参数,例如使用“-s”指定API Server的URL地址而不用默认值
  • kubectl的字命令非常丰富,涵盖了对Kubernetes集群的主要操作,包括资源对象的创建、删除、查看、修改、配置、运行等操作。详细的子命令如下图所示
基础命令
基础命令 子命令 描述
create 通过配置我呢见或标准输入(stdin)创建资源对象
* expose 将已经存在的RC、Service、Deployment或Pod暴露为一个新的Service
* run 基于镜像在Kubernetes集群上穷的那个一个Deployment
* set 子啊资源对象上设置特定的功能
get 显示一个或多个资源对象的概要信息
* explain 对象资源属性的详细说明
edit 编辑资源对象的属性,在线更新
delete 通过配置文件、标准输入、资源名称或标签选择删除资源
部署命令
部署命令 子命令 描述
rollout 管理资源的发布
rolling-update 对给定的复制控制器进行滚动更新
scale 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job
autoscale 对Deployment、ReplicaSet、RC进行水平扩容或缩容
集群管理命令
集群管理命令 子命令 描述
certificate 修改证书资源
cluster-info 显示集群信息
top 显示资源(CPU/Memory/Storage)使用。需要Heapster运行
cordon 标记节点不可调度
uncordon 标记节点可调度
drain 驱逐节点上的应用,准备下线维护
taint 修改节点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-version 打印受支持的API版本
config 修改kubeconfig文件(用于访问API,比如配置认证信息)
help 所有命令帮助
plugin 运行一个命令行插件
version 打印客户端和服务版本信息

2.2、资源清单

  • Kubernetes中所有内容都被抽象为资源,资源实例化之后称之为对象。资源分为以下几种类型。
2.2.1、名称空间级别

​ 名称空间级别是仅在此名称空间下生效。例如:kubernetes的系统组件默认放在kube-system名称空间下,而kubectl get pod等价于kubectl get pod -n default,因此查看不到kubernetes的系统组件

​ 名称空间级别的资源主要分为以下集中类型

  • 工作负载型资源(workload)

Pod:K8S最下组成部分,共享网络栈共享存储卷

ReplicaSet:RS,调度器、控制器,通过标签去控制Pod的创建、副本数量

Deployment:控制器,通过控制RS的创建去创建Pod

StatefulSet:为有状态服务所建立的管理器

DaemonSet:可以在每个节点上都运行一个Pod组件

Job:工作、任务(一次性任务)

CronJob:轮询工作、轮询任务,为批处理而生的

  • 服务发现及负载均衡型资源(ServiceDiscovery LoadBalance)

Service:服务(简称svc),将服务暴露出去;Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务

Ingress:将服务暴露出去;Ingress是反向代理规则,用来规定HTTP/S请求应该转发到哪个Service上

  • 配置与存储型资源

Volume(存储卷):给Pod提供持久化的能力

CSI:容器存储接口,可以扩展各种各样的第三方存储卷

  • 特殊类型的存储卷

ConfigMap:当配置中心来使用的资源类型,一般用来存储配置文件达到热更新的状态

Secret:保存敏感数据,加密方案存储数据,一般用来保存密码文件、密钥等等

DewnwardAPI:把外部环境中的信息输出给容器,类似于CS

注意:Kubernetes一般都是定义资源清单的方式去创建资源,资源清单等价于剧本,写好每一步应该如何去做

2.2.2、集群级别
  • 不管在任何名称空间下定义,在其他的名称下都能看到,在定义的时候无须指定名称空间。例如NameSpace(名称空间)、Node(节点)、Role(角色)、ClusterRole、RoleBinding、ClusterRoleBinding
2.2.3、元数据级别
  • 提供一个指标,不像是名称空间类型又不像集群级别,本质上更像是在两者之间,但是它有自己的特点,所以更应该作为一个单独的分类。一般根据指标进行对应的操作,例如:HPA、PodTemplate(Pod模板)、LimitRange(资源限制)

2.3、资源清单常用字段解释

2.3.1、必要存在的属性
参数名 字段类型 说明
version String Kubernetes API版本,目前基本上是v1,可以用kubectl api-versions命令查询
kind String YAML文件定义的资源类型和角色,比如:Pod、deployment、service
metadata Object 元数据对象,固定值为metadata
metadata.name String 元数据对象的名字,一般自主定义,如Pod的名字
metadata.namespace String 元数据对象的命名空间,一般自主定义,如果不定义,默认使用“default”名称空间
Spec Object 详细定义对象,固定值为Spec
2.3.2、主要对象
参数名 字段类型 说明
spec.containers[] List Spect对象的容器列表定义,是个列表
spec.containers[].name String 定义容器的名字
spec.containers[].image String 定义要用到的镜像名称
spec.containers[].imagePullPolicy String 定义镜像拉取策略,有Always、Never、IfNotPresent三个值可选,默认值为Always。
(1)Always:表示每次都尝试从远程仓库重新拉取镜像
(2)Never:表示仅使用本地镜像,没有的话则不使用
(3)IfNotPresent:如果本地有镜像就是用本地镜像,没有就从远程仓库拉取镜像
建议使用IfNotPresent
spec.containers[].command[] List 指定容器启动命令,可以指定多个。不指定则使用镜像打包时使用的启动命令
spec.containers[].args[] List 指定容器的启动命令参数,可以指定多个
spec.containers[].workingDir String 定义容器的工作目录
spec.containers[].columeMounts[] List 指定容器内部的存储卷配置
spec.containers[].wolumeMounts[].name String 指定可以被容器挂载存储卷名称
spec.containers[].volumeMounts[].mountPath String 指定可以被容器挂载的存储卷路径
spec.containers[].wolumeMounts[]readOnly String 设置存储卷路径的读写模式,true或者false
epec.containers[].ports[] List 只当容器需要用到的端口列表
spec.containers[].ports[].name String 指定端口名称
spec.containers[].ports[].containerPort String 指定容器需要监听的端口号
spec.containers[].hostPort String 指定容器所在主机需要监听的端口号,默认跟上面containerPort相同,注意设置hostPort同一台主机无法启动该容器的相同副本,因为主机的端口号不能相同,这样会冲突
spec.containers[].protocol String 指定端口协议,支持TCP和TDP,默认为TCP
spec.containers[].env[] List 指定容器运行前需设置的环境变量列表
spec.containers[].env[].name String 指定环境变量名称
spec.containers[].env[].value String 指定环境变量值
spec.containers[].resources Object 指定资源限制和资源请求的值
epec.containers[].resources.limits Object 指定设置容器运行时资源运行上限
spec.containers[].resources.limits.cpu String 指定CPU的限制,单位为core数,将用于docker run --cpu-shares参数
epec.containers[].resources.limits.memory String 指定MEM内存的限制,单位为MIB或GIB
spec.containers[].resources.requests Object 指定容器启动和调度的限制设置
spec.containers[].resources.requests.cpu String CPU请求,单位为core数,容器启动时初始化可用数量
spec.containers[].resources.requests.memory String 内存请求,单位MIB、GIB,容器启动的初始化可用数量
2.3.3、额外的参数选项
参数名 字段类型 说明
spec.restartPolicy String 定义Pod的重启策略,可选值为Always、OnFilure,默认值为Always
1、Always:默认值。Pod一旦终止运行,则无论容器是如何终止的,kubelet服务都将重启它。Pod里面运行的是容器,容器有可能会退出,容器退出,Pod就会出现一个退出的状态,kubelet是负载整个生命周期,负责重启。如果是“Always”会一直重启,重启很多次还是不行的话,默认是意外退出,就不会再重启了
2、OnFailure:只有Pod以非零退出终止容器时,kubelet才会重启该容器。如果容器正常结束(退出码为0),则kubelet将不会重启它
3、Never:Pod终止后,kubelet将退出码报告给Master不会重启该Pod
spec.nodeSelector Object 定义Node的Label过滤标签,以key:value格式指定
spec.imagePullsecrets Object 指定pull镜像时使用secret名称,以name:secrekey格式指定
spec.hostNetwork Boolean 定义是否使用主机网络模式,默认值为false。设置true表示使用宿主机网络,不使用docker网桥,同时设置了true将无法再同一台宿主机上启动第二个副本
2.3.4、YAML语言
  • YAML语言是一个可读性高,用来表达数据序列的格式。在开发的这种语言时,TAML的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而用反向缩略语重命名
2.3.4.1、基本语法
  • 缩进时不允许使用Tab键,只允许使用空格 []
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • [#] 用于表示注释,从这个字符一直到行尾,都会被解释器忽略
2.3.4.2、支持的数据结构
  • 对象:键值对的集合,又称为映射/哈希/字典
  • 数组:一组按次序排列的值,又称为序列/列表
  • 吨量:单个的、不可再分的字符串。包括布尔值、整数、浮点数、Null、时间、日期

资源列表

操作系统 配置 主机名 IP 所需软件
CentOS 7.9 2C4G k8s-master 192.168.93.101 Docker Ce、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、Etcd、kube-proxy
CentOS 7.9 2C4G k8s-node01 192.168.93.102 Docker CE、kubectl、kube-proxy、Flnnel
CentOS 7.9 2C4G k8s-node02 192.168.93.103 Docker CE、kubectl、kube-proxy、Flnnel

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
  • 修改主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02

一、使用Kubectl工具管理容器资源

  • kubectl是管理K8S集群的命令行工具,通过生成的json格式传递给API server进行创建、查看、管理的操作
# 查看kubectl命令帮助,可以更好的进行学习,其中包括基本命令、部署命令、群集管理命令、调试命令以及高级命令等
[root@master ~]# kubectl --help
kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
  create        Create a resource from a file or from stdin
  expose        Take a replication controller, service, deployment or pod and expose it as a new Kubernetes service
  run           在集群中运行一个指定的镜像
  set           为 objects 设置一个指定的特征

Basic Commands (Intermediate):
  explain       Get documentation for a resource
  get           显示一个或更多 resources
  edit          在服务器上编辑一个资源
  delete        Delete resources by file names, stdin, resources and names, or by resources and label selector

Deploy Commands:
  rollout       Manage the rollout of a resource
  scale         Set a new size for a deployment, replica set, or replication controller
  autoscale     Auto-scale a deployment, replica set, stateful set, or replication controller

Cluster Management Commands:
  certificate   修改 certificate 资源.
  cluster-info  Display cluster information
  top           Display resource (CPU/memory) usage
  cordon        标记 node 为 unschedulable
  uncordon      标记 node 为 schedulable
  drain         Drain node in preparation for maintenance
  taint         更新一个或者多个 node 上的 taints

Troubleshooting and Debugging Commands:
  describe      显示一个指定 resource 或者 group 的 resources 详情
  logs          输出容器在 pod 中的日志
  attach        Attach 到一个运行中的 container
  exec          在一个 container 中执行一个命令
  port-forward  Forward one or more local ports to a pod
  proxy         运行一个 proxy 到 Kubernetes API server
  cp            Copy files and directories to and from containers
  auth          Inspect authorization
  debug         Create debugging sessions for troubleshooting workloads and nodes

Advanced Commands:
  diff          Diff the live version against a would-be applied version
  apply         Apply a configuration to a resource by file name or stdin
  patch         Update fields of a resource
  replace       Replace a resource by file name or stdin
  wait          Experimental: Wait for a specific condition on one or many resources
  kustomize     Build a kustomization target from a directory or URL.

Settings Commands:
  label         更新在这个资源上的 labels
  annotate      更新一个资源的注解
  completion    Output shell completion code for the specified shell (bash, zsh or fish)

Other Commands:
  alpha         Commands for features in alpha
  api-resources Print the supported API resources on the server
  api-versions  Print the supported API versions on the server, in the form of "group/version"
  config        修改 kubeconfig 文件
  plugin        Provides utilities for interacting with plugins
  version       输出 client 和 server 的版本信息

Usage:
  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
  • 在一个完成的项目周期中,包含创建>发布>更新>回滚>删除等过程,下面针对该过程依次进行操作命令的演示。

1.1、创建容器

  • kubectl run命令可以创建并运行一个或多个容器镜像,也可以创建一个deployment或job来管理容器。此命令和docker run相类似,也是实现容器镜像的创建,先从仓库中拉取基础镜像,然后对容器进行操作。kubectl run的命令语法如下所示
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--diy-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
# 上述命令语法中,个选项的作用分别如下所示
NAME:指定容器运行的名称
image:指定运行的基础镜像
env:指定在容器中设置的环境参数
port:指定容器暴露的端口
replicas:指定容器设置的副本数
dry-run:dry-run值如果为true,则只打印要发送的对象,而不发送它
overrides:生成对象的内联JSON重写,如果非空,则用于覆盖生成的对象。要求对象提供有效的apiVersion字段
  • 通过kubectl run命令创建Nginx容器,指定名称为nginx-deployment,指定基础镜像为nginx目前最新版本,指定对外暴露端口为80
[root@master ~]# kubectl create deployment nginx-deployment --image=nginx 
deployment.apps/nginx-deployment created
[root@master ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment                    1/1     Running   0          12m

1.2、发布服务

  • 容器资源创建完成,就需要完成发布工作,确保Pod能够提供服务,保证客户端能够正常访问,使用kubectl expose命令可以实现该目的。kubectl expose的命令语法如下所示
kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
# 上述命令语法中,个选项的作用分别如下所示
-f:表示公开服务的资源的文件的文件名,目录或URL
TYPE NAME:指定deployment'名称
port:指定内部通信端口
protocol:指定网络协议,tcp或udp
target-port:指定暴露在外部的端口
name:指定最新创建的对象的名称
external-ip:为serivce的外部IP地址
type:指定此服务的类型ClusterIP、NodePort、LoadBalancer或ExternalName默认ClusterIP
  • 通过kubectl expose命令创建Service,设置内部通信端口和外部暴露的端口均为80、名称为nginx-service、类型是NodePort。创建Service完后,就可以通过kubectl get svc命令查看到对外暴露的端口了(31424),内部通信的地址是
[root@master ~]# kubectl expose deployment nginx-deployment --port=80 --target-port=80 --type=NodePort
service/nginx-deployment exposed
[root@master ~]# kubectl get svc
NAME               TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP   10.1.0.1      <none>        443/TCP        2d4h
nginx-deployment   NodePort    10.1.55.214   <none>        80:31424/TCP   74s


# 查看Node真实节点上的分布
[root@master ~]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
nginx-deployment-794f656f8b-ljxgf                    1/1     Running   0          15m     10.244.1.2   node2   <none>           <none>

# 进行访问,外部网络也可以访问
[root@master ~]# curl 127.0.0.1:31424
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

1.3、版本更新

  • 一般来说,生产环境中的线上项目会随着时间的推进不断地进行更新、维护、版本升级、兼容老版本。而此时如果需要nginx更换版本,就需要更新
[root@master ~]# kubectl get pod 
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-794f656f8b-ljxgf                    1/1     Running   0          18m

# 执行以下命令可以得知nginx的版本为1.21.5
[root@master ~]# kubectl exec -it nginx-deployment -- nginx -v
nginx version: nginx/1.21.5


# 使用set命令更新版本
[root@master ~]# kubectl get deployment,pod
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   1/1     1            1           8m40s

NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-794f656f8b-ljxgf                    1/1     Running   0          20m
[root@master ~]# kubectl set image deployment.apps/nginx-deployment nginx=nginx:1.20


# 再次查看版本
deployment.apps/nginx-deployment image updated
[root@master ~]# kubectl exec -it nginx-deployment-54c69fd89f-zvnjk -- nginx -vnginx version: nginx/1.20.2

1.4、版本回滚

  • 若想回滚到上一个版本可以使用rollout参数
# 使用--help查看rollout帮助信息
[root@master ~]# kubectl rollout --help
Manage the rollout of a resource.
  
 Valid resource types include:

  *  deployments
  *  daemonsets
  *  statefulsets

Examples:
  # Rollback to the previous deployment
  kubectl rollout undo deployment/abc
  
  # Check the rollout status of a daemonset
  kubectl rollout status daemonset/foo

Available Commands:
  history     显示 rollout 历史
  pause       标记提供的 resource 为中止状态
  restart     Restart a resource
  resume      继续一个停止的 resource
  status      显示 rollout 的状态
  undo        撤销上一次的 rollout

Usage:
  kubectl rollout SUBCOMMAND [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).


# 查看deployment历史信息
[root@master ~]# kubectl rollout history deployment.apps/nginx-deployment
deployment.apps/nginx-deployment 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>


# 通过undo指定回滚操作,回滚到上一个版本
[root@master ~]# kubectl rollout undo deployment.apps/nginx-deployment
deployment.apps/nginx-deployment rolled back


# 通过status检查回滚
[root@master ~]# kubectl rollout status deployment.apps/nginx-deployment
deployment "nginx-deployment" successfully rolled out


# 查看nginx版本
[root@master ~]# kubectl exec -it nginx-deployment-794f656f8b-6mz9m -- nginx -vnginx version: nginx/1.21.5

1.5、删除资源

  • 通过以上步骤,完成了创建、发布、更新、回滚操作,接下来进行删除操作。通过kubectl get deployment查看deployment,并且使用kubectl delete 删除deployment;通过kubectl get svc查看service,并且使用kubectl delete 删除service
[root@master ~]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   1/1     1            1           19m

[root@master ~]# kubectl delete deployment nginx-deployment
deployment.apps "nginx-deployment" deleted

[root@master ~]# kubectl get deployment
No resources found in default namespace.

[root@master ~]# kubectl get pod
No resources found in default namespace.

[root@master ~]# kubectl get svc
NAME               TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP   10.1.0.1      <none>        443/TCP        2d5h
nginx-deployment   NodePort    10.1.55.214   <none>        80:31424/TCP   21m

[root@master ~]# kubectl delete svc nginx-deployment
service "nginx-deployment" deleted

[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   2d5h

1.6、查看资源使用情况

  • 通过describe可以查看较为详细的容器资源使用情况,包括一些错误信息都能检查出来
[root@master ~]# kubectl run nginx --image=nginx:latest --port=80
pod/nginx created


[root@master ~]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          16s


[root@master ~]# kubectl describe pod nginx
Name:         nginx
Namespace:    default
Priority:     0
Node:         node1/192.168.93.102
Start Time:   Wed, 26 Jun 2024 20:37:13 +0800
Labels:       run=nginx
Annotations:  <none>
Status:       Running
IP:           10.244.2.5
IPs:
  IP:  10.244.2.5
Containers:
  nginx:
    Container ID:   docker://56c71f925580c9685df61d57483c1395915fc5b65fca0f572d21d3b73e96d4f5
    Image:          nginx:latest
    Image ID:       docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Wed, 26 Jun 2024 20:37:29 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-b2bbx (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-b2bbx:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  40s   default-scheduler  Successfully assigned default/nginx to node1
  Normal  Pulling    40s   kubelet            Pulling image "nginx:latest"
  Normal  Pulled     24s   kubelet            Successfully pulled image "nginx:latest" in 15.608598189s
  Normal  Created    24s   kubelet            Created container nginx
  Normal  Started    24s   kubelet            Started container nginx

1.7、执行容器命令

  • 进入Pod。使用exec可以进入容器,完成相关操作
[root@master ~]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          2m1s
[root@master ~]# kubectl exec -it nginx -- bash
root@nginx:/# ls
bin   docker-entrypoint.d   home   media  proc	sbin  tmp
boot  docker-entrypoint.sh  lib    mnt	  root	srv   usr
dev   etc		    lib64  opt	  run	sys   var
root@nginx:/# /etc/init.d/nginx status
nginx is running.
root@nginx:/# nginx -v
nginx version: nginx/1.21.5

网站公告

今日签到

点亮在社区的每一天
去签到