三、k8s资源管理

news2025/1/10 23:41:14

文章目录

        • 1 k8s资源管理介绍
        • 2 YAML语言介绍
        • 3 资源管理方式
          • 3.1 命令式对象管理
          • 3.2 命令式对象配置
          • 3.3 声明式对象配置
          • 3.4 如何编写YAML

1 k8s资源管理介绍

在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。

kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。
kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在Pod中,而kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。
Pod可以提供服务之后,就要考虑如何访问Pod中服务,kubernetes提供了Service资源实现这个功能。
当然,如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储系统

在这里插入图片描述

2 YAML语言介绍

关于 YAML 语言的其他知识点就不再一一细说了,都整理在了这张图里,你可以参考YAML 官网。
在这里插入图片描述

小提示:
1 书写yaml切记: 后面要加一个空格
2 如果需要将多段yaml配置放在一个文件中,中间要使用—分隔
3 下面是一个yaml转json的网站,可以通过它验证yaml是否书写正确
https://www.json2yaml.com/convert-yaml-to-json

3 资源管理方式

命令式对象管理:直接使用命令去操作kubernetes资源

kubectl run nginx-pod --image=nginx:1.17.1 --port=80

命令式对象配置:通过命令配置和配置文件去操作kubernetes资源

kubectl create/patch -f nginx-pod.yaml

声明式对象配置:通过apply命令和配置文件去操作kubernetes资源

kubectl apply -f nginx-pod.yaml

在这里插入图片描述

3.1 命令式对象管理

kubectl命令
kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下:

kubectl [command] [type] [name] [flags]

comand:指定要对资源执行的操作,例如create、get、delete

type:指定资源类型,比如deployment、pod、service

name:指定资源的名称,名称大小写敏感

flags:指定额外的可选参数

# 查看所有pod
kubectl get pod 

# 查看某个pod
kubectl get pod pod_name

# 查看某个pod,以yaml格式展示结果
kubectl get pod pod_name -o yaml

在使用 kubectl 命令的时候,你还可以加上一个参数 --v=9,它会显示出详细的命令执行过程,清楚地看到发出的 HTTP 请求,比如:

kubectl get pod --v=9
[root@k8s-master k8s]# kubectl get pod --v=9
I0101 12:23:30.136356   30202 loader.go:375] Config loaded from file:  /root/.kube/config
I0101 12:23:30.146379   30202 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json;as=Table;v=v1beta1;g=meta.k8s.io, application/json" -H "User-Agent: kubectl/v1.17.4 (linux/amd64) kubernetes/8d8aa39" 'https://192.168.192.144:6443/api/v1/namespaces/default/pods?limit=500'
I0101 12:23:30.163967   30202 round_trippers.go:443] GET https://192.168.192.144:6443/api/v1/namespaces/default/pods?limit=500 200 OK in 17 milliseconds

可以看到,kubectl 客户端等价于调用了 curl,向 8443 端口发送了 HTTP GET 请求,URL 是 /api/v1/namespaces/default/pods。

资源类型
kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:

kubectl api-resources

在这里插入图片描述
操作
kubernetes允许对资源进行多种操作,可以通过–help查看详细的操作命令

kubectl --help

经常使用的操作有下面这些:
在这里插入图片描述
下面以一个namespace / pod的创建和删除简单演示下命令的使用:

# 创建一个namespace
[root@k8s-master k8s]# kubectl create namespace dev
namespace/dev created

# 获取namespace
[root@k8s-master k8s]# kubectl get ns
NAME                   STATUS   AGE
default                Active   8d
dev                    Active   31s
kube-flannel           Active   8d
kube-node-lease        Active   8d
kube-public            Active   8d
kube-system            Active   8d
kubernetes-dashboard   Active   6d

# 在此namespace下创建并运行一个nginx的Pod
[root@k8s-master k8s]# kubectl run pod --image=nginx:latest -n dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created

# 查看新创建的pod
[root@k8s-master k8s]# kubectl get pod -n dev
NAME                   READY   STATUS    RESTARTS   AGE
pod-644584df94-h74sv   1/1     Running   0          2m19s
# 删除指定的pod
[root@k8s-master k8s]# kubectl delete pod  pod-644584df94-h74sv -n dev
pod "pod-644584df94-h74sv" deleted

# 删除指定的namespace
[root@k8s-master k8s]# kubectl delete ns dev
namespace "dev" deleted
3.2 命令式对象配置

命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。

1) 创建一个nginxpod.yaml,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest

2)执行create命令,创建资源:

[root@k8s-master k8s]# kubectl create -f nginx-pod.yaml 
namespace/dev created
pod/nginxpod created

此时发现创建了两个资源对象,分别是namespace和pod

3)执行get命令,查看资源:

[root@k8s-master k8s]# kubectl get -f nginx-pod.yaml 
NAME            STATUS   AGE
namespace/dev   Active   41s

