Kuebernetes资源控制管理

第四阶段

时 间:2023年8月11日

参加人:全班人员

内 容:

Kuebernetes资源控制管理

目录

Kubectl命令工具

[一、kubectl 命令行的语法](#一、kubectl 命令行的语法)

二、kubectl命令列表

[三、使用 Kubectl 工具容器资源](#三、使用 Kubectl 工具容器资源)

(一)创建Pod

(二)发布服务

自我修复测试:

负载均衡测试:


Kubectl命令工具

Kubectl 是一个用于操作 Kubernetes 集群的命令行工具,利用 Kubectl 的各种子命令可以实现各种功能,在管理 Kubernetes 集群过程中kubectl是非常实用的工具。

Kube-apiserver是整个Kubernetes集群管理的入口。

API Server运行在Kubernetes 集群的主管理节点(Master)上,用户需要通过 API Server 配置和组织集群,同时集群中各节点与 Etcd 存储的交互也是通过 API Server 来进行的。

API Server 实现了一套 RESTfull 的接口,用户可以直接使用 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 命令即可返回所有 Pod 的列表。

flags:kubectl 子命令的可选参数,例如使用"-s"指定 API Server 的 URL 地址而不用默认值。

kubectl 的子命令非常丰富,涵盖了对 Kubernetes 集群的主要操作,包括资源对象的创建、删除、查看、修改、配置、运行等操作。

二、kubectl命令列表

三、使用 Kubectl 工具容器资源

Kubectl 是管理Kubernetes集群的命令行工具,通过生成的 json 格式传递给 API Server 进行创建、查看、管理的操作。

使用 kubectl --help命令可以查看 Kubectl 帮助命令,其中包括基本命令、部署命令、群集管理命令、调试命令以及高级命令等。

[root@k8s-master ~]# kubectl --help

在一个完整的项目周期中,包含创建->发布->更新->回滚->删除等过程,下面针对该过程依次进行操作命令的演示。

(一)创建Pod

kubectl run 命令可以创建并运行一个或多个Pod,也可以创建一个 deployment 或job 来管理Pod。此命令和 docker run 相类似,也是实现Pod的创建,先从仓库中拉取基础镜像,然后对容器进行操作。

kubectl run 的命令语法如下所示:

kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]

各选项的作用分别如下所示:

****NAME:****指定容器运行的名称;

****Image:****指定运行的基础镜像;

****env:****指定在容器中设置的环境参数;

****port:****指定容器暴露的端口;

****replicas:****指定启动容器设置的副本数;

****dry-run:****dry-run 值如果为 true,则只打印要发送的对象,而不发送它;

****overrides:****生成对象的内联 JSON 重写。如果非空,则用于覆盖生成的对象。要求对象提供有效的 apiVersion 字段。

前提配置:

[root@k8s-master ~]# kubectl get nodes

例:通过 kubectl run 命令创建 Nginx 容器, 指定名称为 nginx-deployment,指定基础镜像为 Nginx 目前最新版本,指定对外暴露的端口为 80 以及副本数为 3。

[root@k8s-master ~]# kubectl run nginx-deployment --image=nginx:1.14 --port=80 --replicas=3(已禁用)

可以通过下列命令,实时查看创建过程:

[root@k8s-master ~]# watch -n1 kubectl get pods -o wide

[root@k8s-master ~]# kubectl get pods

[root@k8s-master ~]# kubectl get pods -o wide

(二)发布服务

容器资源创建完成,就需要完成发布工作,确保 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:****为 service 的外部 IP 地址;

****type:****指定此服务的类型 ClusterIP,NodePort,LoadBalancer 或 ExternalName,默认 ClusterIP。

通过 kubectl expose 命令创建 Service,设置内部通信端口和外部暴露的端口均为 80、名称为 nginx-service、类型是 NodePort。创建 Service 完后,就可以通过 kubectl get svc命令查看到对外暴露的端口是30037,内部通信的地址是10.96.0.1

前提配置:!!!!

[root@k8s-master k8s]# vim nginx-deployment.yaml

[root@k8s-master k8s]# kubectl create -f nginx-deployment.yaml

[root@k8s-master ~]# kubectl expose deployment nginx-deployment --port=80 --target-port=80 --name=nginx-service --type=NodePort

service/nginx-service exposed

[root@k8s-master ~]# kubectl get pods,svc

执行 kubectl get endpoints 查看容器自带的负载均衡。从执行结果可以得知容器自带的负载均衡分别是 10.244.1.4:80、10.244.2.4:80、10.244.2.5:80

[root@k8s-master ~]# kubectl get endpoints

执行 kubectl get pods 命令时加参数 -o wide 可以查看到 Node 真实节点上的分布。

[root@k8s-master ~]# kubectl get pods -o wide

完成上述步骤就已经完成了发布,并且可以进行对其访问。

[root@k8s-node01 ~]# curl 10.244.1.3

[root@k8s-node01 ~]# curl 10.244.1.4

自我修复测试:

[root@k8s-master k8s]# kubectl delete pod nginx-deployment-644599b9c9-6zznv

[root@k8s-master k8s]# watch -n 1 kubectl get pod -o wide

会自动生成新的pod,这就是k8s的自我修复!

负载均衡测试:

创建测试页面:

[root@k8s-node01 ~]# docker ps -a

[root@k8s-node01 ~]# docker exec -it 4686eb55f05c /bin/bash

root@nginx-deployment-644599b9c9-jqxxx:/# cd /usr/share/nginx/html/

root@nginx-deployment-644599b9c9-jqxxx:/usr/share/nginx/html# echo "k8s-node01" > index.html

 

[root@k8s-node01 ~]# docker exec -it 076e08274415  /bin/bash

root@nginx-deployment:/# cd /usr/share/nginx/html/

root@nginx-deployment:/usr/share/nginx/html# echo "k8s-node01-test" > index.html 

[root@k8s-master k8s]# kubectl get pod,svc

[root@k8s-master ~]# curl 192.168.100.131:30037

[root@k8s-master ~]# curl 192.168.100.131:30037

相关推荐
华为云开发者联盟2 分钟前
解读Karmada多云容器编排技术,加速分布式云原生应用升级
kubernetes·集群·karmada·多云容器
HC1825808583210 分钟前
“倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
学习·生活
学习路上_write15 分钟前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程
非概念20 分钟前
stm32学习笔记----51单片机和stm32单片机的区别
笔记·stm32·单片机·学习·51单片机
Shepherd06191 小时前
【Jenkins实战】Windows安装服务启动失败
运维·jenkins
Biomamba生信基地2 小时前
Linux也有百度云喔~
linux·运维·服务器·百度云
无敌最俊朗@2 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习
new_abc2 小时前
Ubuntu 22.04 ftp搭建
linux·运维·ubuntu
EterNity_TiMe_2 小时前
【论文复现】STM32设计的物联网智能鱼缸
stm32·单片机·嵌入式硬件·物联网·学习·性能优化
鹿鸣天涯2 小时前
‌华为交换机在Spine-Leaf架构中的使用场景
运维·服务器·网络