【K8S 资源管理】陈述式资源管理方式

news/2024/6/3 17:13:14 标签: kubernetes, docker, 容器

目录

一、kubectl的基本命令

1、基本信息查看

2、pod的部署:

2.1、deployment:

2.2、daemonset:

二、server:

1、service类型:

1.1、ClusterIp:

1.2、NodePort:

1.3、LoadBalancer

1.4、ExternalName:

三、更新和回滚以及发布的方式:


命令行: kubectl命令行工具

优点: 90%以上的场景都可以满足

对资源的增,删,查比较方便,对改不是很友好

缺点:命令比较冗长,复杂难记

声明方式:k8s当中的yaml文件实现资源管理----声明式

GUI:图形化工具的管理。

一、kubectl的基本命令

1、基本信息查看

#查看k8s的版本

kubectl version

#查看k8s的集群信息

kubectl cluster-info

#查看所有api的资源对象的名称。

kubectl api-resources



#查看当前master的节点状态

kubectl get cs

#查看默认命名空间内的的pod的信息

kubectl get pod

#查看当前集群所有的命名空间

kubectl get ns

#要查看指定命名空间内的pod需要加-n    命名空间的名称

kubectl get pod -n kube-system

#查看默认命名空间内pod的详细信息

kubectl get pod -o wide

#查看指定命名空间的详细信息

kubectl get pod -o wide -n kube-system



#查询节点的信息和状态

kubectl get node

#查看node节点的详细信息

kubectl get node -o wide

#查看已经部署好的pod详细信息

kubectl get pod

kubectl describe pod nginx-86cfbb5b5c-qzhf6

#查看指定命名空间中的指定pod的详细信息

kubectl describe pod -n <指定命名空间> <指定空间中的pod>

#查看pod输出的日志内容,一次性查看

kubectl logs nginx-6799fc88d8-wjzh5

#加 -f 动态查看日志

kubectl logs -f nginx-6799fc88d8-wjzh5

#查看指定命名空间的pod的日志

kubectl logs -f -n test1 nginx-1-6664c49886-r6mjx

#查看default命名空间的所有资源

kubectl get all [-n default]

#创建命名空间

kubectl create ns test2

#删除命名空间

kubectl delete ns test2

删除pod中的容器

不是真正的删除,是重启容器

kubectl delete pod nginx-6799fc88d8-fb64x(pod名称)

立刻停止pod

主要是用于结束卡在销毁状态的pod,也不是真正的删除pod。也相当于重启

kubectl delete pod nginx-6799fc88d8-7p2t9 --force --grace-period=0

#--grace-period:过度的存活期。默认是30秒。可以让pod优雅的结束容器内的进程,然后退出pod

#=0:表示立即停止pod。必须要force实现。

如果是基于deployment方式创建的pod或者是daemonset方式创建的pod,是由控制器创建的pod,使用delete删除pod是不删不掉的,相当于重启pod

要删除基于控制器创建的pod,一旦删除deployment,基于这个deployment创建的pod会被删除。

2、pod的部署:

2.1、deployment:

陈述式部署:命令行

声明式部署:yml文件部署

deployment作用:

滚动更新:不是一次性的把所有pod部署完毕,而是一个一个的来。主要用来pod的更新时使用,逐步的引入新的pod逐步的减少旧的pod

自我修复:如果有pod节点发生故障,deployment的方式会自动启动新的Pod来进行代替

回滚:如果更新有问题,deployment会提供还原点,可以手动改还原到未更新前的状态

扩容和缩容:通过deployment可以随时调增pod的数量,以适应流量的变化

上述的功能必须是基于deployment创建的服务才可以

工作中绝大多数的pod都是使用deployment创建的

2.2、daemonset

daemonset:不能通过命令行创建,只能通过yaml的创建daemonset,后台运行创建,只能在每个节点创建一个相同方式的,相同版本的容器运行的pod,一般都是依赖环境和重要组件,一般也不会去对这些进行操作。

#查看默认命名空间,通过deployment创建的pod

kubectl get deployments

#查看指定命名空间

kubectl get deployments.apps -n test2

#查看通过daemonset创建的pod

