Kubernetes系列之命令行

小伙伴儿们,如果觉得文章干货满满,欢迎加入公众号【编程识堂】,更多干货等着你们来哦!

背景

小伙伴儿,通过我之前的文章已经学会了docker,docker很多命令都是围绕命令行方式展开的,而我们的k8s也是同样的,所以这篇文章主题就是通过命令行认知我们的k8s。

NameSpace介绍

简介

学过java的小伙伴儿,都知道在java体系里万物皆为对象,java把整个世界划分为一个一个类,而k8s把整个世界划分资源,万物皆为资源;xml技术相信大家也已经很熟悉了,在xml中我们学过一个基本技术叫namespace,在mybatis里面namespace得到了大量的应用,我们在mapper.xml文件去定义了namespace属性,去区分一张又一张表,在每个namespace里面去完成最基本的CRUD操作,在整个k8s里namespace和xml里面是一样的道理,也是命名空间,在k8s集群中可以拥有多个命名空间,也是在做逻辑上的隔离,可以为我们提供组织、安全甚至性能方面的帮助!
Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或 用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace 的(默认是default),而node, persistentVolumes等则不属于任何namespace。
大多数的Kubernetes中的集群默认会有一个叫default的namespace。实际上,应该是4个:

  • default:你的资源默认被创建于default命名空间。
  • kube-system:kubernetes系统组件使用。
  • kube-node-lease: kubernetes集群节点租约状态,v1.13加入。
  • kube-public:公共资源使用。但实际上现在并不常用。

这个默认(default)的namespace并没什么特别,但你不能删除它。这很适合刚刚开始使用 kubernetes和一些小的产品系统。但不建议应用于大型生产系统。因为,这种复杂系统中,团队会非常 容易意外地或者无意识地重写或者中断其他服务service。相反,请创建多个命名空间来把你的 service(服务)分割成更容易管理的块。
作用

  • 多租户情况下,实现资源隔离
  • 属于逻辑隔离
  • 属于管理边界
  • 不属于网络边界
  • 可以针对每个namespace做资源配额

查看命名空间

##查看所有命名空间
kubectl get namespace
##简写命令
kubectl get ns

##查看所有命名空间的pod资源
kubectl get pod --all-namespaces
##简写命令
kubectl get pod -A
##查看default命名空间pod资源
kubectl get pod

##创建编程识堂命名空间
kubectl create ns bcst
##删除编程识堂命名空间
kubectl delete ns bcst

image.png
image.png
image.png
image.png
image.png

Pod介绍

简介

Pod是kubernetes集群能够调度的最小单元。Pod是容器的封装 。
在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个 容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被统一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。

Pod有两个必须知道的特点

网络:每一个Pod都会被指派一个唯一的Ip地址,在Pod中的每一个容器共享网络命名空间,包括Ip地址 和网络端口。在同一个Pod中的容器可以和localhost进行互相通信。当Pod中的容器需要与Pod外的实体进行通信时,则需要通过端口等共享的网络资源。
存储:Pod能够被指定共享存储卷的集合,在Pod中所有的容器能够访问共享存储卷,允许这些容器共享数据。存储卷也允许在一个Pod持久化数据,以防止其中的容器需要被重启。

Pod的工作方式

K8s一般不直接创建Pod。 而是通过控制器模版配置来管理和调度。
Pod模版(官方推荐使用)
我们会在后续章节为大家介绍pod模版。
Pod重启
在Pod中的容器可能会由于异常等原因导致其终止退出,Kubernetes提供了重启策略以重启容器。重启
策略对同一个Pod的所有容器起作用,容器的重启由Node上的kubelet执行。Pod支持三种重启策略,
在配置文件中通过restartPolicy字段设置重启策略:

  • Always:只要退出就会重启。
  • OnFailure:只有在失败退出(exit code不等于0)时,才会重启。
  • Never:只要退出,就不再重启
    注意,这里的重启是指在Pod的宿主Node上进行本地重启,而不是调度到其它Node上。

资源限制
Kubernetes通过cgroups限制容器的CPU和内存等计算资源,包括requests(请求,调度器保证调度到 资源充足的Node上)和limits(上限)等。

查看Pod