NAME           READY   STATUS    RESTARTS   AGE
pod/nginxpod   1/1     Running   0          40s

这样就显示了两个资源对象的信息

4)执行delete命令,删除资源:

[root@k8s-master k8s]# kubectl delete -f nginx-pod.yaml 
namespace "dev" deleted
pod "nginxpod" deleted

此时发现两个资源对象被删除了

总结: 命令式对象配置的方式操作资源,可以简单的认为:命令 + yaml配置文件(里面是命令需要的各种参数)

3.3 声明式对象配置

声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply


# 首先执行一次kubectl apply -f yaml文件,发现创建了资源
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created

# 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged

总结:
其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
使用apply操作资源:
如果资源不存在,就创建,相当于 kubectl create
如果资源已存在,就更新,相当于 kubectl patch

扩展:在node节点上运行kubectl

kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube,如果想要在node节点运行此命令,需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作:

scp -r $HOME/.kube node2:$HOME/

使用推荐: 三种方式应该怎么用 ?

创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml

删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml

查询资源 使用命令式对象管理 kubectl get(describe) 资源名称

3.4 如何编写YAML

第一个技巧:就是 kubectl api-resources 命令,它会显示出资源对象相应的 API 版本和类型,比如 Pod 的版本是“v1”,Ingress 的版本是“networking.k8s.io/v1”,照着它写绝对不会错。

第二个技巧:是命令 kubectl explain,它相当于是 Kubernetes 自带的 API 文档,会给出对象字段的详细说明,这样我们就不必去网上查找了。比如想要看 Pod 里的字段该怎么写,就可以这样:

kubectl explain pod
kubectl explain pod.metadata
kubectl explain pod.spec
kubectl explain pod.spec.containers

第三个技巧:使用kubectl 的两个特殊参数 --dry-run=client 和 -o yaml,前者是空运行,后者是生成 YAML 格式,结合起来使用就会让 kubectl 不会有实际的创建动作,而只生成 YAML 文件。

kube17版本的使用 --dry-run=1

例如,想要生成一个 Pod 的 YAML 样板示例,可以在 kubectl run 后面加上这两个参数:
就会生成一个绝对正确的 YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: ngx
  name: ngx
spec:
  replicas: 1
  selector:
    matchLabels:
      run: ngx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: ngx
    spec:
      containers:
      - image: nginx:alpine
        name: ngx

接下来你要做的,就是查阅对象的说明文档,添加或者删除字段来定制这个 YAML 了。这个小技巧还可以再进化一下,把这段参数定义成 Shell 变量(名字任意,比如 d o / do/ do/go,这里用的是$out),用起来会更省事,比如:

export out="--dry-run=client -o yaml"
kubectl run ngx --image=nginx:alpine $out

上一篇:二、kubernetes集群环境搭建
下一篇:四、k8s实战入门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL字符集和排序规则详解

一. 相关概念1. 字符集MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL实例的交互相关,排序规则和字符串的对比规则相关(1). 字符集的设置可以在MySQL实例、数据库、表、列四个级别(2). MySQL设置字符集支持在InnoDB, M…

Git学习:工作流学习实践

文章目录一、前言二、开发过程一、前言 在实践的项目开发过程中,会使用Git或者类似的版本控制工具来管理代码。下面介绍基于Git工具在实际项目开发过程中的使用流程。 如上图所示显示了项目开发的一个简化流程。在开发一个新需求/版本的时候,一般会从主…

筛法求欧拉函数

欧拉函数的定义 在数论中,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目. 欧拉函数的重要性质 若(即m与n互质),则若为质数,则若为质数,则对于性质2,若为质数,则小于的个数都互质&am…

北大陈斌Python算法笔记(二)

前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:红中 🍂不就是蓝桥杯嘛,干他!!我堂堂 栈的应用:简单括号匹…

docker安装nginx与容器之间的互相通信

目录 1. docker网络模式 2. 连接容器的三种方法 3. Docker Networking 3.1 创建网络 3.2 查看宿主机中创建的网络 3.3 删除网络 3.4 如何使用网络 4.搭建Nginx 1.准备工作 1.1 拉取镜像 ​编辑1.2 在宿主机中创建挂载目录 2.准备2个tomcat 容器集群 3.准备 Nginx配…

力扣(LeetCode)1658. 将 x 减到 0 的最小操作数(C++/Python)

题目描述 逆向思维滑动窗口 题目分析 : 从数组左侧和右侧,取出左侧的连续数字,右侧的连续数字,使得这些数字之和等于 x,维护最小取数次数,作为答案 。 设整个数组之和 total ,除去左侧和右侧的…

Notes 12.0.2版本新特性