kubectl get daemonsets.apps -n kube-system

#由deployment创建的pod:

kubectl create deployment nginx-1 --image=nginx

kubectl create deployment nginx-1 --image=nginx --replicas=3 -n test2

如果是基于deployment或者是daemonset方式创建的pod,也就是说是用控制器创建的pod,使用delete删除pod是删除不掉的,相当于重启

若pod不是基于控制器创建的会被直接删除

要删除基于控制器创建的pod,要先删除控制器

删除控制器会删除全部的pod副本

kubectl delete deployments nginx-1 -n test1

kubectl get pod -n test1

基于run创建的pod

不是基于控制器创建,会被直接删除。

kubectl run nginx-2 --image=nginx -n test1

kubectl delete pod -n test1 nginx-2

在master节点进入node的容器(远程进入节点容器

进入默认模式的容器

kubectl exec -it nginx-86cfbb5b5c-7cq5c bash

#docker的exec只能在本机内部使用,不能跨主机。kubectl的exec可以跨主机进入容器

进入指定节点的容器

kubectl exec -it -n test1 nginx-1-6664c49886-6cthj bash

#远程进入指定命名空间内的pod节点容器

对deployment创建的pod进行扩缩容

#扩容

kubectl scale deployment -n test1 nginx-1 --replicas=4

#缩容

kubectl scale deployment -n test1 nginx-1 --replicas=1

创建pod时并没有指定副本数,后续也可以对他的副本数进行修改。仅限于deployment控制器

kubectl delete pod nginx-dn-6d6cd9c7c5-j7ffr --force --grace-period=0

grace-period:表示过度的存活期,默认30秒。可以让pod优雅的结束容器内的进程,然后退出pod,一旦设为等于0,表示立刻停止pod,必须要force才能实现

二、server

kubectl get svc

#查看当前命名空间的service

kubectl delete svc nginx

#删除service

kubectl get svc -n test1

#查看指定命名空间service

1、service类型:

1.1、ClusterIp:

创建service的默认类型,提供一个集群内部的虚拟IP地址,这时service的默认类型。通过这个虚拟Ip可以直接访问pod的资源,但是仅限于内部请求,无法对外提供访问

1.2、NodePort:

会在每一个node节点上都开放一个相同的端口,外部可以通过node的本机Ip+端口,访问pod资源。是集群外部访问service的一种方式。是四层代理的方式

nodeip:nodeport

nodeport可以随机指派,也可以指定,但都是从30000开始,到32767结束

#发布kubectl expose命令

将资源暴露为新的 Service。

#为deployment的nginx创建service,并通过Service的8080端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort

基于deployment创建的pod可以使用的方式

kubectl expose deployment nginx --port=8080 --target-port=80 --name=nginx-service --type=NodePort

--port=80:service集群的端口

--target-port=80:pod内部容器的端口

意思是service的端口8080和nginx pod的端口80做映射。--target-port一般是固定的。和pod进程的端口一致

pod内部容器的端口要和--target-port一致

pod内部的容器的端口是固定的(假设)。--port是service和容器映射的端口,可以随便指定,--target-port是容器内部pod的端口

端口映射关系

10.96.184.13 集群内部的ip地址(service),外部是不可以访问这个ip地址的

80:pod的端口地址,他和service的8080端口做映射

8080: 对应的是内部的service的端口

30859: 和内部的service的8080端口做映射(30000-32767

#访问测试

curl 20.0.0.61:31194

curl 10.96.184.13:8080

#修改本机映射端口

kubectl edit svc nginx-service

1.3、LoadBalancer

如果service的类型设定为LoqdBalancer,映射地址(云平台提供LoadBalancer的地址)这种用法仅限于公有云服务供应商在云平台上设置的service的场景,外部来访问,实现外来访问,实现负载均衡。LoadBalancer这个地址是要付费的。

创建service,指定类型为LoadBalancer,会给你提供一个地址来带代理pod内部的ip地址。

kubectl expose deployment -n test1 nginx-1 --port=8090 --target-port=80 --name=nginx2-service --type=LoadBalancer

1.4、ExternalName:

DNS映射,给service分配一个域名,通过域名来访问后端pod资源。ExternalName的service类型不能提供负载均衡,必须要设置一个LoadBalancer的地址才可以实现。

一般工作中用ExternalName和NodePort,做映射和NodePort暴露端口

kubectl edit svc nginx1-server

#进入service内直接修改

vim /etc/hosts

这里没有域名网址,只能本地映射测试,将三个pod的ip做映射

但是不能轮询

四个类型我都知道

默认类型只对内访问

NodePort类型我配置过可以对外访问

LoadBalancer类型需要花钱

ExternalName类型需要配置域名

三、更新和回滚以及发布的方式:

项目的生命周期:

创建——发布——更新——回滚——删除

更新:

kubectl set image deployment nginx1 nginx=nginx:1.10

滚动更新,一个个更新

kubectl get pod -w

动态查看更新情况

curl -I 20.0.0.61:31489

#查看版本

回滚:

kubectl rollout history deployment nginx-1

数字的大小决定了距离上次操作的远近,数字越大表示最近的一次操作

设置保存点的说明标识:--record

kubectl set image deployment nginx nginx=nginx:1.15 --record

载入进度:

kubectl rollout undo deployment nginx --to-revision=1

--to-revision=1:回到1这个保存点

kubectl rollout status deployment nginx

查看pod的更新情况


http://www.niftyadmin.cn/n/5300050.html

相关文章

几个实用网站

论文短语&#xff1a;https://www.phrasebank.manchester.ac.uk/ 翻译&#xff1a;https://www.deepl.com/en/translator 润色&#xff1a;https://quillbot.com/ 榜单&#xff1a;www.paperwithcode.com ****NLP民工的乐园: 几乎最全的中文NLP资源库&#xff1a;****https…

RKE安装k8s及部署高可用rancher

一 了解 Rancher 1 推荐架构 安装 Rancher 的方式有两种&#xff1a;单节点安装和高可用集群安装。因为单节点安装只适用于测试和 demo 环境&#xff0c;而且单节点安装和高可用集群安装之间不能进行数据迁移&#xff0c;所以推荐从一开始就使用高可用集群安装的方式安装 Ran…

关于简单的数据可视化

1. 安装数据可视化必要的openpyxl、pandas&#xff0c;matplotlib等软件包 使用清华源&#xff0c;命令如下&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pandaspip install -i https://pypi.tuna.tsingh…

CSS关于AI智能页面布局排列

效果图如下&#xff1a; 具体代码如下&#xff1a; <template><div class"box"><div class"title"><img src"" alt class"logo" /><span class"title-hn">AI人工智能</span></div&…

自然语言处理24-T5模型的介绍与训练过程,利用简单构造数据训练微调该模型,体验整个过程

大家好,我是微学AI,今天给大家介绍一下自然语言处理24-T5模型的介绍与训练过程,利用简单构造数据训练微调该模型,体验整个过程。在大模型ChatGPT发布之前,NLP领域是BERT,T5模型为主导,T5(Text-to-Text Transfer Transformer)是一种由Google Brain团队在2019年提出的自然…

解决Android Studio The path ‘X:\XXX‘ does not belong to a directory.

目录 前言 一、问题描述 二、解决方法 前言 在移动应用开发领域&#xff0c;Android Studio作为一款功能强大的集成开发环境&#xff0c;为开发人员提供了丰富的工具和功能。然而&#xff0c;在使用Android Studio的过程中&#xff0c;有时也会遇到各种各样的问题和错误。 &…

万界星空科技低代码平台基本模块与优势

低代码平台&#xff08;Low-Code Development Platform&#xff0c;LCDP&#xff09;就是使用低代码的方式进行开发&#xff0c;能快速设置和部署的平台。低代码平台旨在简化应用开发过程&#xff0c;降低开发难度&#xff0c;缩短开发周期&#xff0c;并使非专业程序员&#x…

Maven 整理(含面试题)

Maven是Java 项目必备&#xff0c;Maven 主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。项目构建工具 、更好的管理依赖 目录 Maven安装与运行maven 重要知识点面试题 Maven安装与运行 Maven 是一个项目管理工具&#xff0c;可以对 Java 项目进行构建、依赖管理…