##查看default命名空间下的pods
kubectl get pods
##查看kube-system命名空间下的pods
kubectl get pods -n kube-system
##查看所有命名空间下的pods
kubectl get pod --all-namespaces
kubectl get pod -A

创建pod

##K8S集群的每一个节点都需要下载镜像:选择不同的基础镜像,下载镜像的大小也不同。
docker pull tomcat:9.0.20-jre8-alpine #108MB
docker pull tomcat:9.0.37-jdk8-openjdk-slim #305MB
docker pull tomcat:9.0.37-jdk8 #531MB
#同学们可以自行下载后进行备份。
docker save -o tomcat9.tar tomcat:9.0.20-jre8-alpine
docker load -i tomcat9.tar

运行pod

#在default命名空间中创建一个pod副本的deployment
kubectl run tomcat9-test --image=tomcat:9.0.20-jre8-alpine --port=8080
kubectl get pod
#查询pod详情
kubectl get pod -o wide
#使用pod的IP访问容器
crul ***:8080

image.png
image.png
注:通过命令行创建的pod,会同步创建一个控制器deployment

删除pod

kubectl delete pod tomcat9-test-569b5bf455-jppll
## 发现删除后,会新启动一个pod,原因在pod上层有个deployment控制器控制,需要删除deployment,其下面的pod才会都被删除
#查询deployment详情
kubectl get deployment
kubectl get deployment -o wide
#删除deployment 
kubectl delete deployment tomcat9-test

image.png
image.png

Deployment介绍

简介

为了更好地解决服务编排的问题,k8s在V1.2版本开始,引入了deployment控制器,值得一提的是,这种控制器并不直接管理pod,而是通过管理replicaset来间接管理pod,即:deployment管理replicaset,replicaset管理pod。所以deployment比replicaset的功能更强大。
deployment的主要功能有下面几个:

  • 支持replicaset的所有功能
  • 支持发布的停止、继续
  • 支持版本的滚动更新和版本回退

命令

# 将副本扩容至3个
kubectl scale  --replicas=3 deployment/tomcat9-test
kubectl get pod -o wide
kubectl get deployment -o wide
#查询deployment详情
kubectl get deployment
kubectl get deployment -o wide
#删除deployment 
kubectl delete deployment tomcat9-test

image.png

Service介绍

在deployment上层是service,集群外部应用访问集群内应用;

创建服务

## --port=8888 是service对集群内其他应用暴露的端口   --target-port=8080是容器pod的端口号 --type=NodePort自动生成一个外部应用访问的端口号
kubectl expose deployment tomcat9-test --name=tomcat9-svc --port=8888 --target-port=8080 --protocol=TCP --type=NodePort

kubectl get svc
kubectl get svc -o wide
访问服务端口
curl 10.1.220.175:8888
##外部应用访问 比如浏览器访问
192.168.150.128:32296

image.png
image.png
image.png

k8s集群 NodePort默认的端口号范围

默认情况下,k8s 集群 nodePort 分配的端口范围为:30000-32767,如果我们需要更多的端口,或者重新规划使用端口,需要进行调整;

如何修改k8s集群NodePort默认的端口号范围

端口范围是由kube-apiserver控制的,它是一个运行在k8s集群内的pod。kube-apiserver pod 基于于/etc/kubernetes/manifests/kube-apiserver.yaml 创建。
因此只需要更新文件/etc/kubernetes/manifests/kube-apiserver.yaml ,在–service-cluster-ip-range=10.96.0.0/12下面添加行 --service-node-port-range=20000-32767即可。
image.png

kubectl常用命令练习

语法规则

kubectl [command] [TYPE] [NAME] [flags]

其中 command 、 TYPE 、 NAME 和 flags 分别是
command :指定要对一个或多个资源执行的操作,例如 create 、 get 、 describe 、 delete 。
TYPE :指定资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。例如,以下命 令输出相同的结果:

kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1

NAME :指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息 kubectl get pods 。
比如上面的 tomcat9-test-569b5bf455-jppll
在对多个资源执行操作时,您可以按类型和名称指定每个资源,或指定一个或多个文件:

  1. 要按类型和名称指定资源
  • 要对所有类型相同的资源进行分组,请执行以下操作: TYPE1 name1 name2 name<#> 。

      例子: kubectl get pod example-pod1 example-pod2  
    
  • 分别指定多个资源类型: TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#> 。

    例子: kubectl get pod/example-pod1 replicationcontroller/example-rc1  
    
  1. 用一个或多个文件指定资源 -f file1 -f file2 -f file<#>