大家好,才是真的好。 随着上周代号多瑙河的Notes/Domino 12.0.2版本正式发布,很多人在周末加班,写新特性和功能测试文档等,恩,我也是这样,所以今天第一时间来介绍下Notes 12.0.2客户机新特性。 从12.0.2版…

GC中的一些技术

OopMap(ordinary object pointer map) 记录时机 JIT编译时在特定的位置(安全点/安全区)记录下OopMap,记录了执行到该方法的某条指令的时候,栈上和寄存器里哪些位置是引用类加载动作完成时,Hot…

关于sql注入这一篇就够了

本文章根据b站迪总课程总结出来,若有不足请见谅 目录 本文章根据b站迪总课程总结出来,若有不足请见谅 存在sql注入条件 判断数据库类型 注入mysql思路 判断网站是否存在注入点 判断列名数量(字段数) 文件读写操作 网站路径获取方法 注入类型 按注入点数据…

Linux物理内存:伙伴系统(buddy system)

引入之前写过一篇文章将伙伴系统,可以参考:内存池算法简介从上面的虚拟机上可以看到,X86系统上,有三个物理内存区,DMA,DMA32,Normal,可以看到阶数为11。struct page {atomic_t _mapc…

J DBC相关

JDBC基础什么是JDBC入门程序功能类工具类SQL注入攻击原理PreparedStatement的介绍数据库连接池原理自定义连接池归还连接JDBC框架自定义JDBC框架JDBC基础 什么是JDBC 用于执行SQL语句的java API,实现不同关系型数据库的连接 入门程序 导入jar包 注册驱动 获取连…

Linux驱动开发基础__gpio子系统重要概念

目录 1 引入 2 在设备树中指定引脚 3 在驱动代码中调用GPIO子系统 4 sysfs 中的访问方法 1 引入 要操作 GPIO 引脚,先把所用引脚配置为 GPIO 功能,这通过 Pinctrl 子系统来实现。 然后就可以根据设置引脚方向(输入还是输出)、读值──获得电平状…

Windows Docker Desktop开放API端口2375用于远程调用

Windows Docker Desktop开放API端口2375用于远程调用问题解决开启IP Helper服务开启Docker配置开放2375端口端口映射找到需要暴露的IP执行端口映射命令Windows防火墙关闭防火墙添加防火墙规则测试问题 Windows Docker Desktop为了安全,默认设置中只有localhost:237…

入门的葡萄酒知识

葡萄酒的分类(根据制造方法) 静态葡萄酒 红葡萄酒 Red Wine,白葡萄酒 White Wine,玫瑰红/桃红/粉红葡萄Rose Wine。 气泡(起泡)葡萄酒 有气泡的葡萄酒,分香槟Champagne及气泡葡萄酒两类。只有在…

Servlet(上)

Servlet组件(上) 学习目标 了解Web资源的概念了解为什么需要Servlet掌握Servlet是什么掌握Servlet的HelloWorld掌握Servlet的执行原理掌握Servlet的生命周期和生命周期方法掌握ServletConfig的使用掌握Servlet的体系结构掌握Servlet的映射路径的编写方式掌握创建Servlet最常用…

机器学习简单介绍

机器学习简介 定义 机器学习是人工智能(AI)和计算机科学的一个分支,专注于使用数据和算法来模仿人类的学习方式,逐步提高其准确性。 简单来说,是一种运用数学公式来对问题进行最优化求解的方法 分类 一般来说将:机器学习分为…

睿联技术在创业板过会:收入依赖摄像机单机,计划募资11亿元

2023年1月6日,深圳证券交易所披露的信息显示,深圳市睿联技术股份有限公司(下称“睿联技术”)获得创业板上市委员会审议通过。据贝多财经了解,睿联技术的上市申请于2022年6月2日获得创业板受理。 本次冲刺创业板上市&am…

Unity 3D 地形系统概述|| Unity 3D 创建地形

在三维游戏世界中,通常会将丰富多彩的游戏元素融合在一起,比如游戏中起伏的地形、郁郁葱葱的树木、蔚蓝的天空、、凶恶的猛兽等,营造出身临其境的游戏沉浸感,让玩家置身游戏世界,忘记现实。 地形作为游戏场景中必不可…

Git 基本概念

一、git 官网 https://git-scm.com/ 二、git 数据传输命令 三、基本操作 1、命令整理 命令说明git init初始化 git 库git config获取和设置存储库或全局配置项git status显示工作树状态git add将文件内容添加到index(暂存区)git commit将index(暂存区)修改提交到本地仓库gi…

你知道微服务架构中的“发件箱模式”吗

前言 微服务架构如今非常的流行,这个架构下可能经常会遇到“双写”的场景。双写是指您的应用程序需要在两个不同的系统中更改数据的情况,比如它需要将数据存储在数据库中并向消息队列发送事件。您需要保证这两个操作都会成功。如果两个操作之一失败&…