kubectl陈述式资源管理

目录

概念

kubectl的基础命令

*每天常用的查看集群的基本信息

deployment的部署方式

[deployment 的特点](#deployment 的特点)

基于deployment创建pod

手动缩容

service的类型以及工作原理

创建service

service的类型

修改service的类型为nodeport

**nodeport实验:对外暴露端口

滚动更新以及回滚

对版本进行滚动更新

回滚

销毁


概念

kubectl 是陈述式资源管理方式(命令行) 管理就是增删改查

资源对象包含pod、控制器、service,我们创建资源对象时会用声明式,用yaml文件写的

陈述式命令的开头是 kubectl

k8s项目的生命周期:发布------修改------更新------回滚------销毁

kubectl的基础命令

kubectl version 查看集群的版本

kubectl api-resources 查看资源对象的版本和简写

kubectl cluster-info 查看集群的信息

journalctl -u kubelet -f 和 tail -f /var/log/messages 查看集群的日志

*每天常用的查看集群的基本信息

kubectl get cs 查看集群组件的健康状态

kubectl get node 查看节点的状态

kubectl get pod 查看默认命名空间里面当前运行的pod 默认命名空间是default

了解即可:

name:pod的名称

ready:1/1 表示正常状态

status :running 表示运行

只有1/1和running才表示pod属于正常状态

restarts 表示pod的重启次数。因为自愈功能,pod在非正常状态下,会自动进行重启,状态正常之后就不会再进行重启。

AGE:当前pod的运行时间

kubectl create ns xy102 创建命名空间

kubectl delete ns xy102 删除命名空间

kubectl get all 查看当前命名空间的所有资源

kubectl get pod -o wide 查看pod的详细信息 (pod被部署在哪个节点上)

deployment的部署方式

资源对象的部署方式叫做deployment。它是无状态部署方式:pod的名称是随机生成的。

deployment 的特点

1.创建时可以指定副本数(pod的数量)、

2.滚动更新:先更新一个,更新好了之后再更新余下的pod

3.自我修复:默认的策略就是重启容器,删除pod相当于重启pod

4.支持回滚:如果更新有问题,可以恢复到上一个版本

5.支持pod数量的扩容和缩容(手动)

基于deployment创建pod

首先要kubectl create ns xy102 创建命名空间

kubectl create deployment test1 --image=nginx:1.22 --replicas=3 -n xy102 基于deployment创建的pod

kubectl delete pod test1-86776958-5br7q -n xy102 重启pod,不能删除

基于 deployment创建的pod, delete pod 相当于重启,不能删除pod

kubectl run nginx1 --image=nginx:1.22 -n xy102 run直接创建pod 删除这个就是真的删除

kubectl describepod -n xy102 test1-86776958-5br7q 查看这个pod的详细情况

创建pod流程:调度策略(把pod部署到哪个节点上)------拉取镜像------创建容器------运行容器

kubectl describe deployments.apps -n xy102 test1 查看创建的资源对象的信息

kubectl logs -f test1-86776958-5br7q -n xy102 查看pod的日志

kubectl exec -it -n xy102 test1-86776958-5br7q bash 进入pod内的容器

手动缩容

方式一:命令行: kubectl scale deployment nginx1 -n xy102 --replicas=1

方式二:在yaml文件:kubectl edit deployment nginx1 -n xy102

进入之后修改replicas即可

注:pod的ip地址随着pod的生命周期有可能会发生变化,内部访问我们通过pod的ip可以直接访问,外部访问不会受到影响。

service的类型以及工作原理

service如何与pod进行关联,这种关联不受pod的ip地址的变化影响

创建service

kubectl expose deployment nginx1 --port=80 --target-port=80 --name=nginx - n xy102

注:前一个port是集群的service的端口,是和容器内的80做的映射

kubectl get svc 查看service

service的类型

1.ClusterIP 默认类型,提供集群内部的一个虚拟ip地址。是用来让其他的pod来访问的,pod可以通过这个service的ip地址直接访问到内部的容器。只能内部访问,外部不能访问。是内部组件通信使用。(对内)

  1. NodePort:在每个节点(集群的所有节点)都会开放一个端口,外部就可以通过本机的ip+端口(nodeport端口)访问pod内的容器服务。每个节点nodeport的端口都是一致的,端口是有范围的:30000-32767 (对外)
修改service的类型为nodeport

kubectl edit svc -n xy102 nginx1

此时80是service端口 31151是所有节点上开放的端口(所有的节点主机本机ip都能访问)

访问的流程:在宿主机上开放的端口31151------service的80端口------pod里面容器的80端口

**nodeport实验:对外暴露端口

流程图:

deployment的标签是app=nginx1

由于service匹配的标签是app=nginx1,只要资源对象的标签包含app=nginx1,所以都可以通过service进行转发

kubectl edit pod nginx2 -n xy102 进入yaml文件

把labels指向app=nginx1

实验结果:

此时访问本机的31151端口 就能访问到所有的pod

总结:nodeport:service根据标签来匹配对应的pod,只要标签匹配,都能转发打到指定的pod内的容器。

3.LoadBalancer:云平台的运营商(阿里云、腾讯云)提供loadbalancer的地址 地址需要付费

提供之后也是通过访问负载均衡的地址,来实现pod的流量转发

4.ExternalName:把service的名称映射到DNS的域名上。就是让pod去访问集群外部的资源,而且设置为此类型service将不能提供四层负载均衡服务。

滚动更新以及回滚

对版本进行滚动更新

kubectl set image deployment/nginx1 nginx=nginx:1.18 -n xy102

此时 kubectl get pod -o wide -n xy102 即可查看是否正则更新

kubectl rollout history deployment/nginx1 -n xy102 查看还原点

数字大小决定了距离上次更新操作的远近,数字越大,就是最近的一次操作

kubectl set image deployment/nginx1 nginx=nginx:1.20 --record -n xy102 record添加更新记录

回滚

kubectl rollout undo deployment/nginx1 --to-revision=5 -n xy102 回滚

销毁

所以基于deployment创建的资源对象的pod如果要删除,首先要先删除deployment,然后再删除service,最后再删除命名空间。

相关推荐
(⊙o⊙)~哦21 分钟前
linux 解压缩
linux·运维·服务器
牧小七1 小时前
Linux命令---查看端口是否被占用
linux
最新小梦2 小时前
Docker日志管理
运维·docker·容器
鸡鸭扣2 小时前
虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通
linux·运维·ubuntu
友友马3 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http
千禧年@3 小时前
微服务以及注册中心
java·运维·微服务
重生之我在20年代敲代码3 小时前
HTML讲解(一)body部分
服务器·前端·html
清水白石0083 小时前
C++使用Socket编程实现一个简单的HTTP服务器
服务器·c++·http
记得开心一点嘛4 小时前
在Linux系统上使用Docker部署javaweb项目
linux·运维·docker
GG_Bond194 小时前
【项目设计】Facial-Hunter
服务器·人工智能