使用 YAML 而不是 JSON 因为 YAML 更容易使用,特别是用于配置文件时。
例子: kubectl get pod -f ./pod.yaml
flags : 指定可选的参数。例如,可以使用 -s 或 -server 参数指定 Kubernetes API 服务器的地址 和端口。
注意: 从命令行指定的参数会覆盖默认值和任何相应的环境变量。

get命令

kubectl get - 列出一个或多个资源

# 查看集群状态信息
kubectl cluster-info
# 查看集群状态
kubectl get cs
# 查看集群节点信息
kubectl get nodes
# 查看集群命名空间
kubectl get ns
# 查看指定命名空间的服务
kubectl get svc -n kube-system
# 以纯文本输出格式列出所有 pod。
kubectl get pods
# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
kubectl get pods -o wide
# 以纯文本输出格式列出具有指定名称的副本控制器。提示:您可以使用别名 'rc' 缩短和替换'replicationcontroller' 资源类型。
kubectl get replicationcontroller <rc-name>
# 以纯文本输出格式列出所有副本控制器和服务。
kubectl get rc,services
# 列出在节点 node1 上运行的所有 pod
kubectl get pods --field-selector=spec.nodeName=node1

image.png
image.png
image.png

describe命令

kubectl describe - 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。

# 显示名称为 <node-name> 的节点的详细信息。
kubectl describe nodes <node-name>
# 显示名为 <pod-name> 的 pod 的详细信息。
kubectl describe pods/<pod-name>
# 显示由名为 <rc-name> 的副本控制器管理的所有 pod 的详细信息。
# 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。
kubectl describe pods <rc-name>

image.png

说明: kubectl get 命令通常用于检索同一资源类型的一个或多个资源。 它具有丰富的参数, 允许您使用 -o 或 --output 参数自定义输出格式。您可以指定 -w 或 --watch 参数以开始观察 特定对象的更新。 kubectl describe 命令更侧重于描述指定资源的许多相关方面。它可以调用 对 API 服务器 的多个 API 调用来为用户构建视图。 例如,该 kubectl describe node 命令不 仅检索有关节点的信息,还检索在其上运行的 pod 的摘要,为节点生成的事件等。

delete命令

kubectl delete` - 从文件、stdin 或指定标签选择器、名称、资源选择器或资源中删除资源。

# 使用 pod.yaml 文件中指定的类型和名称删除 pod。
kubectl delete -f pod.yaml
kubectl delete -f calico.yaml
# 删除标签名= <label-name> 的所有 pod 和服务。
kubectl delete pods,services -l name=<label-name>
 kubectl delete pod tomcat9-test-569b5bf455-vdz44
# 删除所有具有标签名称= <label-name> 的 pod 和服务,包括未初始化的那些。
kubectl delete pods,services -l name=<label-name> --include-uninitialized
# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all

image.png

exec 进入容器命令

kubectl exec - 对 pod 中的容器执行命令。与docker的exec命令非常类似

# 进入tomcat9-test-569b5bf455-nb2zq 系统 
kubectl exec -it tomcat9-test-569b5bf455-nb2zq sh  # alpine 系统
kubectl exec -it tomcat9-test-569b5bf455-nb2zq /bin/bash 

image.png

logs命令

kubectl logs - 打印 Pod 中容器的日志。

# 从 pod 返回日志快照。
kubectl logs <pod-name>
# 从 pod <pod-name> 开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f <pod-name>

kubectl logs -f tomcat9-test-569b5bf455-nb2zq

image.png

生成pod yaml模板

将pod信息格式化输出到一个yaml文件
kubectl get pod web-pod-13je7 -o yaml

kubectl get pod tomcat9-test-569b5bf455-nb2zq -o yaml

image.png

强制删除pod

强制删除一个pod
--force --grace-period=0
kubectl delete pod tomcat9-test-569b5bf455-nb2zq --force --grace-period=0

资源缩写

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程识堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值